Baza danych node.js [zamknięta]

115

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?

Justin
źródło
2
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.

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

christkv
źródło
1
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.

b_erb
źródło
18

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

Jökull
źródło
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?

beatgammit
źródło
8

Może zechcesz sprawdzić Persistence , wysokopoziomowy system trwałości / bazy danych dla node.js.

z thechangelog.com :

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.
Gary S. Weaver
źródło
13
Trwałość nie była aktualizowana od marca 2010 r. I jest dostępna w wersji 0.0.4, więc wygląda na to, że mogła zostać porzucona.
lokaj
5

Zastrzeżenie: jestem autorem.

Może spójrz na ogłoszone tutaj BarricaneDB .

fadedbee
źródło
3

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

qooleot
źródło
2

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.

PinkElephantsOnParade
źródło
1

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 :)

nponeccop
źródło
0

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 .

Shekhar
źródło