2009-12-11 44 views
13

Tôi hiện đang đánh giá giải pháp khả thi cho vấn đề follwing:sao chép Selective với CouchDB

Một tập hợp các mục dữ liệu phải được synchonized giữa nhiều khách hàng, trong đó mỗi khách hàng chỉ có thể xem (hoặc thậm chí biết về sự tồn tại của) một tập con của dữ liệu. Mỗi khách hàng "sở hữu" một số yếu tố và quyết định những người khác có thể đọc hoặc sửa đổi các yếu tố đó chỉ có thể được thực hiện bởi chủ sở hữu. Để làm phức tạp thêm tình huống này, mỗi phần tử (và mỗi bản sửa đổi phần tử) phải có một mã định danh duy nhất tương đương với tất cả các máy khách.

Khi thứ hai nghe như một nhiệm vụ hoàn hảo cho CouchDB (và mô hình dữ liệu dựa trên tài liệu phù hợp với nhu cầu của tôi), tôi không chắc liệu hệ thống con xác thực/ủy quyền của CouchDB có thể xử lý các yêu cầu này hay không: có thể để khôi phục quyền truy cập ghi bằng các hàm xác nhận, dường như không có cách nào để cho phép truy cập đọc. Tất cả các giải pháp tôi đã tìm thấy cho vấn đề này đề xuất để định tuyến tất cả các yêu cầu CouchDB thông qua một proxy (hoặc một lớp ứng dụng) xử lý ủy quyền. Vì vậy, câu hỏi đặt ra là: Có thể triển khai lớp ủy quyền lọc các yêu cầu tới cơ sở dữ liệu để truy cập chỉ được cấp cho các tài liệu mà ứng dụng khách yêu cầu đã đọc quyền truy cập và vẫn sử dụng cơ chế sao chép của CouchDB không? Không. Đơn giản, đây sẽ là một số loại "sao chép chọn lọc", nơi chỉ có một số tài liệu, và không phải toàn bộ cơ sở dữ liệu được nhân rộng.

Tôi cũng sẽ biết ơn các chỉ dẫn về một số thông tin chi tiết về cách hoạt động sao chép. Các CouchDB wiki và thậm chí là "Hướng dẫn xác định" Sách không quá cụ thể về điều đó.

Trả lời

5

điều này đòi hỏi các bộ lọc nhân rộng. bạn lọc bản sao ra ngoài dựa trên bất kỳ tiêu chí nào bạn áp đặt và cung cấp cho chủ sở hữu mục tiêu không bị giới hạn quyền truy cập vào bản sao của riêng họ.

Tôi chưa có cơ hội chơi trực tiếp với bộ lọc sao chép, nhưng ý tưởng sẽ là mỗi tài liệu sẽ có một số thông tin về người có quyền truy cập vào nó và cơ chế lọc sẽ cho phép sao chép ra ngoài mà bạn có quyền truy cập. sao chép từ mục tiêu trở lại master sẽ không bị hạn chế, cho phép master giữ nguyên bản sao rollup và các thay đổi multicast có khả năng xảy ra với các tập dữ liệu chồng chéo.

+0

Cảm ơn bạn (và andyuk, quá). Có vẻ như couchDB thực sự đang trở thành những gì tôi đang tìm kiếm. – FRotthowe

+0

bạn có ví dụ làm việc không? Tuy nhiên, sao chép được lọc không an toàn. Người dùng vẫn có thể truy cập tất cả dữ liệu qua _all_docs và nhận được – Kinesias

+0

8 năm sau? Tôi sợ không :) – kolosy

3

Những gì bạn đang làm sau là bộ lọc sao chép. Theo Chris Anderson, đó là một tính năng 0,11.

"Tình trạng hiện nay là có một API cho lọc _changes thức ăn. Các replicator trong 0,10 tiêu thụ những thay đổi thức ăn, vì vậy bước tiếp theo là nhận được replicator để sử dụng API lọc.

Có đang tiến hành việc này, vì vậy nó phải sẵn sàng hoàn toàn để đi vào 0,11 ".

Xem orginal post

1

Thật vậy, như những người khác đã nói, bộ lọc tái tạo là con đường để đi cho việc này. Here is a link với một số thông tin về cách sử dụng chúng.

Một báo trước tôi sẽ thêm là ở các bộ lọc nhân rộng quy mô có thể cực kỳ chậm. Thông tin thêm về điều này và các sắc thái khác về couchdb có thể được tìm thấy trong bài đăng trên blog tuyệt vời này: "what every developer should know about couchdb".Đối với các hệ thống quy mô lớn thực hiện sao chép trong lớp ứng dụng đã được chứng minh nhanh hơn và đáng tin cậy hơn.

+0

liên kết đã chết. hãy sửa chữa. – Kinesias

+0

Tôi không thể tìm thấy liên kết đã được đề cập trước đó, vì vậy hãy thêm một liên kết khác, cũng như cập nhật câu trả lời của tôi dựa trên các trải nghiệm gần đây hơn. Liên kết – Cory

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