2011-09-12 29 views
5

Tôi muốn lưu trữ bộ đếm trong tài liệu CouchDB, tăng lên trên mỗi lần xem trang. CouchDB sẽ tạo bản sửa đổi hoàn chỉnh của tài liệu này chỉ để cập nhật 1 bản cập nhật.Cách ngăn CouchDB tạo bản sửa đổi tài liệu khi cập nhật các quầy đơn giản

Điều này sẽ không tiêu tốn quá nhiều không gian? Xem xét rằng tôi có 1 triệu lần truy cập trong một ngày, tôi có thể xem xét các bản chỉnh sửa 1 triệu đối với tài liệu trong một ngày.

Bất kỳ ý tưởng nào về điều này ...

Cảm ơn!

Trả lời

7

CouchDB rất rõ ràng về sự cân bằng mà nó tạo ra. Trong trường hợp cụ thể này, chúng ta đang nói về việc có một cơ sở dữ liệu bằng chứng sụp đổ, thật đáng buồn, có thể và sẽ sử dụng nhiều đĩa cho đến khi nén chặt.

Bạn nhận được với độ tin cậy này và rất nhiều đồng thời cho lần đọc. Bạn cũng sẽ có khả năng tái tạo liền mạch với bất kỳ nút nào khác. Đây là thịt xông khói của nó. Có để nhỏ gọn vì quầy bumped là suck của nó. Quên về mucking xung quanh với _rev_limit. Bạn sẽ tự làm việc đó vì các bản sửa đổi rất hợp lý với Couch.

Một khả năng bạn có là ghi nhật ký một số thông tin, ngày giờ, IP và các nội dung khác. Sau đó, bạn sẽ tạo chế độ xem phát ra dữ liệu bạn cần và sử dụng _count làm hàm reduce của bạn. Bạn sẽ nhận được thông tin bạn cần và một số nội dung có thể có giá trị khác cho phân tích. Đây là giải pháp "chỉ tạo chế độ xem".

Khả năng thứ hai sẽ sử dụng redis (http://redis.io/commands/incr). Redis khá đẹp và phù hợp với trường hợp sử dụng này (http://ai.mee.nu/is_couchdb_the_anti-redis). Đây sẽ là giải pháp "đúng công cụ cho đúng công việc".

Khả năng thứ ba sẽ đơn giản là bỏ qua nó. Nó có thể không phải là một vấn đề ở tất cả (nếu bạn nhỏ gọn thường xuyên). Đây sẽ là giải pháp "thư giãn".

Bạn phải thực hiện tốt điều xấu và đảm bảo lợi thế vượt trội hơn bất lợi. Đo lường mọi thứ hai lần trước khi bạn cắt/tối ưu hóa.

3

Tôi không nghĩ điều đó là có thể.

Giải pháp thay thế là đặt bộ đếm trong tài liệu nhỏ và chạy theo định kỳ compaction. Đây không phải là tối ưu, nhưng nó giảm thiểu không gian chiếm đóng.

+0

Tôi đồng ý, nhưng tôi nghĩ cần có cách tốt hơn để giải quyết vấn đề này. Tôi đang khám phá giới hạn sửa đổi đối với một tài liệu nhất định. Sẽ cập nhật câu hỏi này với những phát hiện của tôi ... –

+0

Một số nghiên cứu cho thấy chủ đề này - http://www.mail-archive.com/[email protected]/msg01974.html –

+0

Nếu một cơ sở dữ liệu được cấu hình bằng _revs_limit = 1, liệu nguồn cấp dữ liệu có độ phân giải và thay đổi xung đột vẫn hoạt động? Theo giả thuyết, để duy trì một bộ đếm gia tăng, chúng ta có thể có cặp khóa/giá trị trong tài liệu có cơ sở dữ liệu được cấu hình với _revs_limit = 1 Suy nghĩ? Cảm ơn! –

1

Bạn cũng có thể muốn xem xét sử dụng một cái gì đó như memcached (hoặc Membase) để phục vụ như là "bộ nhớ truy cập" của bạn. Điều đó sẽ cho phép bạn cập nhật các bộ đếm này mà không cần tạo thêm sửa đổi trong CouchDB. Tôi cho rằng bạn không thực sự cần phải giữ tất cả các trạng thái trung gian của bộ đếm (vì bạn nói rằng bạn không muốn các bản sửa đổi được giữ lại) để đưa chúng vào một cái gì đó phù hợp hơn cho trường hợp sử dụng này có vẻ hợp lý.

0

Chúng tôi đã làm một thí nghiệm nhỏ ...

Tài liệu đã mặc định 1000 vòng quay giới hạn, có khoảng 100kb của file đính kèm, 1 số nguyên truy cập, mà chúng tôi giữ incrementing

Chúng tôi đã kết thúc với khoảng 4GB đĩa được sử dụng cho khoảng 200.000 gia số. Sử dụng nén & nó đã giảm xuống còn khoảng 6KB.

Bây giờ đó là một con số thấp!

Mối quan tâm nghiêm trọng của tôi hiện nay - chạy thường xuyên nén (có thể hàng giờ/hai lần mỗi ngày/v.v) trên một trường hợp viết nặng!

Các vấn đề liên quan