konto usunięte

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

Jarek D.:

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

aktualnie nie mam nigdzie NH i nie sprawdzę.
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.

też, ale projektant nie ma pojęcia co robi? A tak swoją drogą mimo wszystko było to jak dla mnie szokujące. A wziął ktoś za to odpowiedzialność?
No to jednak coś było nie tak skoro wydarzyło się to na końcu, nie ma się co tu oszukiwać. I to że odnieśli sukces , nie znaczy że tym razem nie poczynili wtopy.
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! :)

nie obraź się ale co Ty pokazałeś? poza rzuceniem kilku haseł i liczb:)
Ja też nigdzie nie znalazłem żadnych testów gdzie przetestowana byłaby wydajność:)

Swego czasu znalazłem fajny link z testem wydajności, nie ma niestety czystego ado ( bo jest to porównianie ORM), ale NH słabo wypadało.

http://ormbattle.net/

Mimo wszystko pisząc własnego Dala i częściowo mapując nawet obiekty. Możemy zrobić to optymalniej bo nie musi być tak uniwersalne jak NH :)

A tak swoją drogą, to ja Ci już mówiłem i nie wiem ile razy muszę to mówić. Używałem NH, pewnie jeszcze użyję. I nikomu nie mam zamiaru mówić, że ma rzucić to i tego nie używać. Powinno się tylko czasami przynajmniej zastanowić, czy akurat w tym projekcie jest to najlepsze rozwiązanie:) Chodzi mi o to że nie jest to takie ekstra rozwiązanie i nie do każdego zastosowania się nadaje. Dla projektów typu ERP itp, gdzie w dużej mierze posługujemy się encjami, to NH nie jest złym rozwiązaniem. Jest tylko jeden szkopuł nie tylko takie rozwiązania są na rynku i nie tylko takie się tworzy:)

Coraz śmieszniej sie tu robi:) Dlatego może moje ostatnie słowa to zakończą:) NH jest dobrym rozwiązaniem i można je stosować z powodzeniem w wielu projektach. Są natomiast też sytuacje, w których nie jest to właściwa droga.
Marek Z.

Marek Z. Programista

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

Łukasz Machowski:
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.

Nie wiem czy dobrze zrozumiałem :) Chodzi Ci o to żeby do obsługi baz korzystać z tradycyjnego SQLa ?

konto usunięte

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

Łukasz Machowski:

http://ormbattle.net/

To dość kontrowersyjna strona. Sprawdź kto ją sponsoruje :D

konto usunięte

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

Marek Zając:

Nie wiem czy dobrze zrozumiałem :) Chodzi Ci o to żeby do obsługi baz korzystać z tradycyjnego SQLa ?

To zależy od potrzeb. Co nie zmienia faktu, że gdyby każdy wiedział jak zrobić w sql parę rzeczy byłoby lepiej, łatwiej i nieraz bez przekombinowanych rozwiązań.

Jarek D.:
Łukasz Machowski:

http://ormbattle.net/

To dość kontrowersyjna strona. Sprawdź kto ją sponsoruje :D

Zawsze możesz odpalić testy u Siebie i się przekonać. Swego czasu je odpalałem i były bardzo zbliżone.
Tutaj masz chociażby źródła do oglądania:
http://code.google.com/p/ormbattle/source/browse/#svn/...

a tak swoją droga kod możesz ściągnąć.Łukasz Machowski edytował(a) ten post dnia 21.07.10 o godzinie 08:10

konto usunięte

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

Łukasz Machowski:

Zawsze możesz odpalić testy u Siebie i się przekonać. Swego czasu je odpalałem i były bardzo zbliżone.
Tutaj masz chociażby źródła do oglądania:
http://code.google.com/p/ormbattle/source/browse/#svn/...

Z tego co pamiętam było sporo zastrzeżeń do tego jak sesja w NH była konfigurowana i używana do realizacji określonych zadań. Patrz polemika na blogu Orena.

P.S. Nie jestem fanem NH, ale doceniam w pracy jego możliwości :)Jarek D. edytował(a) ten post dnia 21.07.10 o godzinie 10:20

konto usunięte

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

Jarek D.:
Łukasz Machowski:

Zawsze możesz odpalić testy u Siebie i się przekonać. Swego czasu je odpalałem i były bardzo zbliżone.
Tutaj masz chociażby źródła do oglądania:
http://code.google.com/p/ormbattle/source/browse/#svn/...

Z tego co pamiętam było sporo zastrzeżeń do tego jak sesja w NH była konfigurowana i używana do realizacji określonych zadań. Patrz polemika na blogu Orena.

P.S. Nie jestem fanem NH, ale doceniam w pracy jego możliwości :)Jarek D. edytował(a) ten post dnia 21.07.10 o godzinie 10:20

A to poprawił ktoś ten test żeby NH wyszedł na wyżyny i pokazał co potrafi?
Paweł W.

Paweł W. Synergia Systemy
Informatyczne

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

Yelena Shapovalova:
Paweł W.:
Myślę, że zarządzanie zmianą bazy danych w projekcie nad którym pracuje grupa ludzi ma kolosalne znaczenie.
W przypadku NHibernate cały schemat znajduje się w mappingu (czy Fluent czy Hbm(xml)) to są małe pliki a nie ogromne xml jak w przypadku np DataSetów (nie wiem jak jest w Linq2Sql) więc mergowanie w repozytorium to nie problem.
Schemat w postaci SQL tworzącego bazę można odzyskać jednym poleceniem, a narzędzie typu http://www.red-gate.com/products/SQL_Compare/index.htm
zrobi migrację za Ciebie.

Nie konieczne jest tworzyć taki schemat, można zastosować odpowiednie atrybuty w klasach (podobnie ma się rzecz dla NHibernate). Potem w miejscu gdzie tworzymy DataContext ustawiamy:


private static readonly MappingSource MappingSource = new AttributeMappingSource();

public readonly DataContext Context = new DataContext(ConnString, MappingSource);


Co oznacza że używamy tylko atrybutów (żadnych plików Xml).

Potem tylko dla klas ustawiamy odpowiednie atrybuty i jedziemy.

Mały przykład:



namespace Sample
{
using System;
using System.Data.Linq.Mapping;

[Table(Name = "Sample")]
public class Entity
{
[Column(Name = "Id", CanBeNull = false, IsDbGenerated = true, IsPrimaryKey = true, UpdateCheck = UpdateCheck.Always, DbType = "Int")]
public int Id { get; set; }
[Column(Name = "Name", CanBeNull = true, UpdateCheck = UpdateCheck.Always, DbType = "NVARCHAR(100)")]
public int Name { get; set; }

[Column(Name = "CreatedDate", CanBeNull = false, IsDbGenerated = true, UpdateCheck = UpdateCheck.Always, DbType = "DateTime")]
public DateTime CreatedDate { get; set; }
}
}



Ciekawy artykuł (lecz tam przykład bazuje na plikach XML)

http://www.sidarok.com/web/blog/content/2008/10/14/ach...Yelena Shapovalova edytował(a) ten post dnia 10.07.10 o godzinie 22:56

Tu by się zdała również konwencja

[Column(Name = "CreatedDate", CanBeNull = false, IsDbGenerated = true, UpdateCheck = UpdateCheck.Always, DbType = "DateTime")]
public DateTime CreatedDate { get; set; }

Zamiast używać atrybutów fluent nhibernate sam wnioskuje domyślne wartości (np. CreatedDate - domyślnie może być nazwą kolumny.

Jeśli dodać do tych atrybutów walidacje to robi się niezła dżungla.

Pozdrawiam

konto usunięte

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

Łukasz Machowski:

A to poprawił ktoś ten test żeby NH wyszedł na wyżyny i pokazał co potrafi?

Nie wiem, znudziłem się przy 60-70 komentarzu odnośnie ormbattle.

konto usunięte

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

Jarek D.:
Łukasz Machowski:

A to poprawił ktoś ten test żeby NH wyszedł na wyżyny i pokazał co potrafi?

Nie wiem, znudziłem się przy 60-70 komentarzu odnośnie ormbattle.

no to szkoda.. może ktoś z dyskutantów się wypowie jak powinno się to zrobić?

konto usunięte

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

Łukasz Machowski:

no to szkoda.. może ktoś z dyskutantów się wypowie jak powinno się to zrobić?

Myślę, że najlepiej jak zapytasz Orena (ew. przeszperasz jego blog pod kątem ormbattle). Wątpie, żeby ktoś tutaj miał większą wiedzę o NH niż On ;)

konto usunięte

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

Łukasz Machowski:
no to szkoda.. może ktoś z dyskutantów się wypowie jak powinno się to zrobić?

Glownym zarzutem przeciwko ormbattle jest to, ze wykonuje operacje sciagania/przetwarzania sekwencyjnego danych, co stoi w sprzecznosci nie tylko z NHibernate, ale dowolnym ORMem i dowolna inna technika odczytywania bazy danych.

Same testy przygotowane byly w bardzo przemyslany sposob, po primo wykorzystuja zarzadzanie obiektami "dirty" do celowego spowolnienia pracy NHibernate, po drugie nie wykorzystuja zalecanych technik tylko takie, ktore sprawdzaja sie lepiej w niskopoziomowych frameworkach, i na koniec wszystkie optymalizacje byly wylaczone, a dobre praktyki nie uwzglednione.

Jak sam stwierdzil Oren, takie testy nie maja wiele wspolnego z rzeczywista szybkoscia w aplikacji (i nie maja wiekszego sensu), bo wykorzystuja baze w sposob, ktory moze byc nazwany bugiem.

To tak z grubsza, bo jakis czas temu o tym czytalem. Swoja droga strona i testy napisane byly przez chlopakow, ktorzy sprzedaja komercyjnie ORMa X-tensive, a do niedawna wpisujac "NHibernate" w googlu pojawiala sie ich reklama z tekstem "masz dosc NHibernate costam costam". Niewatpliwie siedzi im ten projekt w gardle...

konto usunięte

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

Sebastian Pienio:

Ok rozumiem.
Ja to bym z miłą chęcią zobaczył jak to się spisuje. Bo tak to jest tylko przerzucanie się słowami ( chodzi mi tylko o ten blog ), a póki co działające jest tak jak napisali to w ormbatlle. Skoro jest tak źle jak mówicie to moje pytanie brzmi:
Napisał to ktoś jak się powinno to zrobić i pokazał jak działa?
Bo póki co każdy mówi jak źle zrobiony test, jak NH jest ekstra wydajne, ale testu nadal nie znalazłem żadnego.
Czyżby wydajność NH była spowodowana mniemaniem o niej?Łukasz Machowski edytował(a) ten post dnia 22.07.10 o godzinie 08:57

konto usunięte

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

Łukasz Machowski:
Ja to bym z miłą chęcią zobaczył jak to się spisuje. Bo tak to jest tylko przerzucanie się słowami ( chodzi mi tylko o ten blog ), a póki co działające jest tak jak napisali to w ormbatlle. Skoro jest tak źle jak mówicie to moje pytanie brzmi:
Napisał to ktoś jak się powinno to zrobić i pokazał jak działa?
Bo póki co każdy mówi jak źle zrobiony test, jak NH jest ekstra wydajne, ale testu nadal nie znalazłem żadnego.
Czyżby wydajność NH była spowodowana mniemaniem o niej?Łukasz Machowski edytował(a) ten post dnia 22.07.10 o godzinie 08:57

NHibernate stworzony zostal dla aplikacji, nie dla przetwarzania batchowego, dlatego w takich testach wypada zle. Oren napisal nawet, ze nie ma potrzeby jego optymalizacji dla takich zastosowan. Bardzo dobrze za to sprawuje sie w rzeczywistych aplikacjach, Oren przez kilka miesiecy porownywal sklep internetowy napisany za pomoca roznych technik (ostatnio napisal nawet w Raven), jest to dosc kompleksowy test, ktory pokazal podstawowe slabosci konkurencji o ktorych pisalem.

Jego metodologia byla zblizona do optymalnej - za kazdym razem projekt pisany byl od nowa z najlepszymi optymalizacjami dostepnymi przy uzytej technice. Zalozenie bylo takie, zeby efekt wyjsciowy byl bardzo porownywalny. W takich testach NHibernate wypada bardzo dobrze. Po wiecej szczegolow zapraszam na jego bloga, dosc dokladnie wszystko opisywal i uzasadnial.

konto usunięte

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

Sebastian Pienio:

Jego metodologia byla zblizona do optymalnej - za kazdym razem projekt pisany byl od nowa z najlepszymi optymalizacjami dostepnymi przy uzytej technice. Zalozenie bylo takie, zeby efekt wyjsciowy byl bardzo porownywalny. W takich testach NHibernate wypada bardzo dobrze. Po wiecej szczegolow zapraszam na jego bloga, dosc dokladnie wszystko opisywal i uzasadnial.

obiektywne testy:) ciężko chyba u niego tak samo o obiektywizm, jak w ormbattle.

Bierze udział w tworzeniu NH i chyba to wystarczy. Na pewno dobrze go zna i ma dobre wpisy o NH, ale nie mówmy o obiektywizmie:) I tak optymalne dla NH na pewno.
Wiesz to tak samo jak Microsoft robi testy swojego oprogramowania;)
To, że porównywał kilka sklepów nie świadczy o niczym. Jedni mogli to napisać lepiej drudzy gorzej. Nawet jeśli używaliby tej samej technologii nie napisaliby tego tak samo.

Fakt faktem, że żadnych testów nie ma. I twierdzenie, że NH wydajnościowo wszytko bije jest dużym uogólnieniem i ogromnym "mniemaniem" o jego wydajności. Wszystko można napisać na wiele sposobów. Można napisać wydajne aplikacje w NH i równie dobrze napisać słabo własnego DALa. Ale taka sama zależność jest w drugą stronę:)
NH jest jednak bardziej idioto-odporna i jeśli tak na to patrzeć to bije sqla. Ale DAL'a w projekcie nie piszą chyba studenci?

Oczywisty jest też fakt, że NH jest łatwiejsze w utrzymaniu, biblioteki są aktualizowane nie przez nas bezpośrednio itp... itd... ale tak samo jak to są plusy to czasami są to wielkie minusy. Czasami nie możemy czekać z poprawą buga do następnej wersji... musimy coś poprawić od razu. Czasami polityka wymaga aby dostęp do danych był w pełni zarządzalny przez zespół i nie ma możliwości korzystania z gotowych rozwiązań:)

Np.
Przy pisaniu sklepu internetowego NH rzeczywiście będzie rozsądnym wyjściem.
Przy różnych zstosowaniach webowych też.
Przy systemach ERP tutaj pewnie po środku leży prawda (funkcjonalność rdzenna vide duże skomplikowane raporty ).
Pisanie systemu raportującego pewne rzeczy nigdy nie pisałbym na NH, procedury są tutaj o wiele szybsze:)
Powiedz mi jaki system bankowy korzysta z NH, bo z tego co kiedyś się orientowałem to żaden. Nie mówię o projektach open source:) bo one tylko są teorią.
Można mnożyć różne przykłady czy to z jednej czy to z drugiej strony.

Każde rozwiązanie ma plusy i minusy, tylko w dużej mierze są one zależne od kontekstu. Poczynając od polityki w firmie, projekcie, zastosowania, szybkości usuwania usterek, wydajności w określonych systuacjach, a nawet samego widzi mi się piszących czasami nawet klienta. Bo klient może sobie zażyczyć aby dostęp do bazy był napisany samodzielnie (patrz bank).

Czasami plusy stają się minusami i vice versa.Łukasz Machowski edytował(a) ten post dnia 26.07.10 o godzinie 08:53

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

Z tego co mi wiadomo w bankach kładzie się nacisk na:
a) bezpieczeństwo - użycie procedur(uprawnienia per procedura)
b) wydajność i bezpośrednią "interakcję" z optymalizatorem zapytań - użycie procedur i natywnego SQL danego systemu DB(hint-y dla optymalizator-a, mechanizmy charakterystyczne tylko dla danego systemu DB itp.)
c) obsługę dużych wolumenów danych(np. kilkadziesiąt GB per tabel-a)
stąd NH w takich sytuacjach odpada.



Wyślij zaproszenie do