2011-06-30 19 views
9

Chciałam tylko opinii, a przynajmniej pewnej reguły, która jest lepsza w strukturze bazy danych dla CouchDB. Czy lepiej mieć wszystkie powiązane dane dotyczące przedmiotu w jednym dokumencie lub części wszystkich elementów w wielu dokumentach?Duży dokument a wiele dokumentów

Pozwól mi zilustrować, co mam na myśli, dając ci przykład. Aktualnie loguję 4 zdarzenia z naszego systemu, w odstępach 1-minutowych, pozwalając im wywoływać zdarzenia event_1, event_2, event_3 and even_4. Dane są przechowywane dla każdego z 4 zdarzeń, niezależnie od wartości (zawsze otrzymasz wartość, nawet jeśli wszystko jest w porządku).

Wariant 1: imprezy grupowe i dołączać nowe datownika/wartości do dokumentu ...

{ 
    event_1: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
}, 
{ 
    event_2: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
}, 
{ 
    event_3: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
} 
...etc 

Opcja 2: przechowywać ogromną listę dokumentów z ostatnich wartości (co jest jak są one faktycznie dostarczane z systemu)?

{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
}, 
{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
}, 
{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
} 
...etc 

obecnie używam 2nd opcji, ale po prostu ciekaw narodami opinie na temat tego, co byłoby uznane za najlepsze praktyki ... Zaczynam myśleć, że wariant 1 może być lepiej, jako droga Zgłaszam, wyniki są pogrupowane według zdarzenia (pokazane na wykresie liniowym każdego zdarzenia).

Odpowiedz

8

Zdecydowanie preferują opcję 2.

Od CouchDB przechowuje wszystkie wersje swoich dokumentów nie byłoby ogromne zużycie pamięci przy użyciu opcji 1. Więc z każdym nowym wartości zapisać nowe wartości, a także kopię stare. Używając opcji 2 przechowujesz tylko nowe wartości bez dotykania starych.

+0

@phlogratos, dobry punkt! Nie myślałem o tym jeszcze ... – crawf

+2

@phlogratos, aby wyjaśnić, CouchDB przechowuje tylko stare wersje dokumentu, aż do zagęszczania. –

+6

+1. CouchDB, Chris Anderson, mówi: "CouchDB lubi wysokie listy, a nie fatalne listy". Wyobraź sobie swoje dokumenty w pliku tekstowym, jeden na linię. Posiadanie kilku bardzo dużych dokumentów stanowiłoby grubą listę. Posiadanie wielu bardzo małych dokumentów byłoby wysoką listą. – JasonSmith

Powiązane problemy