RavenDB – najprostsza baza danych, jaką widziałeś
RavenDB właśnie został oficjalnie opublikowany. Przez kilka ostatnich dni popołudniami i ł eksperymentowałem z tą technologią. Teraz chciałbym się z Wami podzielić moimi odczuciami.
Z początku byłem nastawiony bardzo sceptycznie — kolejna zabawka Ayende. Po Rhino DHT, Rhino PHT, Rhino Queues, Rhino ServiceBus i innych, których nie pamiętam, straciłem entuzjazm. W końcu jednak postanowiłem dać Raven’owi szanse. W końcu jest to jedyny produkt z kategorii NoSQL napisany w .NET.
Moje eksperymenty rozpocząłem od zabawy z klienckim API. Jest to coś, co wyróżnia ten produkt na tle konkurencji. Inne bazy dokumentowe albo wcale nie mają .NETowego API, albo jest ono napisane na odczepkę i po macoszemu. API klienckie Ravena jest przemyślane i dopracowane w każdej kwestii. Prawdopodobnie dlatego, że jest oparte o NHibernate. Przestawienie się z jednego na drugie było dla mnie kwestią minut: zamiast ISessionFactory — IDocumentStore, zamiast ISession — IDocumentSession.
Z naśladowaniem API NHibernate wiąże się jeszcze jedna unikatowa cecha API Ravena — implementacja wzorca Unit of Work. Oznacza to, że w ramach jednej instancji IDocumentSession każdy pobrany dokument ma dokładnie jedną reprezentację w pamięci. Jeśli pobierzemy dwukrotnie ten sam dokument, Raven automatycznie wykryje ten fakt i za drugim razem zwróci nam pobraną wcześniej instancję. Możemy więc śmiało używać operatora == na obiektach wyciągniętych z bazy.
Kolejnym miłym zaskoczeniem była dla mnie obsługa transakcji. Na poziomie protokołu HTTP Raven może przetwarzać wiele zleceń modyfikacji danych wysłanych za pomocą jednego żądania. Taka paczka jest wtedy przetwarzana transakcyjnie — albo wykonają się wszystkie modyfikacje, albo żadna. Na poziomie API klienta, Raven automatycznie łączy w paczki wszystkie modyfikacje z danej instancji IDocumentSession. Nasz unit of work jest więc także transakcją. Czy może być coś prostszego?
API Ravena wspiera także sharding, czyli technikę pozwalającą klientowi traktować wiele instancji bazy danych jako jedną wielką instancję. Co najważniejsze, wsparcie to jest zupełnie przeźroczyste dla kodu — zrealizowane jest po prostu jako inna implementacja pary interfejsów IDocumentStore oraz IDocumentSession.
Zachęcam Was wszystkich do poeksperymentowania z Ravenem. Ruch NoSQL zasługuje na odrobinę uwagi. Zrozumiałe jest dla mnie, że nie każdy od razu rzuca się na CouchDB i pisze “z palca” funkcje map-reduce w Erlangu, ale Raven to zupełnie inna para kaloszy. Raven jest napisany w .NET specjalnie dla developerów piszących w .NET! Naprawdę warto dać mu szansę.




about 1 year ago
Czy można liczyć na opisanie przypadku biznesowego jaki taka baza obsługuje (co tam można przechowywać, jaka są podobieństwa i różnice do baz SQL’owych itp.)? Oraz jakiś sample kodu?
about 1 year ago
Niestety do zastosowań komercyjnych już troszkę kosztuje.
about 1 year ago
NoSQL – to elastyczność i wydajność, jak wygląda w tym przypadku ta druga kwestia?
Dario-g piszesz o cenie, z tego co widzę będzie opublikowana “soon” – skąd masz info o koszcie licencji
about 1 year ago
@k1
Aktualnie możesz znaleźć te informacji na grupie dyskusyjnej
http://groups.google.com/group/ravendb
about 1 year ago
@k1
bo bylo na poczatku podane – widocznie ajjeeeendeee dostal uwagi co do cen i zdjal ta informacje, albo stwierdzil ze za malo chcial? kto wie, dowiemy sie niebawem.
@Szymon
Sorki, ale do najprostrzych ona nie istnieje, na uczelni mielismy prostrza i kazdy ktory troche sie znal na programowaniu byl wstanie sobie taka stworzyc, zreszta jeden z projektow na zaliczenie to byla baza danych wraz z jezykiem zapytan + intellisense
osobiscie podoba mi sie to ze ktos wkoncu stworzyl .NET base Document-oriented database, za to plus.
ale tak jak mowie, bez przesady
about 1 year ago
@Farol
tutaj masz sporo informacji na temat Document Database: http://ayende.com/Blog/category/565.aspx wraz z przykladami wykorzystania i opisanymi roznicami
Takze warto zajrzec do sampli z RavenDB – sa tam przyklady jak to mozna wykorzystac i do czego.
Takze @Szymon wprowadza to do swojego sampla DDD na codeplex, wiec warto obserwowac kod zrodlowy.
PS.: sorki ze w podwojnym komentarzu
about 1 year ago
Pierwszy raz się stykam z pojęciem document-oriented, ale z tego co przeczytałem o RavenDB to jej użycie wydaje się dość skomplikowane. Jak ma się ona do np. db4o gdzie projekcja odbywa się z użyciem obiektów a nie stringów z nazwą encji i id. To dla mnie lekko nie zrozumiałe. Po za tym trzeba ją odpalać więc utrudnia korzystanie z niej np w małych aplikacjach typu czytnik RSS, a do większych projektów chyba wolałbym MS SQL Serwer. Co w niej jest tak dobrego, że warto się nią zainteresować?
about 1 year ago
@Łukasz
Ravena hostować we własnym procesie, chociaż sam tego jeszcze nie próbowałem. Raven wg mnie bardzo fajną bazę dokumentową… wszystko jednak zależy od ceny, jaką trzeba będzie za niego zapłacić.
Plusy Ravena to fajne API oraz (podobno, nie sprawdzałem — nie mam tylu/takich maszyn) dobre możliwości skalowania.