2011-06-30 13 views
9

Sadece CouchDB için bir veritabanı yapısında daha iyi olan bir fikir veya en azından bir başparmak kuralı istedi. Tek bir belgede bir öğeyle ilgili tüm verilerin bulunması veya birçok belgenin tüm bölümlerinin bir kısmının bulunması daha mı iyi?Büyük belge vs birçok doküman

Size örnek vererek ne demek istediğimi göstereyim. Şu anda sistemimizden 4 olay kaydettim, 1 dakika aralıklarla onları event_1, event_2, event_3 ve even_4 olarak adlandırıyoruz. Veriler, değer ne olursa olsun, her 4 olay için saklanır (her şey yolunda olsa bile her zaman bir değer elde edersiniz).

Seçenek 1: Grup etkinlikleri ve belgeye yeni zaman damgası/değerler eklemek ...

{ 
    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 

Seçenek 2: olan (en son değerlerle, belgelerin büyük bir listesini tutun sistemden nasıl teslim edilirler?

{ 
    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 
Şu anda yolu olarak, 2 seçeneğini kullanarak, ancak en iyi uygulama düşünülebilir ne ... O Seçenek 1 daha iyi olabilir düşünmeye başlıyorum üzerinde halkları görüşler görmek için sadece merak ediyorum

Rapor ediyorum, sonuçlar etkinlikle gruplandırılır (her olayın çizgi grafiğinde gösterilir). CouchDB tüm dokümanları revizyonları tutar yana

cevap

8

Kesinlikle de yeni değerler ve bir kopyası depolamak her yeni değerle Yani Seçenek 1. kullanılarak büyük bellek tüketimi olacağını da Seçenek 2.

tercih ediyorum eski olanlar. Seçenek 2'yi kullanarak, yeni değerleri yalnızca eski olanlara dokunmadan saklarsınız.

+0

@phlogratos, iyi nokta! Bunu henüz düşünmemiştim ... – crawf

+2

@phlogratos açıklığa kavuşturmak için, CouchDB sadece bir sıkıştırmanın çalışmasına kadar bir belgenin eski revizyonlarına dayanıyor. –

+6

+1. CouchDB komiseri Chris Anderson, "CouchDB uzun listelerden değil, yağ listelerinden hoşlanıyor" diyor. Dokümanlarınızı bir satırda, bir metin dosyasında düşünün. Çok az sayıda belgeye sahip olmak bir şişman liste olacaktır. Çok küçük belgelere sahip olmak uzun bir liste olacaktır. – JasonSmith

İlgili konular