2011-10-22 31 views
13

Niedawno zakochałem się w CouchDB. Jestem podekscytowany ogromnymi zaletami i pięknem. Teraz chcę się upewnić, że nie przeoczyłem żadnych negatywnych skutków.Wady CouchDB

Co przychodzi ci do głowy? Załączono listę punktów, które zebrałem. Czy jest coś do dodania?

  • Posty na blogu z 2010 r. Twierdzą, że "nie są wystarczająco dojrzałe" (cokolwiek to jest warte).
  • Wolniejsza od DBMS w pamięci.
  • Aktualizacje lokalne wymagają logiki po stronie serwera (update handlers).
  • Szybkość transakcji w porównaniu do prędkości: bazy danych mogą stać się ogromne w porównaniu z innymi systemami DBMS (istnieje jednak funkcja zagęszczania).
  • "Tylko" ewentualna konsystencja.
  • Tymczasowe widoki dużych zbiorów danych są wolne bardzo.
  • Replikacja dużych baz danych may fail.
  • Mapa/zredukowanie paradygmatu wymaga ponownego przemyślenia (tylko dla kompletności).

Jedynym punktem, który martwi mi jest # 3 (aktualizacje na miejscu), ponieważ jest to dość niewygodne.

+0

Co z obciążeniem komunikacji HTTP? A co z trudnością związaną z ograniczaniem wartości na kanapie (unikalne są trudne) – Raynos

Odpowiedz

10
  • dane w JSON

Co oznacza, że ​​dokumenty są dość duże (BigData, przepustowość sieci, szybkość), a ich opisowe nazwy rzeczywiście boli, ponieważ sumują się do rozmiaru dokumentu.

Plus some more:

  • To nie obsługuje transakcji

Oznacza to, że egzekwowanie wyjątkowość jednego pola na wszystkich dokumentach nie jest bezpieczne, na przykład, egzekwowania, że ​​nazwa jest unikalna.Kolejną konsekwencją niezdolności CouchDB do wspierania typowego pojęcia transakcji jest to, że rzeczy takie jak inc/zmniejszanie wartości i zapisywanie jej z powrotem są również niebezpieczne. Niewiele jest przypadków, w których chcielibyśmy po prostu dodać/obniżyć pewną wartość, gdy nie moglibyśmy po prostu przechowywać pojedynczych dokumentów oddzielnie i agregować je z widokiem.

  • danych relacyjnych

Jeśli dane sprawia, że ​​wiele sensu, aby być w 3 postaci normalnej, a my staramy się podążać tą formę w CouchDB, mamy zamiar uruchomić na wielu kłopot. Możliwym sposobem rozwiązania tego problemu jest przeglądanie widoków, ale możemy ciągle walczyć z systemem. Jeśli dane można ponownie sformatować, aby były bardziej denormalizowane, wówczas CouchDB będzie działał dobrze.

  • hurtowni danych

Problem polega na tym, że tymczasowe widoki w CouchDB na dużych zbiorach danych są bardzo powolne. Korzystanie z CouchDB i widoków stałych może działać całkiem dobrze. Jednak w większości przypadków baza danych zorientowana na kolumny jest znacznie lepszym narzędziem do przechowywania danych.

Ale skały CouchDB!

Ale nie pozwól, aby to się stało: Bazy danych NoSQL, które są napisane w języku Erlang (CouchDB, Riak), są najlepsze, ponieważ Erlang jest przeznaczony dla systemów rozproszonych. Baw się dobrze z kanapą!

5

2 więcej rzeczy, które sprawiają, że płaczę przy użyciu CouchDB (choć to niesamowite):

  • To nie jest przeznaczona do często aktualizowanych danych
  • nie posiada wbudowanej pełnotekstowego wyszukiwania
1
  • Aktualnie brak wsparcia dla zapytań ad-hoc (może ulec zmianie z nadejściem UnQL)
  • brak binarnej wsparcie protokołu dla szybszej komunikacji
+0

UnQL nie ma sensu, aby być szczerym. Jeśli wszystkie bazy danych NoSQL miałyby obsługiwać UnQL, wkrótce zobaczymy bazy danych NoUnQL. Bazy danych NoSQL są interesujące w taki sposób, że nie są zaprojektowane na bazie języka zapytań, ale na drodze do przechowywania danych. To sprawia, że ​​rzeczy tak szalone jak baza danych Rest jak CouchDB możliwe. Jeśli chodzi o protokół binarny, może być przydatny, ale z tego co wiem, prędkość protokołu HTTP nie jest dokładnie dużym problemem z couchdb. –

0

To nie ma nic wspólnego z samą CouchDB, ale będąc względny nowicjusz na scenie oznacza, że ​​większość sysadminów wciąż nie jest mu znana i nie pozwoli jej nigdzie w pobliżu "swoich" centrów danych. Jeśli znajdujesz się w sytuacji, w której wdrażasz środowisko, w którym nie masz kontroli nad sobą, może to być dość bitwa.

3
  • Brak ACL Reader (istnieje dla pisarzy, jednak)

Jako stary Lotus Domino pro szukałem do CouchDB jako alternatywa dla nowego projektu mam akurat i okazało się, ograniczenia dotyczące czytelników są bardzo słabe w Couch vs. Domino. W mojej aplikacji bezpieczeństwo jest ważnym czynnikiem, a kanapa wymagałaby warstwy oprogramowania pośredniego do obsługi bezpieczeństwa czytnika.

Jeśli masz bazę danych, w której wszyscy użytkownicy mogą widzieć wszystkie dokumenty, to wygląda na interesującą platformę.

Jeśli wymagane jest ograniczenie odczytów, należy zapoznać się z rozwiązaniem oprogramowania pośredniego lub rozważyć inną alternatywę.

Uwaga dla programistów CouchDB: Popraw opcje zabezpieczeń platformy. Zdaję sobie sprawę, że zmniejszą wydajność, gdy są używane, ale pamiętajcie o tym i udostępnijcie tę opcję.

Teraz wróć do określenia, której bazy danych użyć ...

+0

Tak. To powstrzymuje mnie przed uruchomieniem aplikacji obsługujących kanapy. – nisc

+0

Jeśli ktoś jest zainteresowany, Domino 8.5.3 zawiera obsługę JSONRest za pośrednictwem funkcji Domino Data Service. Otrzymujesz pełny model zabezpieczeń Domino wraz z obsługą REST. Bardzo dobrze. http://www-10.lotus.com/ldd/ddwiki.nsf/xpViewCategories.xsp?lookupName=Domino%20Data%20Service –