2011-12-02 10 views
5

Zastanawiam się nad uruchomieniem mojego pierwszego projektu CouchDB i pochodzącego z ORM-a. Zastanawiam się, jak tworzyć dokumenty, które mogą być trudne do utrzymania.noSQL i znormalizowane dane

Na przykład, jeśli mają następujący wzór:

A * ---> (1) B

co oznacza dla każdego obiektu jest przedmiotem B i istnieje wiele instancji który może współużytkować obiekt B. W tym przypadku istnieją wskaźniki/klucz obcy w A do B.

Mogłem utworzyć dokument zawierający wszystkie dane A i B. Mam jednak problem, jeśli na późniejszym etapie (po stworzeniu 10000 dokumentów), może będę musiał zmienić niektóre dane, co oznacza, że ​​muszę zaktualizować wszystkie moje dokumenty.

W środowisku ORM/znormalizowanej bazy danych powinienem przeprowadzić prostą aktualizację B i wszystkie moje referencje znajdują się teraz w bazie danych.

Jak sobie z tym poradzić w CouchDB lub nie jest to podejście NoSQL dla tego typu sytuacji?

JD

Odpowiedz

5

Ogólna odpowiedź na to pytanie: Nie ma ogólnej odpowiedzi na to pytanie.

Chodzi o to, że w NoSQL struktura danych nie jest podyktowana przez dane, ale raczej przez zapytania, które musi obsługiwać struktura danych. Dlatego zamiast używać tego samego wzorca dla każdej instancji problemu asocjacji 1: N lub M: N, sposób NoSQL polega na używaniu różnych wzorców w zależności od konkretnych potrzeb. Mogą to być na przykład:

  • zapisu/odczytu Stosunku
  • Specyficzne cechy bazy danych, które sprawiają, że osadzanie łatwiejsze lub trudniejsze
  • Typy zapytań trzeba wspierać
  • dotyczące wydajności na jak dane mogą być indeksowane, odrzucane, stowarzyszone lub w jakikolwiek inny sposób dzielone lub buforowane:

Ogólnie uważam, że początkujący mają tendencję do "over-embed", ale mogę mówić tylko o MongoDB. Osadzanie jest potężną cechą, ale osadzone obiekty nie są "pierwszorzędnymi obywatelami", więc nie powinny być używane jako zamienniki dla każdej relacji 1: n. Tylko dla niektórych :)

+0

+1 doskonałe informacje tutaj. – Petrogad

+3

Zgadzam się. Myślę, że istnieją dwa główne wskaźniki: a) Ile razy zmieniasz osadzony obiekt? b) Czy chcesz wyświetlać obiekt osadzony za każdym razem, gdy wyświetlany jest obiekt nadrzędny? A jeśli tak, na jakim urządzeniu to robisz (np. Czy zapytanie jest możliwe, czy nie). Ponieważ jeśli zmienia się tylko raz na 100000 dokumentów, to prawdopodobnie łatwiej jest je przechowywać osadzone i raz zmienić, a następnie zapytać za każdym razem, gdy obiekt zostanie wyświetlony użytkownikowi – rit

+0

Dzięki za informacje. Obiekt osadzony zmieniałby się tylko w wyjątkowych okolicznościach. TAK, czy mówisz, że powinienem był go osadzić (tzn. Dokument zawiera A i B)? Kwerenda jest ważna, ponieważ będzie używana przez każde żądanie. Czy możesz trochę wyjaśnić? –