2015-05-04 22 views
7

Cách tiếp cận tốt nhất để lưu trữ nhiều dữ liệu người dùng là mỗi người dùng cho mỗi cơ sở dữ liệu. Tôi đang sử dụng cách tiếp cận tương tự này.Làm thế nào để quản lý đồng bộ hóa pouchdb và couchdb?

Tôi có couchdb trên máy chủ và pouchdb cho ứng dụng dành cho thiết bị di động. Tôi đang duy trì từng dữ liệu người dùng bằng cách tạo cơ sở dữ liệu riêng cho người dùng trong pouchdb và couchdb. Điều đó có nghĩa là tôi có nhiều cơ sở dữ liệu trong couchdb và một cơ sở dữ liệu trong pouchdb.

thường trong dữ liệu người dùng cơ sở dữ liệu sqlbase được lưu trữ trong bảng khác nhau khác nhau.

vì vậy trong nosql pouchdb tôi đang tạo tài liệu cho mỗi bảng.

vấn đề thực tế tôi đang phải đối mặt là:

tôi có một tài liệu trong mỗi cơ sở dữ liệu mà các cửa hàng giao dịch của người dùng.

Giao dịch khách hàng được lưu trữ trong pouchdb khi người đó ngoại tuyến và khi ứng dụng nhận được giao dịch trực tuyến đồng bộ hóa với cơ sở dữ liệu người dùng couchdb trong tài liệu giao dịch.

dữ liệu được lưu trữ trong tài liệu giao dịch như sau

{ 
    "_id":"transaction ", 
    "_rev":"1-3e5e140d50bf6a4d873f0c0f3e3deb8c", 
    "data":[ 
    { 
     "transaction_id":"tran_1", 
     "transaction_name":"approve item", 
     "status":"Pending", 
     "ResultMsg":"" 
    }, 
    { 
     "transaction_id":"tran_2", 
     "transaction_name":"approve item", 
     "status":"Pending", 
     "ResultMsg":"" 
    }] 
} 

Tất cả các giao dịch được thực hiện trên phía máy chủ và kết quả được cập nhật trong những document.when bao giờ bất kỳ giao dịch mới thực hiện i lưu trữ nó trong tài liệu giao dịch trong dữ liệu thuộc tính.

Bây giờ tôi có 1 giao dịch trong túi và couchdb cả hai có nghĩa là cả hai đều được đồng bộ.

Bây giờ khi ứng dụng di động ngoại tuyến, ứng dụng này thực hiện giao dịch ngoại tuyến được lưu trữ trong tài liệu giao dịch pouchdb.

và ở phía máy chủ mà 1 giao dịch được cập nhật thành công.

Bây giờ, khi ứng dụng truy cập trực tuyến và đồng bộ hóa, tôi sẽ mất các thay đổi phía máy chủ và cuối cùng dữ liệu trong tài liệu giao dịch là dưới dạng ứng dụng khách.

ở đây tôi đang mất dữ liệu phía máy chủ. vậy phương pháp tiếp cận tốt là gì hoặc làm cách nào tôi có thể giải quyết nó.

enter image description here enter image description here

Trả lời

6

gì đang xảy ra là bạn có mâu thuẫn với cùng một tài liệu, bởi vì nó được sửa đổi bằng cách này bởi máy chủ và một cách khác của khách hàng. Một phiên bản xung đột là chiến thắng tùy ý và phiên bản còn lại bị mất.

Bạn có thể resolve the conflicts hoặc (giải pháp hợp lý hơn trong trường hợp của bạn) lưu trữ nhiều tài liệu cho mỗi người dùng thay vì một tài liệu lớn.

Chỉ vì bạn có một cơ sở dữ liệu cho mỗi người dùng không có nghĩa là bạn cần có một tài liệu cho mỗi người dùng. :) ví dụ tài liệu của bạn có thể là:

{_id: "Tran_1", status: "Pending"} 
{_id: "Tran_2", status: "Pending"} 
// etc. 

Những tài liệu này sẽ được tạo ra một lần vào khách hàng và cập nhật một lần trên máy chủ. Không có khả năng xung đột. Miếng bánh!

+0

Tôi cũng biết về cách tiếp cận này và tốt nhất là tôi có nhiều tài liệu trong cơ sở dữ liệu người dùng như giao dịch.Vậy tôi có nên sử dụng tài liệu riêng cho mỗi bản ghi không? và làm thế nào để quản lý dữ liệu bảng nhiều? bạn có thể giải thích cho tôi tôi đang bối rối về nó. –

+0

Bạn có thể có tài liệu riêng cho từng kết hợp thiết bị phiên - và mỗi tài liệu chứa một số bản ghi giao dịch sau đó được giảm bản đồ để có được trạng thái giao dịch cuối cùng. Cách tiếp cận này a) tạo ra ít tài liệu hơn (số lượng tài liệu trong DB tác động đến hiệu ứng Pouch); b) tạo ra ít lưu lượng hơn; c) không tạo ra xung đột. – ermouth

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