CouchDB ve belge sürümlendirme


12

Şu anda CouchDB kullanarak wiki-esque bir uygulama üzerinde çalışıyorum ve bir belge sürüm oluşturma düzeni uygulamaya çalışıyorum. Gördüğüm gibi bunu yapmanın iki yolu var:

  1. Her sürümü ayrı bir belge olarak saklayın
  2. Eski sürümleri tek bir belgeye ek olarak saklayın.

Şu anda 1 numaralı çalışmam var. Kullanıcı bir belgeyi düzenleyip kaydettiğinde, arka uç önce önceki düzeltmeyi yeni bir belgeye kopyalar ve sonra yeni sürümü kaydeder. Her belgede, her sürümdeki verileri içeren bir 'geçmiş' dizisi vardır (eski sürümün belge kimliği, zaman damgası, düzenleyici vb.).

Bu geçmiş dizisi sık sık güncellenen bir belge için oldukça uzun olabilir, ben normal bir okuma (ve geçmiş getirme için başka bir görünüm) sırasında bir belge sans geçmiş getiren bir görünüm var.

Sorum şudur: Mevcut yaklaşımımdan rahatsız oluyorum ve 'bağlanma' yöntemine geçmeyi düşünüyorum. Ama emin değilim. CouchDB'yi benden daha iyi bilen birini umuyorum (sadece birkaç haftadır buradayım - ve bu CouchDB'yi kullanan ilk projem ... ve NoSQL) bana her birinin artılarını ve eksilerini neler olduğunu söyleyebilir yaklaşmak. Ya da göz ardı ettiğim başka bir versiyonlama düzeni var mı?


2
Performans etkisiyle hiç konuşamasam da, kullandığınız sistem CouchDB ile uyumlu olarak "manevi" dir. Önceki sürümleri yanıt hiyerarşisi olarak depolamak, Lotus Notes belge veritabanı (NSF) olan CouchDB'nin "manevi atasında" olduğu gibi deyimseldir (Damien Katz diğerini geliştirmeden önce üzerinde derinlemesine çalıştı, en iyisini korudu ve geliştirdi Kaba ve geri / hataya uyumluluk gereksinimlerini savururken, daha temel yapısal soruların çoğunun Notlarda cevapları olacaktır.)

Yanıtlar:


2

Yalnızca değişikliklerin saklanması iyi bir fikir olacaktır, çünkü eski belgeleri ayrı belgeler veya veritabanının son revizyonuna ek olarak saklamak veritabanı sunucusuna ek yük oluşturacaktır.

Belgenizde bir anahtar değerini değiştirdiğinizde, adlı yeni bir anahtar ekleyin _h_i_s_<key_name>. Yeni oluşturulan (veya son güncelleme sırasında oluşturulan) içinde, her düzenleme / güncellemeden sonra aşağıdaki gibi nesneleri ekleyin: -

{
key_name: "Hello",
_h_i_s_key_name:{time_of_update:value_of_key_name_before_update},
....
}

veya

    {
    key_name: "Hello",
    _h_i_s_key_name:[{time:time_of_update,value:value_of_key_name_before_update}, {time:time_of_last_update,value:value_of_key_name_before_last_update}],
    ....
    }

Bu yaklaşım, uzun vadede çok fazla disk alanı ve çoğaltma bant genişliği tasarrufu sağlayacaktır.


0

CouchDB hakkında bilgi sahibi olmadan. Her versiyonu saklamak, sadece önceki modele göre marjinal farklılık gösterebilir. Yalnızca değişiklikleri kaydetmenizi öneririm.

Bir göz atmak isteyebilirsiniz burada veya veri sürüm arayın.


Bu cevap seçenek 1'den (ayrı belgeler) veya 2'den (belgenin bir parçası olarak) hangisinin daha iyi olduğunu söyleyemez.
binki

0

yıllar sonra ;-)

değişiklikleri saklamanız gerekmez çünkü CouchDB bunu sizin için yapar. Bir belge değiştirilirse, yeni bir düzeltme oluşturulur. Bunun fiziksel olarak aynı _idancak yeni _rev(revizyon) başka bir belge olduğunu ve diskinizde yer kaplayacağını unutmayın.

Elbette, çok büyük bir diske ihtiyacınız olduğu anlamına gelen tüm revizyonları saklamanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.