Nie można nigdy mówić o tak zwanej bazie danych „NoSQL” bez przedstawienia twierdzenia CAP (spójność, dostępność, podział: wybierz dwa). Jeśli musisz wybrać powiedzmy, między MongoDB (partycja, spójność) a CouchDB (dostępność, partycja), najpierw musisz pomyśleć: „Czy potrzebuję poprawnych danych, czy cały czas potrzebuję dostępu?”.
Ci, nowa baza danych zostały wykonane , aby być podzielony. Ale co jeśli nie ? Co jeśli myślę, że fajnie jest mieć klucz / wartość, kolumnę, dokument, dowolną bazę danych zamiast relacyjnej i po prostu utworzyć jedną instancję serwera i nigdy jej nie dzielić? Czy w takim razie nie miałbym zarówno dostępności, jak i spójności? MongoDB nie będzie musiał niczego kopiować, więc będzie dostępny. A CouchDB miałoby tylko jedno źródło danych, więc byłoby dość spójne.
Oznaczałoby to, że w takim przypadku MongoDB i CouchDB miałyby niewielką różnicę w zakresie zastosowania? No cóż, z wyjątkiem wydajności, API i innych, ale byłoby to bardziej jak wybór między PostgreSQL i MySQL niż posiadanie dwóch zasadniczo różnych zestawów wymagań.
Czy ja tu jestem? Czy mogę zmienić bazę danych AP lub CP na AC, nie tworząc więcej niż jednego wystąpienia? Czy jest coś, za czym tęsknię?
Zadajmy pytanie w odwrotnej kolejności. Co jeśli wezmę relacyjną bazę danych, powiedzmy MySQL i ustawię ją w konfiguracji master / slave. Nie używam transakcji ACID Jeśli wymagam natychmiastowej synchronizacji zapisu do urządzenia podrzędnego, czy nie byłoby to bazą danych CP? A co, jeśli zsynchronizuję go w określonych odstępach czasu, i nie ma znaczenia, czy klient odczytuje nieaktualne dane z urządzenia podrzędnego. Czy nie byłoby to bazą danych AP? Czy to nie znaczy, że jeśli zrezygnuję z zgodności z ACID, nadal będę mógł używać modelu powiązań dla partycjonowanej bazy danych?
Zasadniczo: czy skalowalność w kwestii tego, co jesteś gotowy zrezygnować z twierdzenia CAP, to więcej niż podstawowy model danych? Czy posiadanie kolumny, dokumentu, kluczowej wartości w jakikolwiek sposób zwiększa skalowalność w porównaniu z modelem relacyjnym? Czy możemy zaprojektować relacyjną bazę danych zaprojektowaną od podstaw pod kątem tolerancji partycji? (Może już istnieje). Czy możemy uczynić bazę danych NoSQL zgodną z ACID?
Niestety, jest wiele pytań, ale ostatnio dużo czytałem o bazie danych NoSQL i wydaje mi się, że największą zaletą korzystania z nich jest to, że lepiej pasują do „kształtu” twoich danych, a nie tylko do partycji, CAP i rezygnacja z zgodności z ACID. W końcu nie wszyscy mają tyle danych, że muszą je podzielić na partycje. Czy korzyść z wydajności / skalowalności nie polega na korzystaniu z modelu relacyjnego, zanim jeszcze pomyślę o partycjonowaniu danych?