2010-08-15 14 views
12

Mam kilka sqlite dbs (powiedziałbym około 15 GB), z około 1m wierszy w sumie - więc nie super duży. Patrzyłem na mongodbę i wygląda na to, że łatwo z nim pracować, szczególnie jeśli chcę spróbować wykonać podstawowe przetwarzanie języka naturalnego na dokumentach, które tworzą bazy danych.Mongodb - czy problemy z niezawodnością są nadal znaczące?

Nigdy nie pracowałem z Mongo w przeszłości, nie musiałbym uczyć się od zera (będzie pracował w Pythonie). Po krótkim przeglądzie, natknąłem się na kilka przerażających historii o Mongodbie. niezawodność. Czy to nadal jest poważny problem? W razie kryzysu oczywiście zachowam kopie zapasowe sqlite, ale raczej nie będę musiał ciągle odtwarzać moich baz danych.

Zastanawiasz się, jakie problemy z uszkodzeniem danych ludzie mieli ostatnio do czynienia z Mongo? Czy to duży problem?

Dzięki!

Odpowiedz

9

Tak, trwałość to duży problem w Mongo. Musisz używać zestawów replikacji w mongodb, aby uzyskać wytrzymałość (potrzebujesz co najmniej 2 komputerów), w przeciwnym razie możesz stracić do ostatniej minuty na przykład w przypadku awarii zasilania. Nie ma trwałości pojedynczego serwera w Mongo, ale będzie rozwijana dla 1.7-1.8, jak wiem. Po awarii musisz ręcznie naprawić db, a operacja rapair może zająć godziny, jeśli twoje dane są duże. Nie ma transakcji ani kwasu, więc nie nadaje się do aplikacji e-commerce lub bankowości.

Nie powinieneś używać rozwojowych wersji mongo (nieparzysta liczba wersjid jak 1.3.x, 1.5.x, 1.7.x to wersje rozwojowe) i wolisz używać 64-bitowych systemów operacyjnych. Jeśli sięgniesz po artykuły o katastrofie w sieci na temat mongo, źródłem problemu są w większości przypadków te dwa.

CouchDB, Cassandra i postgresql mają silną trwałość (fsync domyślnie wynosi 10 milisekund w języku kassandra i postgresql), więc wszystkie mają wytrzymałość na pojedynczym serwerze.

Jeśli potrzebujesz martwej łatwej skalowalności, odporności na uszkodzenia i równoważenia obciążenia; cassandra jest najlepsza, ale ze słabymi opcjami zapytania. Wadliwe węzły mogą zniknąć i wrócić po pewnym czasie, bez problemu, system sam się naprawi.

EDYCJA: Mongo 1.8 przyszedł z księgowaniem (pozwala na trwałość), ale nie jest to ustawienie domyślne. Należy również spojrzeć na to http://news.ycombinator.com/item?id=2684423

Pozdrawiam,

Serdar Irmak

+0

Interesujące - wersje 64-bitowe i wersje dla programistów zdają się pojawiać dość często w postach, na które patrzyłem. Sądzę, że Mongo sprawiło, że zaciekawiłem się, że mam zamiar go wypróbować, ale upewnij się, że mam opcję kopii zapasowej db zgodną z ACID. – malangi

+1

Mongo jest obecnie najpopularniejszym rozwiązaniem nosql (jednym z powodów jest agile marketing z 10gen). jeśli zagłębisz się w odnośniki do stron, najczęściej używa się ich do danych o wysokiej wydajności o niskiej wartości, takich jak dane analityczne (np. do raportowania, rejestrowania błędów, liczników wyświetleń strony, wewnętrznych liczników itp.). Istnieje również kilka (nie tyle) witryn, które go używają, ponieważ są to wszystkie dane. – sirmak

+2

Obecnie istnieje wiele witryn wykorzystujących go do rzeczywistych danych. http://www.mongodb.org/display/DOCS/Production+Deployments ma wiele wysokoprofilowych wdrożeń; kilka witryn używających go do "prawdziwych danych" to między innymi Sourceforge, Foursquare, Wordnik i Business Insider. –

3

Mongo nie ma właściwości ACID, w szczególności trwałości. Możesz więc stawić czoła problemom, jeśli proces nie zostanie całkowicie zamknięty lub urządzenie straci moc. Powinieneś zaimplementować kopie zapasowe i nadmiarowość, aby sobie z tym poradzić.

4

"MongoDB obsługuje zautomatyzowaną architekturę shardingu, umożliwiając skalowanie w poziomie w wielu węzłach." - source Musisz więc uruchomić wiele węzłów do równoważenia i obsługi przełączania awaryjnego. Jeśli chcesz uruchomić pojedynczą instancję, która nie zawiedzie, jeśli nagle nastąpi utrata zasilania, potrzebujesz czegoś, co obsługuje ACID, np. CouchDB. Mówiąc o tym, używam mongo w pracy przez miesiąc i nie rozbił się on na mnie, jednak niedługo przejdziemy do klastra z 6 węzłami.

Trwałość

Produkty mają różne podejścia do trwałości. CouchDB to projekt typu "tylko awaryjnego", w którym db może zakończyć w dowolnym czasie i pozostaje zgodny z . MongoDB przyjmuje inne podejście do trwałości: . Na wypadek awarii komputera, jeden następnie uruchomiłby operację repairDatabase() po ponownym uruchomieniu (podobnie jak MyISAM). MongoDB zaleca używanie replikacji - zarówno LAN, jak i WAN - dla prawdziwej trwałości, ponieważ dany serwer może być trwale martwy . Podsumowując: CouchDB ma większą trwałość, gdy używa pojedynczego serwera bez replikacji .

Cytat z oficjalnej strony mongodb.org.

2

Nie widzę problemu, jeśli masz te same dane również w SQLite kopii zapasowych. Zawsze możesz uzupełnić swoje bazy danych MongoDb. Ponowne napełnianie zajmie tylko kilka minut.

+0

+1. i nie będziesz musiał robić tego "stale", ale tylko po awarii zasilania serwera (lub czegoś innego, co spowodowało awarię mongody w ciągu minuty po ostatniej operacji aktualizacji). W twoim przypadku nie masz żadnych aktualizacji, prawda? – Thilo

10

Jak już powiedzieli inni, MongoDB nie ma obecnie wytrzymałości na pojedynczym serwerze. Na szczęście jest to dead easy, aby skonfigurować replikację wielowęzłową. Możesz nawet ustawić drugą maszynę w innym centrum danych i automatycznie zreplikować dane na żywo!

Jeżeli zapis musi uda, można spowodować Mongo nie powrócić z wkładką/aktualizacji aż że dane zostały replikowane do n niewolników. Zapewnia to, że masz co najmniej n kopii danych. Zestawy replik pozwalają na dodawanie i usuwanie węzłów z klastra w locie bez żadnej istotnej pracy; po prostu dodaj nowy węzeł i automatycznie zsynchronizuje kopię danych. Usuń węzeł, a klaster ponownie się wyrówna. Jest bardzo zaprojektowany do użycia na wielu maszynach, z wieloma węzłami działającymi równolegle; jest to preferowana konfiguracja domyślna, w porównaniu do czegoś takiego jak MySQL, który oczekuje, że jedna gigantyczna maszyna wykona swoją pracę, którą możesz następnie sparować z niewolnikami, kiedy musisz skalować. Jest to inne podejście do przechowywania i skalowania danych, ale bardzo wygodne, jeśli poświęcisz czas, aby zrozumieć różnicę w założeniach i jak zbudować architekturę, która wykorzystuje swoje mocne strony.

+0

+1 za szczegółowy wgląd - wygląda na inny paradygmat, bardzo ekscytujący! – malangi

Powiązane problemy