konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Przemysław R.:
Kiepski koder SQL-a robił ten raport
dobry koder zrobił by to krokowo i asynchronicznie, wykorzystując mechanizmy wbudowanye w SQL-a? np. alerty, joby itp, itd

Alert czy job nie do tego zostaly stworzone. Procedura(y) beda zagmatwane i niemozliwe do przejecia przez innego programiste. Nie bedzie ani szybsze, ani lepsze pod zadnym wzgledem, ale tak - da sie.

Oceniasz kodera na podstawie informacji, ktore ci przekazalem? Mocne slowa!
Wracając do tematu raportów
* wielokrotnie zagnieżdżone subselecy - jak wygląda ten temat w nhibernate?

Z automatu, wygodnie i szybko, mozliwosc konfiguracji czy NHib powinien uzyc subselecta czy joina, strategii prefetch itp.itd. Jak masz ochote mozesz uzyc projekcji i zrobic dokladnie to, co robi stored procedure, albo nawet ja wywolac.
* odwołania do Linked Serwers za pomocą np. openquery?

Z automatu, banalne, to open query jest obejsciem problemu, ktore NHibernate rozwiazuje naturalnie.
* polecenia niestandardowe np. BULK INSERT

Mylisz pojecia, NHibernate to zrodlo dostepu do danych, bulk insert to operacja administracyjna bazy danych. Uzywamy bulk insertow do wiekszych importow (>miliona rekordow), ale nijak to sie ma do ORMow.
Staram sie powiedziec, ze dobry, przejrzysty algorytm dziala w praktyce lepiej, a nie ma lepszego miejsca dla logiki niz Class Library. A im bardziej zaawansowane Stored Procedures tym wiecej logiki musza "pozyczyc", to bardzo niebezpieczne.

Chciałeś powiedzieć że algorytm się zmienił przez co całość działa wydajniej.
wprowadzenie ORM-a nie ma tu absolutnie nic do rzeczy, to tylko narzędzie do osiągnięcia konkretnego celu tak samo jak wywołanie JOBa

Nie to chcialem powiedziec, ale to, ze im wiecej uzywasz sp tym wiecej logiki lezy w bazie. Stad niedaleko do katastrofy, szczegolnie o nia latwo przy zmianie wymagan np. uprawnien.
Ja nie jestem wrogiem procedur, wspolpisalem dwa bardzo duze systemy na sp w Sql Server. Jeden z nich ma od jakiegos czasu problemy wydajnosciowe, na ktore pierwszym krokiem jest sprawdzenie procedury, a jak optymalizacja nie daje porzadanych rezultatow - przepisanie fragmentu w NHibernate. Roznica w wydajnosci ok. 4-5x na korzysc ORMa. Takze nie demonizowalbym i nie teoretyzowal, tylko sprawdzil w praktyce, bo wyniki okazuja sie zaskakujace :)

jeżeli nie wiązało się to ze zmianą algorytmu działania to jestem pod głębokim wrażeniem, ale coś mi się wydaje że tan sam kiepski koder T-SQL-a pisał te procedury :)

Kod o ktorym mowa nie byl napisany kiepsko, a koderzy bynajmniej amatorami nie sa, ale nie bede chwalil sie kto ma wieksze grabki, bo nie o to chodzi.
nie ma fizycznej możliwości żeby wygenerowany SQL z poziomu ORM-a był szybszy od tego z procedury

Rozpatrujac sam kod SQL - nie ma. Rozpatrujac kontekst decyzyjny wykonywania kodu - jak najbardziej. I o to sie rozchodzi.
czymś się różni od zwykłego profilera?

Masz na mysli SQL Server Profilera? Jezeli tak to wszystkim, przede wszystkim umozliwia dopasowanie definicji i zapytan pod katem kontekstu (o ktorym caly czas pisze) w jakim sa one wykonywane. Sql profiler to takie podstawowe narzedzie od ktorego przygode z optymalizacja i monitoringiem sie zaczyna.

Korzystales kiedys z NHibernate?

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Sebastian Pienio:
Przemysław R.:
Kiepski koder SQL-a robił ten raport
dobry koder zrobił by to krokowo i asynchronicznie, wykorzystując mechanizmy wbudowanye w SQL-a? np. alerty, joby itp, itd

Alert czy job nie do tego zostaly stworzone. Procedura(y) beda zagmatwane i niemozliwe do przejecia przez innego programiste. Nie bedzie ani szybsze, ani lepsze pod zadnym wzgledem, ale tak - da sie.

dla osoby znającej T-SQL-a nie
dla osoby która go nie zna to czarna magia, jeżeli takich ludzi macie to wcale się nie dziwię że migrujecie rozwiązania do kodu - pewnie w C#
Oceniasz kodera na podstawie informacji, ktore ci przekazalem? Mocne slowa!

no bo kiepski był, co na to poradzę
czasem trzeba użyć czegoś więcej niż insert/update/delete
Wracając do tematu raportów
* wielokrotnie zagnieżdżone subselecy - jak wygląda ten temat w nhibernate?

Z automatu, wygodnie i szybko, mozliwosc konfiguracji czy NHib powinien uzyc subselecta czy joina, strategii prefetch itp.itd. Jak masz ochote mozesz uzyc projekcji i zrobic dokladnie to, co robi stored procedure, albo nawet ja wywolac.

a co subselecty mają z procedurami?
powiedzmy że można je tam trzymać, ale nie ma musu

chodzi stricte o wydajność pewnych rozwiązań. np. mam średnią ochotę robić coś w pętli jak mogę blokowo. Siłą operacji wykonywanych w SQL-u jest fakt ich blokowości. Wymaga niestety on większego skila z SQL-a, co jak widzę nie jest zbyt oczywiste

zresztą w T-SQL-u jak ktoś nie umie to też zchrzani np. robiąc UPDATE w pętli :)
* odwołania do Linked Serwers za pomocą np. openquery?

Z automatu, banalne, to open query jest obejsciem problemu, ktore NHibernate rozwiazuje naturalnie.

eee

remote update danymi z dwu innych baz jednym zapytaniem, bez żadnego importu / eksportu itp itd

albo user nie ma sterowników do bazy z której korzysta, robi to przez pośrednika

a teraz pytanie niby jak NHibernate rozwiązuje tego typu problemy?
* polecenia niestandardowe np. BULK INSERT

Mylisz pojecia, NHibernate to zrodlo dostepu do danych, bulk insert to operacja administracyjna bazy danych. Uzywamy bulk insertow do wiekszych importow (>miliona rekordow), ale nijak to sie ma do ORMow.

operacja jak każda inna, jeżeli usera ma do niej prawo to ja wykonuje :)

chodzi o to że importowanie w pętli dużej ilości danych jest głupie, a do tego zmierza filozofia ORM-a. Otwieramy plik txt, odczytujemy linię i dodajemy wiersz z poziomu ORM-a - tak zrobi większość programistów bo nie zdaje sobie sprawy że można inaczej
Staram sie powiedziec, ze dobry, przejrzysty algorytm dziala w praktyce lepiej, a nie ma lepszego miejsca dla logiki niz Class Library. A im bardziej zaawansowane Stored Procedures tym wiecej logiki musza "pozyczyc", to bardzo niebezpieczne.

Chciałeś powiedzieć że algorytm się zmienił przez co całość działa wydajniej.
wprowadzenie ORM-a nie ma tu absolutnie nic do rzeczy, to tylko narzędzie do osiągnięcia konkretnego celu tak samo jak wywołanie JOBa

Nie to chcialem powiedziec, ale to, ze im wiecej uzywasz sp tym wiecej logiki lezy w bazie. Stad niedaleko do katastrofy, szczegolnie o nia latwo przy zmianie wymagan np. uprawnień.

Nikt o uprawnieniach nie mówił
Na razie mowa była tylko o kiepskim algorytmie w procedurze i nieumiejętnym stosowaniu dostępnych rozwiązań.

Chyba muszę wziąć poprawkę na to że większość programistów zna SQL-a pobieżnie
Ja nie jestem wrogiem procedur, wspolpisalem dwa bardzo duze systemy na sp w Sql Server. Jeden z nich ma od jakiegos czasu problemy wydajnosciowe, na ktore pierwszym krokiem jest sprawdzenie procedury, a jak optymalizacja nie daje porzadanych rezultatow - przepisanie fragmentu w NHibernate. Roznica w wydajnosci ok. 4-5x na korzysc ORMa. Takze nie demonizowalbym i nie teoretyzowal, tylko sprawdzil w praktyce, bo wyniki okazuja sie zaskakujace :)

jeżeli nie wiązało się to ze zmianą algorytmu działania to jestem pod głębokim wrażeniem, ale coś mi się wydaje że tan sam kiepski koder T-SQL-a pisał te procedury :)

Kod o ktorym mowa nie byl napisany kiepsko, a koderzy bynajmniej amatorami nie sa, ale nie bede chwalil sie kto ma wieksze grabki, bo nie o to chodzi.

są zawodowcy i zawodowcy
Jest sporo osób które myślą że umieją programować w dowolnym języku
nie ma fizycznej możliwości żeby wygenerowany SQL z poziomu ORM-a był szybszy od tego z procedury

Rozpatrujac sam kod SQL - nie ma. Rozpatrujac kontekst decyzyjny wykonywania kodu - jak najbardziej. I o to sie rozchodzi.

trzeba umiejętnie balansować gdzie masz część logiki odpowiedzialnej za podejmowanie decyzji, a gdzie strikte operacje do przetwarzania danych
czymś się różni od zwykłego profilera?

Masz na mysli SQL Server Profilera? Jezeli tak to wszystkim, przede wszystkim umozliwia dopasowanie definicji i zapytan pod katem kontekstu (o ktorym caly czas pisze) w jakim sa one wykonywane. Sql profiler to takie podstawowe narzedzie od ktorego przygode z optymalizacja i monitoringiem sie zaczyna.

Korzystales kiedys z NHibernate?

z NHibernate, z innego ORM-a tak
na codzień używam SQL-a w różnych dialektach, niekoniecznie w ujęciu proceduralnym

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Przemysław R.:
Alert czy job nie do tego zostaly stworzone. Procedura(y) beda zagmatwane i niemozliwe do przejecia przez innego programiste. Nie bedzie ani szybsze, ani lepsze pod zadnym wzgledem, ale tak - da sie.

dla osoby znającej T-SQL-a nie
dla osoby która go nie zna to czarna magia, jeżeli takich ludzi macie to wcale się nie dziwię że migrujecie rozwiązania do kodu - pewnie w C#

Alert i job a T-SQL? Doczytaj :)
trzeba umiejętnie balansować gdzie masz część logiki odpowiedzialnej za podejmowanie decyzji, a gdzie strikte operacje do przetwarzania danych

Logika o operacja przetwarzania danych to to samo, polecam poczytac tez o DDD.
z NHibernate, z innego ORM-a tak
na codzień używam SQL-a w różnych dialektach, niekoniecznie w ujęciu proceduralnym

Mam wrazenie, ze pobieznie.
no bo kiepski był, co na to poradzę
czasem trzeba użyć czegoś więcej niż insert/update/delete
Nikt o uprawnieniach nie mówił
Na razie mowa była tylko o kiepskim algorytmie w procedurze i nieumiejętnym stosowaniu dostępnych rozwiązań.
Chyba muszę wziąć poprawkę na to że większość programistów zna SQL-a pobieżnie
są zawodowcy i zawodowcy
Jest sporo osób które myślą że umieją programować w dowolnym języku

Wywody personalne z braku argumentow sa nie na miejscu, czas na EOT z mojej strony.

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Sebastian Pienio:
Przemysław R.:
Alert czy job nie do tego zostaly stworzone. Procedura(y) beda zagmatwane i niemozliwe do przejecia przez innego programiste. Nie bedzie ani szybsze, ani lepsze pod zadnym wzgledem, ale tak - da sie.

dla osoby znającej T-SQL-a nie
dla osoby która go nie zna to czarna magia, jeżeli takich ludzi macie to wcale się nie dziwię że migrujecie rozwiązania do kodu - pewnie w C#

Alert i job a T-SQL? Doczytaj :)

eee

żeby osiągnąć efekt asynchroniczności wykorzystujesz te dwa gadżety jakie dostarcza system agent

z procedury wywołujesz alert-a
alert uruchamia Job-a który pracuje sobie w tle

taki Job robi kawałek raportu a na końcu wywołuje alert-a który uruchamia job-a i tak w kółko

wynik jest taki że wykonujemy raport strikte po kawałku

teraz pytanie czy wykorzystałeś do czegoś joba? o alerta nie pytam ;)
z NHibernate, z innego ORM-a tak
na codzień używam SQL-a w różnych dialektach, niekoniecznie w ujęciu proceduralnym

Mam wrazenie, ze pobieznie.

Wywody personalne z braku argumentow sa nie na miejscu, czas na EOT z mojej strony.

a to było nie personalne? Moralność Kalego?

no bo kiepski był, co na to poradzę

kiepski algorytm, który można było ulepszyć, co zresztą zrobiliście, świadczy tylko o autorze koncepcji pierwotnej

równie dobrze można by było to zastosować w drugą stronę kiepski koder zrobił update w pętli, przyszedł dobry koder SQl-a zrobił procedurę gdzie blokowo zrobił dwie instrukcje i działa szybciej
czasem trzeba użyć czegoś więcej niż insert/update/delete

co w tym osobistego?
Nikt o uprawnieniach nie mówił
Na razie mowa była tylko o kiepskim algorytmie w procedurze i nieumiejętnym stosowaniu dostępnych rozwiązań.

umiejętności stosowania dowolnego rozwiązania nie nabywa się przez czytanie dokumentacji. trzeba stosować, praktykować itp, itd
Chyba muszę wziąć poprawkę na to że większość programistów zna SQL-a pobieżnie

poczytaj rożnej maści fora gdzie programiści mają problem z wykonaniem Joina, gdyby nie ORM-y byli by w lesie daleko

Konstrukcje bardziej zaawansowane np. skorelowane subselecty, niestandardowe konstrukcje np. rekurencyjne, wykorzystanie funkcji np. RANK OVER w warunkach to już bclak magic
są zawodowcy i zawodowcy

tak było jest i będzie, ameryki nie odkryłem :)
Jest sporo osób które myślą że umieją programować w dowolnym języku

T-SQL to też język programowania, trzeba w nim umieć programować
żeby to robić dobrze trzeba mieć wprawę i znać mechanizmy, żeby to osiągnąć trzeba poświęcić trochę czasu

jeżeli robi się jakieś rozwiązanie i jest ono kiepskie, bo można je zastąpić innym rozwiązaniem szybszym, wydajniejszym
Wywody personalne z braku argumentow sa nie na miejscu, czas na EOT z mojej strony.

powiedzmy że znam słabe punkty ORM-mów :) - czy to jest niemerytoryczne, a może niepolityczne?

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Sebastian Pienio
Zamieszczę Ci najprostszą definicję DAL, bo wydaje mi się, że nie rozumiesz o czym mówimy.

A Data Access Layer (DAL) is a layer of a computer program which provides simplified access to data stored in persistent storage of some kind, such as an entity-relational database.

For example, the DAL might return a reference to an object (in terms of object-oriented programming) complete with its attributes instead of a row of fields from a database table. This allows the client (or user) modules to be created with a higher level of abstraction. This kind of model could be implemented by creating a class of data access methods that directly reference a corresponding set of database stored procedures. Another implementation could potentially retrieve or write records to or from a file system. The DAL hides this complexity of the underlying data store from the external world.

For example, instead of using commands such as insert, delete, and update to access a specific table in a database, a class and a few stored procedures could be created in the database. The procedures would be called from a method inside the class, which would return an object containing the requested values. Or, the insert, delete and update commands could be executed within simple functions like registeruser or loginuser stored within the data access layer.

Also, business logic methods from an application can be mapped to the Data Access Layer. So, for example, instead of making a query into a database to fetch all users from several tables the application can call a single method from a DAL which abstracts those database calls.

Applications using a data access layer can be either database server dependent or independent. If the data access layer supports multiple database types, the application becomes able to use whatever databases the DAL can talk to. In either circumstance, having a data access layer provides a centralized location for all calls into the database, and thus makes it easier to port the application to other database systems (assuming that 100% of the database interaction is done in the DAL for a given application).

Object-Relational Mapping tools provide data layers in this fashion, following the active record model. The ORM/active-record model is popular with web frameworks, but it has not been proven to be better than a straightforward approach of implementing a collection of domain-specific data access functions.


A teraz:

Pisanie własnego dostępu do danych NIE OZNACZA, że:
- pozbywamy się modelu opisanego klasami,
- cała logika jest w procedurach,
- jesteśmy zależni od konkretnej bazy, no chyba że to jest zamierzenie,
- nie powiedziane, że zwykły programista będzie musiał się przekopywać przez procedury,
spokojnie będzie mógł operować tylko na modelu klas,

Pisząc własne podejście:
- możemy je napisać w różnych dialektach jeśli tego potrzebujemy i się uniezależnić od różnego rodzaju źródeł danych ( skoro kolega tak strasznie narzekał na zmianę źródła, to nie przemyślał do końca Swojej warstwy dostępu do danych i to dla mnie żaden argument nad wyższością nhibernate, po prostu jest to obraz krótko wzroczności piszącego. No chyba że był przykaz MS SQL.)
- czasami właśnie to, że jest pisany dostęp do konkretnego rodzaju źródła ma wymierne korzysći w postaci wykorzystania różnych możliwości nie koniecznie używanych w innych dialektach. Niestety taki nhibernate robi to uniewersalnie, dlatego z wielu możliwości nie korzysta:)
- nie zawsze musimy się posiłkować obiektami :)
- nie specjalnie podoba mi się mapowanie wszystkiego w xmlach:)

Dlaczego nie zawsze nhibernate jest taki ekstra:
- powiem tyle, zrób aby aplikacja webowa działa w medium trust, słyszałem o jakiś obejściach itp.. ale z reguły zawsze gdzieś się to wysypuje,
- brak możliwości pobierania wybranych kolumn z tabeli ( to był w dużej mierze czasami bardzo poważny błąd, abym korzystał z nhibernate )
- wszystko jest obiektem i nie ma czegoś takiego jak porcje danych, ale to jest prawdziwe dla karzdego ORM'a
- "n + 1 problem" ( oczywiście chcemy lazy load :)) wiem , że jest fetch
- nie można zmapować kilku tabel w jedną klasę ( obiekt )
- za jednym zamachem robić update, delete, insert w kilku tabelach.. itp..
- niestety z reguły duży plus, lecz czasami ogromny minus wszystko jest obiektami:)

prosty przykład : chcemy coś takiego przedstawić za pomocą nhibernate:

public class SpansMultipleTables
{
public int ComID {get; set;}

public string Tab1Value {get; set;}

public int Tab2Value {get; set;}

public float Tab3Value {get; set;}
}


Id - jest w każdej tabeli,
wartości rozsiane są w 3 tabelach.
Jak szybko i łatwo przedstawić coś takiego w NH ?

Linked servers przede wszystkim miało służyć możliwości jednoczesnej pracy na różnych źródłach danych jednocześnie np. Do sqla pobieramy dane z Oracle'a, accessa lub innego źródła w jednym czasie. Powiedz mi jak szybko to zrobisz przy pomocy nhibernate? może coś się ostatnio zmieniło?

A tak Swoją drogą czasami jak się widzi takie zastosowania, gdzie na siłę coś relacyjnego czyli bazy danych na siłę opakowuje się obiektami to aż się słabo robi.

Ja osobiście mam bardzo dobre doświadczenia odnośnie własnych warstw dostępu danych.Łukasz Machowski edytował(a) ten post dnia 19.07.10 o godzinie 11:30

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Przemysław R.:
Sebastian Pienio:
Przemysław R.:
z NHibernate, z innego ORM-a tak
na codzień używam SQL-a w różnych dialektach, niekoniecznie w ujęciu proceduralnym

Mam wrazenie, ze pobieznie.

Wywody personalne z braku argumentow sa nie na miejscu, czas na EOT z mojej strony.

a to było nie personalne? Moralność Kalego?

Na podstawie Twoich wypowiedzi odnioslem wrazenie, ze znajomosc NHibernate jest u Ciebie pobiezna. Nie pisalem ani nie sugerowalem niczego personalnie takze daruj sobie teksty o mojej moralnosci.
T-SQL to też język programowania, trzeba w nim umieć programować
żeby to robić dobrze trzeba mieć wprawę i znać mechanizmy, żeby to osiągnąć trzeba poświęcić trochę czasu

Polecam zrobic testy, wiedza, ktora przedstawiasz jest czysto teoretyczna. Program (nie zapytanie) w T-SQLu jest drastycznie wolniejszy niz przetworzenie tego samego client side, to oczywiste juz od ladnych kilku lat.

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Vietnam and O/R mapping :)

A tak BTW, to po co spory "polityczno-religijne" :) ? Panowie, nie bądźmy fanboyami i zapomnijmy o "poprawności politycznej", bo gość od IT ma dobrać rozwiązanie do potrzeb, a nie odwrotnie, tylko dlatego, że zakochał się w NHibernate czy innym cudzie.

Może nasz początkujący w tym temacie Autor, aby wyciągnąć z tego jakąś mierzalną korzyść, napisze sobie na początek prosty, "akademicki" projekt (takie demko możliwości), bazujący kolejno na różnych rozwiązaniach - ADO.NET (typowane DataSety + DataAdapter + DataConnection/Command lub jeszcze "niżej" - DataReader), Sooda/Subsonic jako przykład prostszego ORM, NHibernate jako przykład złożonego. Najpierw rozwiązać dane zagadnienie w oparciu o jedną metodę, potem zastąpić ją innym rozwiązaniem i "poczuć to". Napisanie od zera w nowej technologii wydajnej społecznościówki i tak będzie chyba raczej zbyt karkołomne i skończy się przepisaniem projektu od nowa.

Wtedy taka osoba będzie miała jakieś podstawowe rozeznanie w różnych technologiach i sama określi - czy ma bardzo złożony model, czy może rozbudowany liczebnością encji, ale prosty w obsłudze o prostym mapowaniu klasa/tabela. Czy wykonywane będą złożone kwerendy, czy wystarczy "zapytanie przez wzorzec"? Czy wykonywane będą na tym jakieś megazłożone podsumowania i raporty? Operacje wsadowe na tysiące rekordów? A jak się obsługuje tu triggery, UDP, co to są interceptory, jakie są strategie generowania kluczy i jak się tu rozwiązuje relację m:n?

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Przemysław R.:
1. Batch/Bulk jest możliwe (StatelessSession).
2. Subselect również (SetFetchMode - Subselect/Join itd.).

P.S. Żeby optymalnie wykorzystać NH trzeba znać SQLa.

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Jarek D.:
Przemysław R.:
1. Batch/Bulk jest możliwe (StatelessSession).

masowy insert != bulk insert
zresztą chciał bym zobaczyć wynik takiej operacji w profilerze
2. Subselect również (SetFetchMode - Subselect/Join itd.).

spoko, działa

a takie gadżety jak case when? CONVERT, CAST ??

P.S. Żeby optymalnie wykorzystać NH trzeba znać SQLa.

to święte słowa :)Przemysław R. edytował(a) ten post dnia 19.07.10 o godzinie 23:45

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Łukasz Machowski:
Zamieszczę Ci najprostszą definicję DAL, bo wydaje mi się, że nie rozumiesz o czym mówimy.

Z ktorej mojej wypowiedzi wnosisz, ze nie wiem co to DAL?
A teraz:

Pisanie własnego dostępu do danych NIE OZNACZA, że:
- pozbywamy się modelu opisanego klasami,
- cała logika jest w procedurach,
- jesteśmy zależni od konkretnej bazy, no chyba że to jest zamierzenie,
- nie powiedziane, że zwykły programista będzie musiał się przekopywać przez procedury,
spokojnie będzie mógł operować tylko na modelu klas,

Czyli piszemy de facto ORMa?
danych ( skoro kolega tak strasznie narzekał na zmianę źródła, to nie przemyślał do końca Swojej warstwy dostępu do danych i to dla mnie żaden argument nad wyższością nhibernate, po prostu jest to obraz krótko wzroczności piszącego. No chyba że był przykaz MS SQL.)

Nie przewidzenie zmiany wymagan z jednej bazy MS SQL na trzy MySQL to krotkowzrocznosc programisty, eh, zartujesz??
- nie zawsze musimy się posiłkować obiektami :)
- nie specjalnie podoba mi się mapowanie wszystkiego w xmlach:)

Masz do wyboru XML, atrybuty, Fluent lub auto mapping. Jak to nie zadowala to sie poddaje :)
- powiem tyle, zrób aby aplikacja webowa działa w medium trust, słyszałem o jakiś obejściach itp.. ale z reguły zawsze gdzieś się to wysypuje,

Quick "how to" z 2008 roku:
http://nhforge.org/wikis/howtonh/run-in-medium-trust.aspx
- brak możliwości pobierania wybranych kolumn z tabeli ( to był w dużej mierze czasami bardzo poważny błąd, abym korzystał z nhibernate )

Od drivera Sql Server 2008 jest to w standardzie. Oprocz tego masz projekcje, dzieki ktorym mozesz wyciagnac absolutne potrzebne minimum.
- wszystko jest obiektem i nie ma czegoś takiego jak porcje danych, ale to jest prawdziwe dla karzdego ORM'a

Obiekt nie musi byc mocno typowany, moze byc anonymous.
- "n + 1 problem" ( oczywiście chcemy lazy load :)) wiem , że jest fetch

Polecam:
http://nhprof.com/Learn/Alerts/SelectNPlusOne
- nie można zmapować kilku tabel w jedną klasę ( obiekt )

Post z 2007 roku:
http://ayende.com/Blog/archive/2007/04/24/Multi-Table-...
- za jednym zamachem robić update, delete, insert w kilku tabelach.. itp..

Czesciowo odpowiada za to futures:
http://ayende.com/Blog/archive/2009/04/27/nhibernate-f...
za reszte transakcje.
prosty przykład : chcemy coś takiego przedstawić za pomocą nhibernate:

public class SpansMultipleTables
{
public int ComID {get; set;}

public string Tab1Value {get; set;}

public int Tab2Value {get; set;}

public float Tab3Value {get; set;}
}


Id - jest w każdej tabeli,
wartości rozsiane są w 3 tabelach.
Jak szybko i łatwo przedstawić coś takiego w NH ?

Multi table entity, istnieje od wersji 1.2 bodajze, patrz link do strony Orena podany wyzej.
Linked servers przede wszystkim miało służyć możliwości jednoczesnej pracy na różnych źródłach danych jednocześnie np. Do sqla pobieramy dane z Oracle'a, accessa lub innego źródła w jednym czasie. Powiedz mi jak szybko to zrobisz przy pomocy nhibernate? może coś się ostatnio zmieniło?

Rozsadnie napisany DAL na NHibernate separuje fabryke od uzyskiwanych obiektow. Mozesz miec wiele fabryk jednoczesnie aktywnych, nie musisz sie martwic gdzie ktore dane sa przechowywane. Co wiecej, nie musza to byc bazy relacyjne, swietnie sie ta technika sprawdza z innymi typami np. dokumentowymi czy obiektowymi bazami.

Dodatkowo takie rozwiazanie umozliwia stworzenie level 3 cache. Skok wydajnosci jest wtedy kosmiczny, ale utrzymanie spojnosci danych jest bardziej zlozone. Mamy cos podobnego zaimplementowane w nowym systemie, wczesniej przekazywalismy dane procedurze i zapisywala ona do bazy danych. Sredni czas zapisu ok. 60-70ms (troche tego tam jest zapisywane). W tym momencie uzywamy NHibernate i MongoDB rownolegle z dwoma fabrykami, czas zapisu ok. 20ms. Odczyt losowy przy MS SQL ok. 20ms, w drugim <5ms.

> A tak Swoją drogą czasami jak się widzi takie zastosowania,
gdzie na siłę coś relacyjnego czyli bazy danych na siłę opakowuje się obiektami to aż się słabo robi.

Nic na sile :)

Ale jak jestes przeciwny NHibernate z definicji, to poznaj wroga lepiej, narzedzie potrafi zaskoczyc!
Ja osobiście mam bardzo dobre doświadczenia odnośnie własnych warstw dostępu danych.

Jak ktos mnie naprowadzi (chociazby teoretycznie) na cos lepszego (w zakresie wydajnosci) od NHibernate to zaraz zaloze projekt open source i zaimplementuje go po godzinach. Poki co nie widze w postach niczego, co moglo by stanowic zalazek takiego projektu, nie widze tez zadnego konkretnego pomyslu. Ogolniki w stylu "zoptymalizujemy kod pod katem konkretnego use case" wygladaja fajnie na uniwerku/papierze, ale niestety sa nie do zastosowania w praktyce...

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Sebastian Pienio:
Łukasz Machowski:
Zamieszczę Ci najprostszą definicję DAL, bo wydaje mi się, że nie rozumiesz o czym mówimy.

Z ktorej mojej wypowiedzi wnosisz, ze nie wiem co to DAL?

pisząc, że opieram się na samych procedurach:)
A teraz:

Pisanie własnego dostępu do danych NIE OZNACZA, że:
- pozbywamy się modelu opisanego klasami,
- cała logika jest w procedurach,
- jesteśmy zależni od konkretnej bazy, no chyba że to jest zamierzenie,
- nie powiedziane, że zwykły programista będzie musiał się przekopywać przez procedury,
spokojnie będzie mógł operować tylko na modelu klas,

Czyli piszemy de facto ORMa?
>

de facto czasami tak, czasami nie + kilka i więcej zdolności pod nasze rozwiązanie
danych ( skoro kolega tak strasznie narzekał na zmianę źródła, to nie przemyślał do końca Swojej warstwy dostępu do danych i to dla mnie żaden argument nad wyższością nhibernate, po prostu jest to obraz krótko wzroczności piszącego. No chyba że był przykaz MS SQL.)

Nie przewidzenie zmiany wymagan z jednej bazy MS SQL na trzy MySQL to krotkowzrocznosc programisty, eh, zartujesz??

-- skoro było założenie w projekcie takie, to mam nadzieję, że było to optymalnie napisane. Ale skoro piszesz, że nh działało szybciej to na pewno tak nie było.
- nie zawsze musimy się posiłkować obiektami :)
- nie specjalnie podoba mi się mapowanie wszystkiego w xmlach:)

Masz do wyboru XML, atrybuty, Fluent lub auto mapping. Jak to nie zadowala to sie poddaje :)

Fluent jest masakrycznie ograniczony:) o auto proszę nie wspominaj:)
- powiem tyle, zrób aby aplikacja webowa działa w medium trust, słyszałem o jakiś obejściach itp.. ale z reguły zawsze gdzieś się to wysypuje,

Quick "how to" z 2008 roku:
http://nhforge.org/wikis/howtonh/run-in-medium-trust.aspx

no to powiem Ci że z tym solution jest mnóstwo problemów i nigdy nie działa tak jak powinno.
- brak możliwości pobierania wybranych kolumn z tabeli ( to był w dużej mierze czasami bardzo poważny błąd, abym korzystał z nhibernate )

Od drivera Sql Server 2008 jest to w standardzie. Oprocz tego masz projekcje, dzieki ktorym mozesz wyciagnac absolutne potrzebne minimum.

ok, to tu się coś zmieniło:)
- wszystko jest obiektem i nie ma czegoś takiego jak porcje danych, ale to jest prawdziwe dla karzdego ORM'a

Obiekt nie musi byc mocno typowany, moze byc anonymous.
- "n + 1 problem" ( oczywiście chcemy lazy load :)) wiem , że jest fetch

Polecam:
http://nhprof.com/Learn/Alerts/SelectNPlusOne
- nie można zmapować kilku tabel w jedną klasę ( obiekt )

Post z 2007 roku:
http://ayende.com/Blog/archive/2007/04/24/Multi-Table-...

niestety to też nie rozwiązanie:)
- za jednym zamachem robić update, delete, insert w kilku tabelach.. itp..

Czesciowo odpowiada za to futures:
http://ayende.com/Blog/archive/2009/04/27/nhibernate-f...
za reszte transakcje.

tylko częściowo:)
prosty przykład : chcemy coś takiego przedstawić za pomocą nhibernate:

public class SpansMultipleTables
{
public int ComID {get; set;}

public string Tab1Value {get; set;}

public int Tab2Value {get; set;}

public float Tab3Value {get; set;}
}


Id - jest w każdej tabeli,
wartości rozsiane są w 3 tabelach.
Jak szybko i łatwo przedstawić coś takiego w NH ?

Multi table entity, istnieje od wersji 1.2 bodajze, patrz link do strony Orena podany wyzej.

nie daje potrzebnej funkcjonalności, jest bardzo ograniczone
Linked servers przede wszystkim miało służyć możliwości jednoczesnej pracy na różnych źródłach danych jednocześnie np. Do sqla pobieramy dane z Oracle'a, accessa lub innego źródła w jednym czasie. Powiedz mi jak szybko to zrobisz przy pomocy nhibernate? może coś się ostatnio zmieniło?

Rozsadnie napisany DAL na NHibernate separuje fabryke od uzyskiwanych obiektow. Mozesz miec wiele fabryk jednoczesnie aktywnych, nie musisz sie martwic gdzie ktore dane sa przechowywane. Co wiecej, nie musza to byc bazy relacyjne, swietnie sie ta technika sprawdza z innymi typami np. dokumentowymi czy obiektowymi bazami.

no to to samo daje linked servers i dynamic queries:) nie wiem tylko co szybsze będzie;)

Dodatkowo takie rozwiazanie umozliwia stworzenie level 3 cache. Skok wydajnosci jest wtedy kosmiczny, ale utrzymanie spojnosci danych jest bardziej zlozone. Mamy cos podobnego zaimplementowane w nowym systemie, wczesniej przekazywalismy dane procedurze i zapisywala ona do bazy danych. Sredni czas zapisu ok. 60-70ms (troche tego tam jest zapisywane). W tym momencie uzywamy NHibernate i MongoDB rownolegle z dwoma fabrykami, czas zapisu ok. 20ms. Odczyt losowy przy MS SQL ok. 20ms, w drugim <5ms.
>
A tak Swoją drogą czasami jak się widzi takie
zastosowania,
gdzie na siłę coś relacyjnego czyli bazy danych na siłę opakowuje się obiektami to aż się słabo robi.

Nic na sile :)

nic na siłę, to w takim razie dobre podejście.
Ale osobiście mówisz, ze tylko NH jest najlepsze.. co się trochę kłóci z tym stwierdzeniem.

Ale jak jestes przeciwny NHibernate z definicji, to poznaj wroga lepiej, narzedzie potrafi zaskoczyc!

nie jestem przeciwny z definicji. Po czym wnioskujesz? Ja tylko nie mogę się zgodzić, że NH to wogóle jest naj i nie ma nic lepszego. Bo jest to duża przesada.
Ja osobiście mam bardzo dobre doświadczenia odnośnie własnych warstw dostępu danych.

Jak ktos mnie naprowadzi (chociazby teoretycznie) na cos lepszego (w zakresie wydajnosci) od NHibernate to zaraz zaloze projekt open source i zaimplementuje go po godzinach. Poki co nie widze w postach niczego, co moglo by stanowic zalazek takiego projektu, nie widze tez zadnego konkretnego pomyslu. Ogolniki w stylu "zoptymalizujemy kod pod katem konkretnego use case" wygladaja fajnie na uniwerku/papierze, ale niestety sa nie do zastosowania w praktyce...

niestety są to konretne rozwiązania komercyjne i jak wiesz każdy podlega tajemnicy:) Nie zdradza się wszystkiego nigdy...

i nie zauważyłeś, że z reguły wszelkie te odpowiedniki w NH to tylko lepsze lub gorsze protezy dopisywane nieraz na szybko??Łukasz Machowski edytował(a) ten post dnia 20.07.10 o godzinie 05:39

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Sebastian Pienio:
Dodatkowo takie rozwiazanie umozliwia stworzenie level 3 cache. Skok wydajnosci jest wtedy kosmiczny, ale utrzymanie spojnosci danych jest bardziej zlozone. Mamy cos podobnego zaimplementowane w nowym systemie, wczesniej przekazywalismy dane procedurze i zapisywala ona do bazy danych. Sredni czas zapisu ok. 60-70ms (troche tego tam jest zapisywane). W tym momencie uzywamy NHibernate i MongoDB rownolegle z dwoma fabrykami, czas zapisu ok. 20ms. Odczyt losowy przy MS SQL ok. 20ms, w drugim <5ms.

czemu porównujesz gruszki i kapustę? MongoDB to zupełnie inny rodzaj środowiska bazodanowego

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Kończąc tę dyskusję napiszę tylko, że dobrze właśnie by było aby kierować się rozsądkiem.
Nhibernate pewnie miało założenia na początku bardzo szlachetne Miało za pewne wspomóc pracę z bazami koderom piszącym tylko kod obiektowy. Na początku moim zdaniem rzeczywiście spełniało to swoją rolę i pokładane w tym nadzieje. A mianowicie umożliwiało po nawet dość krótkim szkoleniu nauczenie programistów pisania obsługi bazy, tak na prawdę bez myślenia. Jest to może zbyt ogólnikowe, bo wypadało by dobrze klucze poustawiać itp.. Najważniejsze co miało robić robiło, czyli pozwalało szybko zespołowi przejść przez model danych i szybszą produkcję rozwiązania.

Z czasem to rozwiązanie pokazywało coraz to więcej braków. Postanowiono wtedy robić to czego ludziom brakowało. W dużej mierze skończyło się to na tym, że powstało coś tak napuchniętego, że przeczy początkowej wizji ORM  ( Object ). Zaczęto wrzucać coraz to nowe protezy, tylko po to aby nie nastąpił odpływ ludzi korzystających z rozwiązania.
Tym sposobem można zrobić niektóre rzeczy tak jak w relacyjnym podejściu do danych, ale koszt tego moim zdaniem nie jest współmierny do rezultatu. Aby prosto otworzyć sobie open query i korzystać w jednym czasie w locie z np. Orcala i MS Sql trzeba tworzyć różne fabryki itp...

Ja się pytam po co? Skoro coś mogę zrobić w jednej linijce, czyli np. Ten openrowset.
Po prostu nhibenrate robi się coraz bardziej nadmiarowy, napuchnięty i coraz mniej używalny.

Można zrobić level 3 cache, ale trzeba się napocić i pilnować struktury bardzo, co po staremu można zrobić bez problemu i bez aż takiej pieczołowitości.
To co kiedyś ułatwiało pracę, teraz aby dorównać starym rozwiązaniom zaczyna ją coraz bardziej utrudniać. Zamiast pogodzić się z niedoskonałościami ORM i je zaakceptować stara się teraz zrobić z tego ORM+R. Moim zdaniem coraz bardziej odchodzi się od początkowej idei rozwiązania. Ja nie ma nic przeciwko Nhibernate i obiektowemu podejściu do problemów, ale nie bez przesady. Gdyby tak naprawdę programiści rozumieli różnice między relacyjnym modelem a obiektowym myślę, że wszystkim żyłoby się łatwiej i przyjemniej. A tak nieraz te rozwiązania są takim sztukowaniem na siłę właśnie. Nie skorzyta się z innego rozwiąznia, no bo jak. Skoro obrano taką ścieżkę tworzenia aplikacji. A próbował ktoś przejść z nhibernate na własne rozwiązanie?? Raczej nie bo wiązałoby się to w dużej mierze z potrzebą konkretnego przebudowania aplikacji. Bo to czego nie da się w nhibernate, albo wymaga skakania nad przepaścią można zrobić szybciej łatwiej zwięźliej. Okazać by się mogło, że w cale nie potrzebne mi tyle tych obiektów itp..

Konkludując już na sam koniec moim zdaniem to co na początku wydawało się dobrym zwrotem w przyszłość powoli okazuje się moim zdaniem ślepą ścieżką, z której powrót jest albo nie możliwy albo wymaga powrotu na kolanach. Sytuacja może się odwrócić jak w końcu uda się stworzyć w pełni używalne bazy obiektowe. Wtedy NH będzie nie potrzebny.
Wielkim nieporozumieniem moim zdaniem jest opakowywanie podejścia relacyjnego obiektami. To tak jakby chcieć upakować w pudełko po tik takach cały zasób narzędzi w skrytce Według mnie rellacyjne podejście wykracza bardzo poza zakres obiektowego myślenia i vice versa i często się z nim otwarcie kłóci. Dlaczego w takim razie nie korzysta się z typowo obiektowych baz danych?? Ponieważ nadal są to niedojrzałe koncepcje, problemy z zarządzaniem dużą bazą obiektów, wersjonowaniem, optymalizacją zapytań i póki co nadal brak standardów. Ogólnie polecam poczytanie paru fajnych książek o podejściu relacynym i obiektowym. Wszystkiego są plusy i minusy.

Najgorsze jest właśnie to, że teraz każdy kto się zapyta jak dostać się do bazy... wszyscy mówią nhibenrate jest ekstra bierz i nie patrz za głęboko. Jeśli od początku właśnie taki początkujący programista zostnie przestawiony na takie podejście nie będzie w stanie później zrozumieć modelu danych na którym pracuje i dlaczego musi się tak napocić, że to działało. Moim zdaniem dobrze byłoby aby mimo używania nhibernate ludzie wiedzieli co to 1NF,2NF,3NF,BCNF, znali algebrę relacji itd.. Można by wtedy uniknąć wielu problemów właśnie. Nie było by potem dziesiątek tysięcy problemów w projekcie, gdyby podstawy były dobrze znane. Bo projektując przy pomocy nhibernate, projektuje się je z reguły tylko ze strony obiektowej mimo tego, że NH opakowuje z reguły relacyjny model. Używenie NH jest prostsze dla ludzi, którzy nie interesują się bazami w ogóle, ale czy to dobre to ja nie wiem. Moim zdaniem programiści powinni wiedzieć w jakim środowisku pracują i znać potencjalne zagrożenia, ograniczenia i plusy modelu relacyjnego i obiektowego. Bo do czego z reguły jest wykorzystywany nhibernate, no właśnie do tego aby nie trzeba było rozumieć i zastanawiać sie dłużej nad strukturą bazy danych. Dla jednych to plus dla drugich nie.

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Przemysław R.:

zresztą chciał bym zobaczyć wynik takiej operacji w profilerze

Możesz sam przetrenować.

http://ayende.com/Blog/archive/2006/04/18/BulkDataOper...
http://davybrion.com/blog/2008/10/bulk-data-operations...

a takie gadżety jak case when? CONVERT, CAST ??

A ExecuteSql(...)? Nie jest to zbyt dobre jeżeli chodzi o utrzymanie, ale przydaje się właśnie w takich przypadkach.

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Łukasz Machowski:
Czyli piszemy de facto ORMa?
>
de facto czasami tak, czasami nie + kilka i więcej zdolności pod nasze rozwiązanie

Nie bedzie szybsze ani bardziej stabilne to po co?
Nie przewidzenie zmiany wymagan z jednej bazy MS SQL na trzy MySQL to krotkowzrocznosc programisty, eh, zartujesz??

-- skoro było założenie w projekcie takie, to mam nadzieję, że było to optymalnie napisane. Ale skoro piszesz, że nh działało szybciej to na pewno tak nie było.

Czytales poprzednie posty, w srodku projektu zmienily sie wymagania dotyczace bazy, o jakim "optymalnym pisaniu" piszesz, bo mnie zgubiles?
Fluent jest masakrycznie ograniczony:) o auto proszę nie wspominaj:)

FYI Fluent potrafi wszystko to co HBMy.
Quick "how to" z 2008 roku:
http://nhforge.org/wikis/howtonh/run-in-medium-trust.aspx

no to powiem Ci że z tym solution jest mnóstwo problemów i nigdy nie działa tak jak powinno.

Uzywalem wiele razy (m.in. na GoDaddy) i nigdy nie trafilem na zaden problem.
Post z 2007 roku:
http://ayende.com/Blog/archive/2007/04/24/Multi-Table-...

niestety to też nie rozwiązanie:)
Jak szybko i łatwo przedstawić coś takiego w NH ?

Multi table entity, istnieje od wersji 1.2 bodajze, patrz link do strony Orena podany wyzej.

nie daje potrzebnej funkcjonalności, jest bardzo ograniczone

Podales przyklad, podalem rozwiazanie w 100% do niego pasujace. Taka encja nie ma zadnych ograniczen, co masz na mysli?
no to to samo daje linked servers i dynamic queries:) nie wiem tylko co szybsze będzie;)

Szybkosc najlatwiej uzyskac przesiadajac sie na bardziej zaawansowany serwer - np. MS Sql Enterprise albo Oracle. Tylko, ze korzystajac z zamknietych rozwiazan nie bedziesz mial tego komfortu. Dobic rozwiazanie moze slowo "replikacja" uzyte przez klienta.
Nic na sile :)

nic na siłę, to w takim razie dobre podejście.
Ale osobiście mówisz, ze tylko NH jest najlepsze.. co się trochę kłóci z tym stwierdzeniem.

Twierdze, ze podejscie NH jest tak dobre, ze ciezko cos lepszego wydlubac. To nie swiat wg Apple zebys byl do niego zmuszony ;) ale milo byloby sie dowiedziec co lepszego mozna zrobic :]
nie jestem przeciwny z definicji. Po czym wnioskujesz? Ja tylko nie mogę się zgodzić, że NH to wogóle jest naj i nie ma nic lepszego. Bo jest to duża przesada.
niestety są to konretne rozwiązania komercyjne i jak wiesz każdy podlega tajemnicy:) Nie zdradza się wszystkiego nigdy...

No ta ladujemy w punkcie wyjscia czyli nic nie wiadomo, ale NH do d* :]

Wez jeszcze pod uwage, ze wiekszosc rozwiazan o ktorych mowisz (vide linked servers) jest zablokowana w wiekszosci serwerow produkcyjnych. Czesto nawet pojedyncze procedury maja osobne poziomy uprawnien, utworzenie joba czy alerta musi czesto przejsc przez 5 osob od security, watpie, zeby procedura, ktora to robi z automatu byla zaakceptowana. To komfort na ktory czesto nie mozna sobie pozwolic.

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Przemysław R.:
czemu porównujesz gruszki i kapustę? MongoDB to zupełnie inny rodzaj środowiska bazodanowego

Jak przeczytasz mojego posta to zauwazysz, ze przedstawialem przyklad dwoch fabryk w jednym projekcie.

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Sebastian Pienio:

Odsyłam do mojego postu wyżej. Myślę, że w temacie co mam do powiedzenia zawarłem tam. I nie będę się już rozwodził, bo to kwestia niestety podejścia. Ty jesteś święcie przekonany do NH, ja widziałem już lepsze własne DAL'e. Nie piszę, że NH można do kosza wywalić tylko, ale nie powiem, że jest najlepsze, najszybsze i w ogóle.
Ja z tego co widzę w przeciwieństwie od Ciebie pracowałem w środowiskach, w których wybierano to raz własne rozwiązanie, to nhibernate, datasets. Wnioskuję, że Ty wszędzie korzysztasz tylko i wyłącznie z NH i nie dopuszczasz niczego innego. Twój wybór i nie zrozum mnie źle ja nie chcę Cię do niczego przekonywać.
Czytales poprzednie posty, w srodku projektu zmienily sie wymagania dotyczace bazy, o > jakim "optymalnym pisaniu" piszesz, bo mnie zgubiles?

A ty czytałes moje? Ja wątpię tylko, że miał nakaz pisania na początku pod ms sql. Zaczął pisać na ms sql bo było mu wygodnie. Jeśli miał jasno określone że silnikiem będzie MS SQL, no to taki projekt musieli tworzyć jacyś nie poważni ludzie. Nie zmienia się podstawowego założenia na koniec.
Podales przyklad, podalem rozwiazanie w 100% do niego pasujace. Taka encja nie ma
zadnych ograniczen, co masz na mysli?

Z tego co tam czytałem, to jest mapowanie kilku tabel na obiekt. A ja mówię o kolumnach z różnych tabel, nie chcę całej zawartości wszystkich tabel...
Nie bedzie szybsze ani bardziej stabilne to po co?

Skąd wiesz?
Uzywalem wiele razy (m.in. na GoDaddy) i nigdy nie trafilem na zaden problem.

to podane przez Ciebie rozwiązanie nie działa:)

Odsyłam do postu wyżej mimo wszystko.Łukasz Machowski edytował(a) ten post dnia 20.07.10 o godzinie 11:42

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Łukasz Machowski:

Z tego co tam czytałem, to jest mapowanie kilku tabel na obiekt. A ja mówię o kolumnach z różnych tabel, nie chcę całej zawartości wszystkich tabel...



public OrderItemMapper()
{
Table("RDR1");
Id(x => x.ItemCode).Column("ItemCode").GeneratedBy.Assigned();
Map(x => x.Quantity);
Map(x => x.Price);
Map(x => x.TaxCode);
Map(x => x.LineTotal);

Join("OITM", x =>
{
x.KeyColumn("ItemCode");
x.Map(y => y.ItemDescription).Column("ItemDesc");
});

Join(...)

//itd
}



Warto włączyć sobie opcję ShowSql() i przejrzeć kod jaki generuje NH.Jarek D. edytował(a) ten post dnia 20.07.10 o godzinie 14:33

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

Łukasz Machowski:
Ja z tego co widzę w przeciwieństwie od Ciebie pracowałem w środowiskach, w których wybierano to raz własne rozwiązanie, to nhibernate, datasets. Wnioskuję, że Ty wszędzie korzysztasz tylko i wyłącznie z NH i nie dopuszczasz niczego innego. Twój wybór i nie zrozum mnie źle ja nie chcę Cię do niczego przekonywać.

Zle wnioskujesz, wiekszosc projektow, ktore w karierze skonczylem nie uzywala NHibernate. Napisalem nawet kilka bazujac na autorskim, auto-dystrybuujacym sie silniku bazy danych.
A ty czytałes moje? Ja wątpię tylko, że miał nakaz pisania na początku pod ms sql. Zaczął pisać na ms sql bo było mu wygodnie. Jeśli miał jasno określone że silnikiem będzie MS SQL, no to taki projekt musieli tworzyć jacyś nie poważni ludzie. Nie zmienia się podstawowego założenia na koniec.

Jasne, ze czytalem. Myslalem, ze fakt, iz rzadko, bardzo rzadko developer autonomicznie podejmuje decyzje w jakiej bazie pisze jest, jest oczywisty. Taka decyzja jest efektem meetingow na ktorych analizuje sie poza-developerskie aspekty i tak tez bylo w tym przypadku.

Swoja droga ludzie, ktorzy tworzyli/tworza projekt wiedza co robia i osiagneli ogromny sukces komercyjny, ich strona wyswietlana jest tysiace razy na minute, wiec IMO wiedza co mowia.
Nie bedzie szybsze ani bardziej stabilne to po co?

Skąd wiesz?

Wiem, bo nie wskazales palcem na ani jeden fakt, ktory pozwolilby na taka optymalizacje. Nie znalazlem tez niczego na blogach, portalach i innych zrodlac informacji. Potwierdzilem za to swoj tok myslenia na konferencjach z udzialem ludzi budujacych duze projekty. Poki co nasza dyskusja wyglada tak, ze "sa lepsze, mam takie, ale nie napisze jak/jakie", spoko! :)

Ja nie jestem maniakiem NHibernate ani zadnego innego sposobu dostepu do bazy. Nie bronie projektu, bo tak sobie wymyslilem, wskazuje na jego niezaprzeczalne zalety przy tworzeniu projektow klasy enterprise. Jest to bardzo dobry, solidnie przemyslany projekt (chociaz wiekszosc "przemyslen" pochodzi raczej z Hibernate), na ktorym, podczas prob dalszej optymalizacji, poki co, zjadlem zeby.

Utrzymuje tez projekt bazujacy prawie w calosci na Stored Procedures + custom DAL, na chwile obecna samych procedur jest ich ok. 3.5 tysiaca, napisane sa mniej wiecej wg koncepcji, ktora przedstawiasz jako alternatywe i przy tej skali moge z cala odpowiedzialnoscia powiedziec, ze sie kompletnie nie sprawdza. Projekt ewoluuje i to co bylo optymalne rok temu dzisiaj jest bardzo nieoptymalne i ciagle trzeba je refaktorowac. Przy tym wcale nie jest juz oczywiste jak przebudowac kod logiki (w rozsadnym czasie), zeby efektywnie odbieral od nich dane, wiec trzeba isc na kompromisy, a te spowalniaja system. Mozna wrzucic kolejne macierze, mozna dorzucic kolejny RAM, ale IMHO to nie jest poprawne rozwiazanie.

Rok temu mielismy brainstorm i sprawdzalismy ile decyzji podejmowanych jest przy najczesciej wykonywanych operacjach, chcielismy lepiej zbudowac SPki specjalnie pod ktytyczne sciezki. Okazalo sie, ze operacje podejmuja ok. 50-500 decyzji i przy takim stopniu zlozonosci realnie nie ma szans na zoptymalizowanie kontekstowe.

Napisanie DALa, ktory umozliwilby bardziej efektywne sciagniecie niezbednych danych? Z checia bym to zobaczyl, ale:
1) uzywajac AOP ustawiasz sie w kolejce za NHibernate
2) nie uzywajac AOP jak zoptymalizujesz komunikacje nie przeszywajac calej logiki biznesowej informacjami o kontekscie wykonania zapytan?

konto usunięte

Temat: ASP.NET - jakiej metody dostępu do baz danych używacie?

a propo wydajności :)
http://www.goldenline.pl/forum/1813050/szybkosc-proced...



Wyślij zaproszenie do