Kiedy korzystać z MongoDB lub innych systemów bazodanowych zorientowanych na dokumenty? [zamknięte]

Oferujemy platformę dla klipów wideo i audio, zdjęć i grafiki wektorowej. Zaczęliśmy od MySQL jako zaplecza bazy danych, a ostatnio dołączyliśmy MongoDB do przechowywania wszystkich meta-informacji z plików, ponieważ MongoDB lepiej pasuje do wymagań. Na przykład: zdjęcia mogą zawierać informacje Exif, filmy mogą zawierać ścieżki audio, w których chcemy przechowywać meta-informacje. Filmy i grafika wektorowa nie mają wspólnych meta-informacji itp. więc wiem, że MongoDB jest idealny do przechowywania tych nieustrukturyzowanych danych i do ich przeszukiwania.

Jednak nadal rozwijamy naszą platformę i dodajemy funkcje. Teraz jednym z kolejnych kroków będzie stworzenie forum dla naszych użytkowników. Pojawia się teraz pytanie: użyj bazy danych MySQL, która byłaby dobrym wyborem do przechowywania forów i postów na forum itp. albo użyć do tego MongoDB?

Więc pytanie brzmi: Kiedy używać MongoDB i kiedy używać RDBMS. Co byś wziął, mongoDB czy MySQL, jeśli miałeś wybór i dlaczego go wziąłeś?

 490
Author: Peter Mortensen, 2009-09-25

11 answers

W NoSQL: gdyby tylko było tak łatwo, autor pisze o MongoDB:

MongoDB nie jest magazynem kluczy/wartości, to coś więcej. To na pewno nie jest RDBMS. Nie używałem MongoDB w produkcji, ale użyłem go trochę budując aplikację testową i jest to bardzo fajny kawałek zestawu. Wydaje się być bardzo wydajny i albo ma, albo będzie miał wkrótce, tolerancja błędów i auto-sharding (aka będzie skalować). Myślę, że Mongo może być najbliższą rzeczą do RDBMS zastępstwo, które widziałem do tej pory. Nie będzie działać dla wszystkich zestawów danych i wzorców dostępu, ale jest zbudowany dla typowych rzeczy CRUD. Przechowywanie tego, co jest zasadniczo ogromnym skrótem i możliwość wybrania dowolnego z tych kluczy, jest tym, do czego większość ludzi używa relacyjnej bazy danych. Jeśli twój DB jest 3NF i nie robisz żadnych złączeń (po prostu wybierasz kilka tabel i składasz wszystkie obiekty razem, czyli to, co większość ludzi robi w aplikacji internetowej), MongoDB prawdopodobnie skopałby Tyłek za ty.

Następnie, w konkluzji:

Prawdziwą rzeczą, na którą należy zwrócić uwagę, jest to, że jeśli jesteś powstrzymywany przed zrobieniem czegoś super niesamowitego, ponieważ nie możesz wybrać bazy danych, robisz to źle. jeśli znasz mysql, po prostu go użyj. Optymalizuj, kiedy naprawdę potrzebujesz. Używaj go jak sklepu k / v, używaj go jak rdbms, ale na litość boską, Zbuduj swoją zabójczą aplikację! Nic z tego nie będzie miało znaczenia dla większości aplikacji. Facebook nadal używa MySQL, dużo. Wikipedia używa MySQL, dużo. FriendFeed używa MySQL, dużo. NoSQL to świetne narzędzie, ale na pewno nie będzie twoją przewagą konkurencyjną, nie sprawi, że Twoja aplikacja będzie gorąca, a przede wszystkim Twoi użytkownicy nie będą się tym przejmować.

Na czym zbuduję swoją następną aplikację? Prawdopodobnie Postgres. Czy będę używał NoSQL? Może. Mogę też użyć Hadoop i Hive. Mogę zachować wszystko w aktach. Może zacznę hakować Magleva. Użyję do tego wszystkiego, co najlepsze. If I need raportuję, Nie będę używał żadnego NoSQL.Jeśli będę potrzebował buforowania, prawdopodobnie użyję Tokyo Tyrant. jeśli potrzebuję kwasowości, Nie będę używał NoSQL.Jeśli będę potrzebował Tony liczników, użyję Redis. jeśli będę potrzebował transakcji, użyję Postgres. Jeśli mam tonę jednego typu dokumentów, prawdopodobnie użyję Mongo.Gdybym potrzebował pisać 1 miliard obiektów dziennie, pewnie użyłbym Voldemorta. Gdybym potrzebował pełnego tekstu, pewnie użyłbym Solr. Jeśli potrzebuję pełnotekstowego przeszukiwania ulotnych danych, chciałbym prawdopodobnie używa Sfinksa.

Podoba mi się ten artykuł, uważam go za bardzo pouczający, daje dobry przegląd krajobrazu NoSQL i hype. Ale, i to jest najważniejsze, naprawdę pomaga zadać sobie właściwe pytania, jeśli chodzi o wybór między RDBMS i NoSQL. Warto przeczytać IMHO.

Alternatywny link do artykułu

 633
Author: Pascal Thivent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-06 05:34:21

Po dwóch latach używania MongoDb jako aplikacji społecznościowej, byłem świadkiem, co tak naprawdę oznacza życie bez SQL RDBMS.

  1. w końcu piszesz zadania, aby robić takie rzeczy, jak łączenie danych z różnych tabel/kolekcji, coś, co RDBMS zrobiłby dla ciebie automatycznie.
  2. twoje możliwości zapytań z NoSQL są drastycznie sparaliżowane. MongoDb może być najbliższy SQL, ale nadal jest bardzo daleko w tyle. Zaufaj mi. Zapytania SQL są super intuicyjne, elastyczne i potężny. Zapytania MongoDb nie są.
  3. zapytania MongoDb mogą pobierać dane tylko z jednej kolekcji i wykorzystywać tylko jeden indeks. A MongoDb jest prawdopodobnie jedną z najbardziej elastycznych baz danych NoSQL. W wielu scenariuszach oznacza to więcej podróży w obie strony do serwera, aby znaleźć powiązane rekordy. A potem zaczynasz od normalizacji danych - co oznacza zadania w tle.
  4. fakt, że nie jest to relacyjna baza danych oznacza, że nie będziesz miał (uważanego przez niektórych za źle wykonującego) klucza obcego ograniczenia zapewniające spójność danych. Zapewniam cię, że w końcu doprowadzi to do powstania niespójności danych w Twojej bazie danych. Bądź przygotowany. Najprawdopodobniej zaczniesz pisać procesy lub kontrole, aby utrzymać spójność bazy danych, co prawdopodobnie nie będzie działać lepiej niż pozwolić RDBMS zrobić to za Ciebie.
  5. zapomnij o dojrzałych frameworkach, takich jak hibernate.

Uważam, że 98% wszystkich projektów prawdopodobnie jest o wiele lepiej z typowym SQL RDBMS niż z NoSQL.

 169
Author: Marquez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 11:13:34

Do przechowywania tych nieustrukturyzowanych danych

Jak powiedziałeś, MongoDB najlepiej nadaje się do przechowywania nieustrukturyzowanych danych. To może zorganizować Twoje dane w formacie dokumentu. Te altenatywy RDBMS o nazwie NoSQL data stores (MongoDB, CouchDB, Voldemort) są bardzo przydatne w aplikacjach, które skalują się masowo i wymagają szybszego dostępu do danych z tych dużych magazynów danych.

I implementacja tych baz danych jest prostsza niż regularne RDBMS. Ponieważ są to proste obiekty binarne o wartości klucza lub stylu dokumentu bezpośrednio serializowane na dysk. Te magazyny danych nie wymuszają właściwości kwasu , ani żadnych schematów . To nie zapewnia żadnych zdolności transakcji. Dzięki temu może to być skalowane i możemy osiągnąć szybszy dostęp (zarówno do odczytu, jak i do zapisu).

Ale w przeciwieństwie do tego, RDBM wymusza kwasy i schematy na danych. Jeśli chcesz pracować ze strukturyzowanymi danymi, możesz skorzystać z RDBM.

I would wybierz MySQL do tworzenia forów do tego rodzaju rzeczy. Bo to nie będzie wielka skala. Jest to bardzo prosta (wspólna) aplikacja, która ma uporządkowane relacje między danymi.

 26
Author: RameshVel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-17 04:45:18

Zauważ, że Mongo zasadniczo przechowuje JSON. Jeśli Twoja aplikacja ma do czynienia z wieloma obiektami JS (z zagnieżdżeniem) i chcesz utrzymywać te obiekty, to istnieje bardzo silny argument za używaniem Mongo. To sprawia, że warstwy DAL i MVC są ultra cienkie, ponieważ nie są one un-pakowania wszystkich właściwości obiektów JS i próbuje wymusić dopasować je do struktury (schematu), że nie pasują naturalnie.

Mamy system, który ma kilka złożonych obiektów JS w sercu i kochamy Mongo, ponieważ możemy wytrwać wszystko naprawdę, naprawdę łatwo. Nasze obiekty są również raczej amorficzne i niestrukturalne, a Mongo wchłania tę komplikację bez mrugania. Mamy niestandardową warstwę raportowania, która odszyfrowuje amorficzne dane do spożycia przez ludzi, a to nie było takie trudne do opracowania.

 9
Author: Journeyman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-16 12:54:25

Powiedziałbym, że użyj RDBMS, jeśli potrzebujesz złożonych transakcji. W przeciwnym razie wybrałbym MongoDB-bardziej elastyczny w pracy i wiesz, że może się skalować, gdy trzeba. (Jestem jednak stronniczy - pracuję nad projektem MongoDB)

 7
Author: mdirolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-25 13:33:17

Komu potrzebne rozproszone, sharded fora? Facebook może Facebook, ale jeśli nie tworzysz Facebooka-konkurenta, po prostu użyj Mysql, Postgres lub cokolwiek, co najbardziej Ci odpowiada. Jeśli chcesz spróbować MongoDB, ok, ale nie oczekuj, że zrobi to za Ciebie Magia. Będzie miał swoje dziwactwa i ogólną złośliwość, tak jak Wszystko inne, jak jestem pewien, że już odkryłeś, jeśli naprawdę już nad tym pracowałeś.

Jasne, MongoDB może być hyped i wydawać się łatwe na powierzchni, ale można uruchomić na problemy, które dojrzalsze produkty już przezwyciężyły. Nie daj się tak łatwo zwabić, ale raczej poczekaj, aż "nosql" dojrzeje lub umrze.

Osobiście uważam, że "nosql" uschnie i umrze od fragmentacji, ponieważ nie ma ustalonych standardów (prawie z definicji). Nie będę więc osobiście stawiał na to żadnych długoterminowych projektów.

Jedyną rzeczą, która może zapisać "nosql" w mojej książce, jest to, że może bezproblemowo zintegrować się z Ruby lub podobnymi językami i sprawić, że język będzie "trwały", prawie bez żadnych kosztów związanych z kodowaniem i projektowaniem. To może się zdarzyć, ale poczekam do tego czasu, nie teraz, i to musi być bardziej dojrzałe oczywiście.

Btw, dlaczego tworzysz forum od podstaw? Istnieje mnóstwo forów open source, które można dostosować do większości wymagań, chyba że naprawdę tworzysz nową generację forów (w co wątpię).

 7
Author: Fred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 03:02:35

Po udziale w Devoxx 2011 i Prezentacji z 10Gen, napisałem mały blog porównujący bazy danych MongoDB do RDBMS. MongoDB jest jednym z popularnych NoSQL dbs. Zobacz poniżej:

Http://blog.iprofs.nl/2011/11/25/is-mongodb-a-good-alternative-to-rdbms-databases-like-oracle-and-mysql/

 4
Author: Gijs Mollema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-19 20:47:10

Widziałem, że wiele firm używa MongoDB do analizy czasu rzeczywistego z dzienników aplikacji. Jego schema-freeness naprawdę pasuje do dzienników aplikacji, gdzie schemat rekordów ma tendencję do zmiany czasu na czas. Ponadto funkcja Capped Collection jest przydatna, ponieważ automatycznie czyści stare dane, aby utrzymać je w pamięci.

To jest jeden z obszarów, do którego naprawdę myślę, że MongoDB pasuje, ale MySQL / PostgreSQL jest bardziej zalecany w ogóle. Jest wiele dokumentów i zasoby programistyczne w sieci, a także ich funkcjonalność i solidność.

 4
Author: Kazuki Ohta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-28 09:53:35

2 główne powody, dla których możesz chcieć preferować Mongo są

  • elastyczność w projektowaniu schematów (magazyn dokumentów typu JSON).
  • skalowalność - wystarczy dodać węzły i może skalować poziomo dość dobrze.

Nadaje się do aplikacji big data. RDBMS nie jest dobry dla dużych danych.

 4
Author: Sushant Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-21 05:16:35

Wiesz, te wszystkie rzeczy o joinach i' złożonych transakcjach ' -- ale to sam Monty wiele lat temu wyjaśnił "potrzebę" COMMIT / ROLLBACK, mówiąc, że 'wszystko, co jest robione w klasach logicznych (a nie w bazie danych) i tak' -- więc jest to znowu to samo. Potrzebny jest głupi, ale niesamowicie schludny i szybki silnik do przechowywania/pobierania danych, dla 99% tego, co robią aplikacje internetowe.

 3
Author: FYA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 12:16:15

Jak już wcześniej, możesz wybierać między wieloma wyborami, spójrz na te wszystkie wybory: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

Proponuję znaleźć najlepszą kombinację: MySQL + Memcache jest naprawdę świetny, jeśli potrzebujesz ACID i chcesz dołączyć do niektórych tabel MongoDB + Redis jest idealny do przechowywania dokumentów Neo4J jest idealny do bazy danych grafów

Co robię: zaczynam od MySQl + Memcache ponieważ używam do, potem zaczynam używać innych Framework bazy danych. W jednym projekcie możesz na przykład połączyć MySQL i MongoDB !

 1
Author: Adrien Hadj-Salah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-21 08:55:12