Szukam bazy danych do sparowania z aplikacją node.js. Zakładam, że baza danych json / nosql byłaby lepsza niż relacyjna baza danych [mogę obejść się bez niedopasowania impedancji json / sql]. Rozważam:
couchdb
mongodb
redis
Czy ktoś ma jakieś poglądy / historie wojenne dotyczące kompatybilności / możliwości wdrożenia powyższego z node.js? Jakieś wyraźne ulubione?
Myślę, że pomocne byłoby udzielenie odpowiedzi na pytanie, gdyby wspomina się o jeszcze szerszych wymaganiach. Każdy DB ma swoje zalety, wady i specjalizacje. Daj nam znać specyfikacje!
Samyak Bhuta
Odpowiedzi:
79
Jestem programistą sterownika mongodb dla node.js. Używam mongodb do moich własnych projektów i jestem bardzo zadowolony z wydajności mongodb.
spójrz też na mangustę, która jest całkiem niezłym
ORMem,
2
Używamy Node.js + MongoDB od dłuższego czasu i wszystko idzie świetnie. I pełne uznanie dla @christkv, sterownik jest solidny i cię nie zawiedzie. Z łatwością wdrożyliśmy node.js / express.js + mongodb na EC2. Pamiętaj też, że nie używamy Mongoose. Mówiąc o wyzwaniach (zakładając, że jesteś już dobry w Node), musisz być dobry w Mongo w zakresie wykonywania zadań (zapytań i agregacji) dla każdego poważnego rozwoju aplikacji lub usług. Dowiedz się, czym Mongo różni się od innych baz danych, tak naprawdę powinieneś najpierw, jeśli nadal jesteś na etapie oceny.
Samyak Bhuta
z tego, co rozumiem, pojawiają się naprawdę fajne funkcje, które przyspieszają agregację w mongodb. Jedną z nich są natywne funkcje agregacyjne. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011, a także możliwe przejście na v8 zamiast spidermonkey dla silnika javascript, co pozwoli każdemu poleceniu map -red na uruchomienie we własnym wątku (pa pa pa singlethreaded map-RED )
christkv
25
Chociaż wybór w dużej mierze zależy od funkcji, do których się wybierasz, naprawdę doceniam CouchDB za jego natywne środowisko JavaScript. Zarówno dane, jak i widoki są napisane w JavaScript, więc moim zdaniem bardzo dobrze pasuje do node.js.
Dostępne są również różne biblioteki klienckie , niektóre są raczej niskiego poziomu, inne bardzo abstrakcyjne.
Ale jak powiedziałem, powinieneś również pomyśleć o funkcjach, których potrzebujesz do swojej bazy danych.
Redis to popularny wybór. To, czego szukasz, to sterownik bazy danych, który nie blokuje.
Wszystkie wymienione bazy danych są bardzo różne. Redis przyjmuje koncepcję magazynów klucz-wartość i działa z nią, dodając różne typy danych i sposoby wykonywania zapytań. Ludzie często zauważają, że redis również bardzo dobrze się skaluje; co oznacza, że ma bardzo niskie narzuty pomimo zdolności do działania.
Tak, Redis jest świetny, ale wydaje się, że możemy przechowywać dane binarne, ale nie możemy ich odzyskać! Przynajmniej nie mogłem znaleźć żadnego polecenia Redis dla danych binarnych.
AppleGrew
Naprawdę? Kiedyś przechowywałem dane binarne (przy użyciu klasy Node's Buffer) i działało dobrze. Jaka wersja Redis / Node?
DanielS
12
Domyślnie node_redis zwraca ciągi JavaScript dla wszystkich poleceń. Aby zamiast tego uzyskać bufory, utwórz klienta z createClient (port, host, {return_buffers: true});
Matt Ranney,
4
@MattRanney, Zaoszczędziłeś mi tylko godziny kopania! Nie widziałem tego nigdzie w dokumentacji węzła Redis i dosłownie zatopione w czasie 5 godzin. W tej chwili moje uznanie jest nieograniczone.
Ghayes
cóż, wszystko brzmi dobrze w teorii, ale weź praktyczny przykład, masz API JSON, które odpytujesz co 20 sekund i zwraca tablicę, chcesz mieć możliwość buforowania tego, czy nadal korzystasz z Redis? Muszę też przeprowadzić rozmyte wyszukiwanie w tej tablicy
PirateApp,
15
Bardzo lubię CouchDB. To trochę krzywa uczenia się, ale widoki są naprawdę potężne, gdy zrozumiesz, jak ich używać. Istnieje moduł o nazwie cradle na github i npm, z którym bardzo łatwo się pracuje. Nie byłem w stanie sprawdzić, jak szybko jest, ale jest naprawdę elastyczny (możesz również uzyskać dostęp do swoich danych w przeglądarce, jeśli chcesz).
Głównym problemem jest to, który projekt bazy danych ma sens dla Twojej aplikacji. Czy masz dane, które mają głównie charakter klucz-wartość? Jeśli tak, użyj Redis. Czy masz dane, w których nie wszystkie dokumenty muszą mieć te same pola? Jeśli tak, użyj bazy danych NoSQL, takiej jak CouchDB.
Kolejną gorszą rzeczą w korzystaniu z blokującej bazy danych jest użycie niewłaściwej bazy danych dla swoich danych. CouchDB jest zarządzany przez Apache, więc wiesz, że jest dobrej jakości, ale nie ma sensu go używać, jeśli Twoje dane miałyby większy sens w tabeli SQL lub prostym magazynie wartości klucza.
Pomyśl o swoim przypadku użycia. Czy bardziej prawdopodobne jest, że będziesz chciał przeprowadzić wyszukiwanie pełnotekstowe, po prostu pobrać dane według klucza lub pobrać zakresy dokumentów o podobnych atrybutach?
Trwałość to projekt umożliwiający API wysokiego poziomu do utrwalania danych między uruchomieniami procesów. Celem jest wsparcie backendów, które są łatwe w użyciu, wydajne, elastyczne lub wszystkie powyższe, jeśli to możliwe.
Obsługiwane bazy danych obejmują:
PostgreSQL - relacyjna baza danych na poziomie przedsiębiorstwa. Sterownik jest zaimplementowany w czystym języku JavaScript i komunikuje się przez TCP przy użyciu protokołu przewodowego PostgreSQL.
Sqlite3 - prosta, szybka relacyjna baza danych bez serwera. Ten sterownik jest opakowaniem otaczającym program wiersza poleceń sqlite3. Na ścieżce musi znajdować się sqlite3. Komunikacja jest niezwykle szybka, ale typy nie są zbyt precyzyjne. Zwracane są tylko ciągi i wartości null.
MongoDB - skalowalna, wydajna baza danych typu open source, wolna od schematów i zorientowana na dokumenty. Ten sterownik implementuje również protokół przewodowy w JavaScript i komunikuje się z serwerem przez TCP.
JSON-DB - własna systemowa baza danych bez schematów, zorientowana na dokumenty, która używa prostych plików płaskich zawierających obiekty JSON. Nie ma żadnych wymagań, z wyjątkiem węzła i systemu plików. Wydajność należy określić po pełnym wdrożeniu.
Nie jestem pewien, czy właściwym rozwiązaniem jest skupienie się wyłącznie na mapowaniu bazy danych do stosu internetowego, ale raczej rozważenie wymagań specyficznych dla aplikacji.
Czy analizujesz kanały z Twittera lub inne dane o dużej objętości pod kątem wzorców, ale nie potrzebujesz wsparcia transakcyjnego? Następnie wybierz coś naprawdę szybko.
Czy chcesz przechowywać naprawdę podstawowe informacje w kilku tabelach, a nie jest to obecnie aplikacja przeznaczona dla przedsiębiorstw? Następnie wybierz coś fajnego do nauczenia.
Może zamierzasz przechowywać dane, które są naprawdę ważne dla klienta, solidne, muszą być transakcyjne i mieć replikację na żywo do zdalnych hostów itp. Następnie może spojrzeć na coś takiego jak postgresql. Nie byłoby to również lustrzanym odbiciem, ale sterownik node.js działa całkiem nieźle i jeśli nie boisz się śmiertelnie sql, łatwo dostaje to, czego chcesz.
Jeśli chodzi o moją własną opinię, myślę, że przejście z nowszym stosem, takim jak node.js (w porównaniu z tradycyjnymi frameworkami w php / java), dodaje wystarczająco "nowej" złożoności, że nie należy dodawać dodatkowych warstw od razu. To jest dobry artykuł, w którym omówiono, że:
Opowiem z mojego doświadczenia: CouchDB ma określoną krzywą uczenia się, podczas gdy MongoDB jest bardzo łatwy do nauczenia i konfiguracji. Nigdy nie używałem redis. Proponuję MongoDB - ale to może bezwstydny fanboyizm - nie mam liczb, heh, tylko twierdzenia o łatwości użytkowania.
dirty jest kolejnym magazynem klucza i wartości w pliku płaskim. Jak sama nazwa wskazuje, jest to szybkie i brudne, ale wydajne rozwiązanie dla prostych przypadków. Nie jestem autorem :)
Odpowiedzi:
Jestem programistą sterownika mongodb dla node.js. Używam mongodb do moich własnych projektów i jestem bardzo zadowolony z wydajności mongodb.
Sterownik Mongodb dla node.js
(Wtyczka bezwstydna) Zapraszam do zadawania pytań dotyczących sterownika o godz
Grupa Google dotycząca sterownika mongodb
lub tutaj w Stackoverflow
Baw się dobrze z node.js. Uwielbiam tę platformę: D
źródło
Chociaż wybór w dużej mierze zależy od funkcji, do których się wybierasz, naprawdę doceniam CouchDB za jego natywne środowisko JavaScript. Zarówno dane, jak i widoki są napisane w JavaScript, więc moim zdaniem bardzo dobrze pasuje do node.js.
Dostępne są również różne biblioteki klienckie , niektóre są raczej niskiego poziomu, inne bardzo abstrakcyjne.
Ale jak powiedziałem, powinieneś również pomyśleć o funkcjach, których potrzebujesz do swojej bazy danych.
źródło
Redis to popularny wybór. To, czego szukasz, to sterownik bazy danych, który nie blokuje.
Wszystkie wymienione bazy danych są bardzo różne. Redis przyjmuje koncepcję magazynów klucz-wartość i działa z nią, dodając różne typy danych i sposoby wykonywania zapytań. Ludzie często zauważają, że redis również bardzo dobrze się skaluje; co oznacza, że ma bardzo niskie narzuty pomimo zdolności do działania.
Oto lista dostępnych modułów bazy danych: http://wiki.github.com/ry/node/modules#database
źródło
Bardzo lubię CouchDB. To trochę krzywa uczenia się, ale widoki są naprawdę potężne, gdy zrozumiesz, jak ich używać. Istnieje moduł o nazwie cradle na github i npm, z którym bardzo łatwo się pracuje. Nie byłem w stanie sprawdzić, jak szybko jest, ale jest naprawdę elastyczny (możesz również uzyskać dostęp do swoich danych w przeglądarce, jeśli chcesz).
Głównym problemem jest to, który projekt bazy danych ma sens dla Twojej aplikacji. Czy masz dane, które mają głównie charakter klucz-wartość? Jeśli tak, użyj Redis. Czy masz dane, w których nie wszystkie dokumenty muszą mieć te same pola? Jeśli tak, użyj bazy danych NoSQL, takiej jak CouchDB.
Kolejną gorszą rzeczą w korzystaniu z blokującej bazy danych jest użycie niewłaściwej bazy danych dla swoich danych. CouchDB jest zarządzany przez Apache, więc wiesz, że jest dobrej jakości, ale nie ma sensu go używać, jeśli Twoje dane miałyby większy sens w tabeli SQL lub prostym magazynie wartości klucza.
Pomyśl o swoim przypadku użycia. Czy bardziej prawdopodobne jest, że będziesz chciał przeprowadzić wyszukiwanie pełnotekstowe, po prostu pobrać dane według klucza lub pobrać zakresy dokumentów o podobnych atrybutach?
źródło
Może zechcesz sprawdzić Persistence , wysokopoziomowy system trwałości / bazy danych dla node.js.
z thechangelog.com :
źródło
Zastrzeżenie: jestem autorem.
Może spójrz na ogłoszone tutaj BarricaneDB .
źródło
Nie jestem pewien, czy właściwym rozwiązaniem jest skupienie się wyłącznie na mapowaniu bazy danych do stosu internetowego, ale raczej rozważenie wymagań specyficznych dla aplikacji.
Czy analizujesz kanały z Twittera lub inne dane o dużej objętości pod kątem wzorców, ale nie potrzebujesz wsparcia transakcyjnego? Następnie wybierz coś naprawdę szybko.
Czy chcesz przechowywać naprawdę podstawowe informacje w kilku tabelach, a nie jest to obecnie aplikacja przeznaczona dla przedsiębiorstw? Następnie wybierz coś fajnego do nauczenia.
Może zamierzasz przechowywać dane, które są naprawdę ważne dla klienta, solidne, muszą być transakcyjne i mieć replikację na żywo do zdalnych hostów itp. Następnie może spojrzeć na coś takiego jak postgresql. Nie byłoby to również lustrzanym odbiciem, ale sterownik node.js działa całkiem nieźle i jeśli nie boisz się śmiertelnie sql, łatwo dostaje to, czego chcesz.
Jeśli chodzi o moją własną opinię, myślę, że przejście z nowszym stosem, takim jak node.js (w porównaniu z tradycyjnymi frameworkami w php / java), dodaje wystarczająco "nowej" złożoności, że nie należy dodawać dodatkowych warstw od razu. To jest dobry artykuł, w którym omówiono, że:
http://nodeguide.com/convincing_the_boss.html
źródło
Opowiem z mojego doświadczenia: CouchDB ma określoną krzywą uczenia się, podczas gdy MongoDB jest bardzo łatwy do nauczenia i konfiguracji. Nigdy nie używałem redis. Proponuję MongoDB - ale to może bezwstydny fanboyizm - nie mam liczb, heh, tylko twierdzenia o łatwości użytkowania.
źródło
dirty jest kolejnym magazynem klucza i wartości w pliku płaskim. Jak sama nazwa wskazuje, jest to szybkie i brudne, ale wydajne rozwiązanie dla prostych przypadków. Nie jestem autorem :)
źródło
Więcej do rozważenia:
Globals: http://globalsdb.org
GT.M (zobacz https://github.com/robtweed/node-mwire, aby zapoznać się z punktem wyjścia)
M / DB (klon Open Source SimpleDB): https://github.com/robtweed/node-mdb i możesz użyć klienta Node.js SimpleDB, aby uzyskać do niego dostęp: https://github.com/rjrodger/simpledb
źródło
Znalazłem CouchDB bardzo łatwy do opanowania. W Internecie dostępnych jest wiele ebooków, które nauczą Cię, jak korzystać z CouchDB z Node.js .
znalazłem ta książka jest bardzo przydatna do nauki CouchDB.
Aby używać CouchDB z Node.js, używam modułu NANO .
CouchDB może być hostowane na Iriscouch lub Cloudant .
źródło