Ruby non rails - jaki orm?

Witam,

Od jakiegos czasu chodzi mi po glowie pewien (szalony) pomysl - otoz nosze sie z zamiarem napisania nowego web-framework’a… Moze to brzmi troche dziwnie, wiedzac ze jest cos takiego jak rails, ale… Chce to zrobic ze wzgledow powiedzmy osobistych - nie chce sie przekopywac przez cala dokumentacje ActiveRecord, ActionPack itd. po to by wykorzystać maksymalnie możliwości railsow, wole stworzyć rozwiazanie w pelni dostosowane do potrzeb mojego serwisu, calkowicie transparentne i proste(dla mnie). I tutaj pytanie… Jakiego ORM’a polecilibyście?
Do budowy frameworka chce uzyc engine Ramaze (http://ramaze.rubyforge.org); system szablonow - mysle o haml; a jeśli chodzi o orm’a - to myslalem o Sequel (http://sequel.rubyforge.org). Do tego doszlyby jeszcze generatory a la Rails

Jest cos takiego jak Og (Og+Nitro), ale kiepsko to udokumentowane i chyba juz nie rozwijane.

og’a znam - moim zdaniem troche toporny… Ogladalem sobie tez Kansas z IOWA framework , ale jest to operowanie prawie czystym SQL’em… Szukam czegoś podobnego do ActiveRecord ale lzejszego. Sequel po kilku dodatkach (dodanie validacji i modulu dla warunkow) chyba bylby ok… Ale moze slyszeliscie albo widzieli w akcji cos jeszcze innego?

[quote=hibernaculus]Witam,

Od jakiegos czasu chodzi mi po glowie pewien (szalony) pomysl - otoz nosze sie z zamiarem napisania nowego web-framework’a… Moze to brzmi troche dziwnie, wiedzac ze jest cos takiego jak rails, ale… Chce to zrobic ze wzgledow powiedzmy osobistych - nie chce sie przekopywac przez cala dokumentacje ActiveRecord, ActionPack itd. po to by wykorzystać maksymalnie możliwości railsow, wole stworzyć rozwiazanie w pelni dostosowane do potrzeb mojego serwisu, calkowicie transparentne i proste(dla mnie). I tutaj pytanie… Jakiego ORM’a polecilibyście?
Do budowy frameworka chce uzyc engine Ramaze (http://ramaze.rubyforge.org); system szablonow - mysle o haml; a jeśli chodzi o orm’a - to myslalem o Sequel (http://sequel.rubyforge.org). Do tego doszlyby jeszcze generatory a la Rails[/quote]
Wiesz, zamurowało mnie, nie wiem co myśleć. Przecież właśnie w ten sposób starasz się zrobić drugie railsy. Jestem o tyle zdziwiony, bo takie zachowanie spotykałem bardzo często wśród ludzi piszących na co dzień w php (każdy pisał swój framework, bo jego najlepszy, najszybszy i w ogóle dostosowany do jego potrzeb), ale wśród Rubistów coś takiego widzę pierwszy raz :). W zasadzie to widzę, że chcesz połączyć kilka istniejących bibliotek w 1 całość. Chcesz coś podobnego do AR, haml - to wszystko masz w railsach (haml po doinstalowaniu pluginu, była ostatnio dyskusja na forum). I chcesz powiedzieć, że przez dokumentację tych 3 różnych projektów nie będziesz musiał się przedzierać? Zresztą kto Ci każe znać perfect railsy? Chyba nikt nie czytał całej jego dokumentacji, tylko zagląda tam jak czegoś szuka lub nie pamięta :).

radarek: nie interesuje mnie stworzenie nowych railsow - bo one są “doskonaloscia” sama w sobie - chodzi bardziej o (jak to okresliles) “połączenie kilku istniejących bibliotek w 1 całość”.
ramaze jest meta-frameworkiem, a sequel dobrym (jeszcze nie doskonalym) i lekkim orm’em…
chodzi o jeszcze bardziej “agile programming”… :wink: Czy to sie uda - nie wiem - i dopoki nie sprobuje nie dowiem sie tego…
Nie wywodze sie z php’a - bo zawsze od tego jezyka odpychalo mnie brak namaspaces i ta cala “sieczka” i mysle ze gdyby nie ruby - to w zyciu nie wzialbym sie za programowanie na potrzeby “webu”… ciesze sie ze moglem Cie zaskoczyć :wink:

Przypomne tylko ze Railsy same w sobie sa tak naprawde zbiorem bibliotek ActiveRecord, ActionPack, ActionMailer etc. Kiedys to byly po prostu odrebne biblioteki.

Moim zdaniem największy postęp jaki mógłby dokonać się w Rails to przejście na obiektowe bazy danych.

Sugeruję więc zainteresowanie się DyBase i GOODS. Przydałoby się zbadać, czy potencjalnie mogłyby się nadawać do produkcyjnego wykorzystania w aplikacjach Ruby/RoR.

Jak wyglada sprawa wydajnosci obiektowych baz danych ?

Są mniej wydajne niż wiodące, dobrze zoptymalizowane bazy relacyjne.

Są wystarczająco wydajne, aby zasilać niektóre duże aplikacje webowe.

Np. http://indico.cern.ch to aplikacja do zarządzania konferencjami, wykładami, spotkaniami, dokumentami i salami w CERN (Europejska Organizacja Badań Jądrowych).

Z aplikacji korzysta dziennie kilka - kilkadziesiąt tysięcy użytkowników, z czego część pracuje na niej cały czas. W bazie jest ponad 40.000 imprez. Z jedną dużą konferencją potrafi być związanych ponad 10.000 trwałych obiektów. Plik bazy danych zajmuje 4,5GB (po czyszczeniu).

Aplikacja działa nad ZODB - bardzo solidną obiektową bazą danych dla Pythona. Niestety nie ma analogicznego produktu dla Rubiego i nie widać pracy w tym zakresie.

Tymczasem powszechnie stosowane rozwiązana O/RM są tylko namiastką wygody, jaką daje prawdziwa obiektowa baza danych.

Prawdopodobnie nie widac pracy bo wiekszasc osob skupia sie na ActiveRecordzie i “innych” relacyjnych backendach ktory ma obslugiwac (mysql, pgsql, oracle, mssql) AR w polaczeniu z tymi bazami spelnia prawdopodobnie ich potrzeby obiektowosci danych :slight_smile:

Ciekaw tez jestem jakie mozliwosci daje obiektowosc w bazach danych, napewno relacje rekurencyjne sa bardziej przyjemne, rekordy parent, child w mysql nie sa tak przejrzyste jak np w oracle przy wykorzystaniu ActiveRecord - ok sa pluginy ktore oferuja jakas tam funkcjonalnosc, ale implementacja generuje zbyt wiele zapytan sql.

Daje głównie wygodę.

Tu nawet nie chodzi o to, że obiektami trochę łatwiej zamodelować rzeczywistość, że są bardziej elastyczne.

Najważniejsze jest to, że w ogóle przestajemy zajmować się czymś takim jak “baza danych”. Po prostu piszemy obiektowy program, mając złudzenie, że RAM jest trwały.

Dlaczego tak nie zrobimy w Railsach?

all_customers.select { |c| c.orders.sum( &:total ) > 500 }

Natychmiast widać, że czai się tu ogromna nieoptymalność (wziąć do RAM wszystkich klientów, dla każdego wykonać zapytanie o wszystkie zamówienia…). Tymczasem przy obiektowej b.d. jest to naturalne i wydajne podejście.

W ogóle wszelkie silniki baz danych to rozwiązanie tymczasowe i brudne. Przestaniemy ich używać gdy tylko pojawi się pamięć łącząca cechy RAM i dysku, czyli trwała, duża i (wystarczająco) szybka.