Versioning không phải là một tính năng của CouchDB nó là một chức năng cốt lõi của cách nó hoạt động ghi dữ liệu vào đĩa và khuôn phôi PET tái tạo giải quyết xung đột với các nút khác. Đó là không một cơ chế lịch sử.
Rất tiếc là không có cụm từ nào tốt hơn version
để tham chiếu đến các bản sao trước của tài liệu. Bởi vì version
đối với hầu hết các nhà phát triển có nghĩa là một cái gì đó historical
được lưu trữ. Đó không phải là những gì nó được dự định để được sử dụng như ở tất cả trong CouchDB.
Nó được dán trên tất cả các tài liệu CouchDB để không dựa trên trước phiên bản như sao lưu hoặc một hệ thống versioning, rằng họ có khả năng có thể biến mất bất cứ lúc nào, bởi vì chúng được sử dụng để phát hiện xung đột sao chép chủ yếu. Nhưng thực tế đơn giản là đây không phải là tính năng nó chỉ là cách CouchDB hoạt động.
Cách duy nhất để xóa các phiên bản trước là compact cơ sở dữ liệu định kỳ. Trong phiên bản hiện tại của CouchDB, điều này có thể được kích hoạt với một kịch bản lệnh gắn vào các bản cập nhật tài liệu và kích hoạt tính năng nén bán tự động dựa trên ngưỡng đánh dấu nước cao. Thông thường, điều này được thực hiện thủ công sau khi một bộ tài liệu lớn được cập nhật theo lô, bạn biết rằng điều này có thể có lợi từ quan điểm cụ thể của ứng dụng.
Điều đó nói rằng, nếu bạn không cập nhật tài liệu không có lịch sử được tạo và điều này là không cần thiết.
Nguồn
2011-06-22 18:18:29
+1. Radek, có lẽ tự hỏi: đây có phải là một sự tối ưu hóa sớm không? Tại sao tôi tránh các bản sửa đổi CouchDB? Bởi vì nó không * cảm thấy * phải không? Hoặc bởi vì tôi có bằng chứng (hoặc lý do mạnh mẽ) cho thấy MVCC sẽ là quá nhiều gánh nặng? (** Có! ** đúng vậy, CouchDB áp đặt không gian đĩa, đĩa i/o và gánh nặng của khách hàng) Trong kinh nghiệm (jhs) của tôi, MVCC * cảm thấy * sai nhưng không có vấn đề gì trong thực tế, * tuy nhiên *, cho cao khối lượng, dữ liệu không có lịch sử, CouchDB không phải là lý tưởng. Có lẽ Redis hoặc Membase? (Membase được lên kế hoạch để tương thích với CouchDB trong tương lai thông qua Couchbase.) – JasonSmith
@jhs CouchDB 'phiên bản' không dành cho lịch sử, chúng là để kiểm soát nhân rộng. Nếu bạn có dữ liệu * không có lịch sử * thì sẽ không bao giờ có nhiều hơn 1 phiên bản trong CouchDB. Bạn đúng rằng lo lắng về hiệu suất mà không cần lược tả là tối ưu hóa sớm. Tôi kinh nghiệm của tôi CouchDB là ** tuyệt vời ** cho * không có lịch sử * dữ liệu như mục nhập tệp nhật ký. Nó viết nhanh, nó đọc nhanh và với toàn văn chỉ mục nó truy vấn nhanh. –
@Jarrod Nghiêm túc, từ đọc của tôi lên, nó cho MVCC tức là: kiểm soát đồng thời. Bằng cách không bao giờ ghi đè lên một bản ghi hiện có, luôn luôn thêm dữ liệu vào các tệp db, bạn có thể thả khóa và giao dịch chủ yếu, và rev-id hoạt động để nhân bản/lưu xung đột quá. – andora