Saat ini saya sedang mengerjakan aplikasi wiki-esque menggunakan CouchDB dan saya mencoba menerapkan skema versi dokumen. Cara saya melihatnya ada dua cara untuk melakukan ini:
- Simpan setiap versi sebagai dokumen terpisah
- Simpan versi lama sebagai lampiran pada satu dokumen.
Saat ini, saya punya bentuk # 1 yang berfungsi. Ketika pengguna mengedit dokumen dan menyimpannya, back-end pertama menyalin revisi sebelumnya ke dokumen baru dan kemudian menyimpan versi baru. Setiap dokumen memiliki larik 'riwayat' yang berisi data pada setiap versi (dokumen _id dari versi lama, cap waktu, editor, dll.).
Karena larik sejarah ini dapat menjadi sangat panjang untuk dokumen yang sering diperbarui, saya memiliki pandangan yang mengambil dokumen tanpa riwayat selama bacaan normal (dan tampilan lain untuk mengambil sejarah).
Pertanyaan saya adalah ini: Saya merasa tidak nyaman dengan pendekatan saya saat ini dan telah berpikir untuk mengubah metode 'attachment'. Tapi saya tidak yakin. Saya berharap seseorang yang mengenal CouchDB lebih baik daripada saya (Saya baru melakukan ini selama beberapa minggu - dan ini adalah proyek pertama saya menggunakan CouchDB ... dan NoSQL) dapat memberi tahu saya apa kelebihan dan kekurangan masing-masing pendekatan. Atau mungkin ada skema versi lain yang saya abaikan?
sumber
Jawaban:
Menyimpan hanya perubahan akan menjadi ide yang baik, karena menyimpan dokumen lama sebagai dokumen terpisah atau lampiran pada revisi akhir basis data akan membuat overhead ke server basis data.
Saat Anda mengubah nilai kunci dalam dokumen Anda, tambahkan kunci baru bernama
_h_i_s_<key_name>
. Dalam yang baru dibuat (atau dibuat saat pembaruan terakhir), tambahkan objek seperti di bawah ini setelah setiap pengeditan / pembaruan: -atau
Pendekatan ini akan menghemat banyak ruang disk dan replikasi bandwidth dalam jangka panjang.
sumber
Tanpa sepengetahuan CouchDB. Menyimpan setiap versi meskipun hanya berbeda dengan marginal dari pendahulunya adalah pemborosan. Saya sarankan menyimpan perubahan saja.
Anda mungkin ingin melihat di sini atau mencari versi data.
sumber
bertahun-tahun kemudian ;-)
Anda tidak harus menyimpan perubahan karena CouchDB akan melakukannya untuk Anda. Jika dokumen diubah, revisi baru akan dibuat. Sadarilah bahwa ini secara fisik adalah dokumen lain dengan yang sama
_id
tetapi baru_rev
(revisi) dan akan menghabiskan ruang pada disk Anda.Yang pasti Anda harus menyimpan semua revisi apa artinya, bahwa Anda memerlukan disk yang sangat besar.
sumber