2011-09-19 49 views
5

Tôi đang tìm cách sao chép cơ sở dữ liệu quan hệ nhỏ và đơn giản (như SQLite) qua các đồng nghiệp. Điều này sẽ làm việc trong một môi trường với các kết nối mạng không ổn định, do đó cần cho mỗi peer có một bản sao đầy đủ của cơ sở dữ liệu. Điều này sẽ cho phép một peer để tiếp tục làm việc off-line trong trường hợp thất bại mạng.Sao chép ngang hàng của cơ sở dữ liệu sqlite

Để giữ mọi thứ đơn giản, nhân rộng chỉ nên hỗ trợ nhân rộng bổ sung dữ liệu, tức là chỉ INSERT, chứ không phải DELETE hoặc UPDATE.

Có ai biết về công nghệ hay phương pháp đa nền tảng tốt và lý tưởng để tạo một hệ thống như vậy không? Tôi hiện đang nhìn vào JXTA và JXSE, nhưng tôi bị bỏ rơi bởi sự thiếu phức tạp và thiếu điều kiện của cuộc sống trong cộng đồng của mình sau khi Oracle tiếp quản Sun.

Cảm ơn! Frans

Trả lời

0

Bạn có thể muốn khám phá JGroups cho lớp giao tiếp nếu bạn không thích JXTA. Để nhân rộng, tôi nghĩ bạn sẽ phải thực thi mã của riêng bạn.

+0

Cảm ơn! Tôi sẽ xem xét các nhóm Jgroups. Tôi hiểu rằng tôi cần phải tự mình viết mã. Với JXTA có lẽ là như nhau. Có vẻ như một vấn đề phức tạp hơn rất nhiều so với giao tiếp P2P hiệu quả. – user952460

0

Tôi đang làm việc trên một cái gì đó tương tự (mặc dù mã đã sẵn sàng). Tôi sẽ mô tả một chút về cách tiếp cận dự định của tôi, nhưng cho dù đó là thích hợp cho bạn phụ thuộc vào một số điểm thiết kế quan trọng bạn cần phải xem xét. Tôi không biết về bất kỳ dự án xây dựng sẵn nào sẽ làm điều này, thật không may.

  • Cụ thể, chúng tôi cần biết ngôn ngữ bạn muốn sử dụng hoặc ngôn ngữ nào bạn muốn tránh.
  • Ngoài ra, hãy xem xét cách bạn dự định thực hiện phân loại ngang hàng - bạn có thể thiết lập sự tin cậy giữa các cặp nút theo cách thủ công hay bạn muốn chúng tự động khám phá?
  • Có lẽ tất cả các đồng nghiệp đều có thể chèn dữ liệu?

Nếu bạn có thể sử dụng PHP và hài lòng khi nhìn thủ công các cặp nút thì phương pháp tiếp cận của tôi có thể được quan tâm. Thiết lập một ORM như Doctrine, Propel hoặc NotORM và nhận mỗi nút để đồng bộ hóa thường xuyên với một nguồn thời gian internet. Đối với mỗi hàng mới trong một db, lấy dữ liệu (hoặc trong một mảng hoặc đối tượng ORM), serialise nó, và đẩy nó ra cho tất cả các nút mà bạn có một mối quan hệ tin cậy với. Trong trường hợp push không thành công, hãy lưu ý điều này và thử lại trong các khoảng thời gian định kỳ (có khả năng từ bỏ sau khi một nút từ xa không trả lời được một số lượng lớn các lần thử lại).

Các ứng dụng của bạn có thể tạo ra hàng hoặc có thể gọi bằng bất kỳ công cụ lên lịch nào trên mỗi máy. Thông báo đẩy có thể là XML hoặc để đơn giản có thể chỉ là thông báo POST chứa hàng mới và bất kỳ siêu dữ liệu nào (ví dụ: dấu thời gian lưu, để giải quyết lệnh INSERT từ nhiều nút).

Nếu các nút của bạn không có địa chỉ IP tĩnh, chúng có thể được đăng ký với dịch vụ địa chỉ DNS động để cho phép mỗi nút giữ liên lạc với các đồng nghiệp ngay cả khi IP của chúng thay đổi. Bạn cũng có thể xem xét thêm một hệ thống ký tin nhắn, để đảm bảo rằng các thông điệp giữa các nút là chính hãng.

+0

Cảm ơn lời khuyên. Đối với ngôn ngữ - bất kỳ ngôn ngữ nào cũng có thể làm được. Tôi chưa bao giờ viết mã PHP nhưng điều quan trọng nhất là công việc được thực hiện. Tôi muốn tự động khám phá. Quá trình sao chép không nên yêu cầu sự tương tác của người dùng.Ngoài ra, tôi muốn hành vi ngang hàng thông minh, như: * sử dụng tất cả các phương tiện giao thông hiện có và chuyển đổi nếu cần thiết * những người có kết nối cao sẽ giúp những người ngang hàng có kết nối thấp * ưu tiên các thông báo – user952460

+0

Nếu bạn không bận tâm cơ sở dữ liệu, bạn có thể thử [Refuge] (http://refuge.io), dựa trên CouchDB (và tôi nghĩ rằng viết bằng _Erlang_). Tôi đã nói chuyện với các nhà phát triển thông qua IRC và kiến ​​thức và cách tiếp cận của họ có thể là một nguồn lực tốt cho bạn - họ cũng muốn hệ thống của họ có khả năng tự động khám phá. Tôi nghĩ rằng đó là những ngày đầu cho họ, tuy nhiên - afaik họ không có một nguyên mẫu làm việc đầy đủ nào được nêu ra. – halfer

+0

Ngẫu nhiên dự án của tôi, [Meshing] (http://blog.jondh.me.uk/meshing/), cũng đang ở giai đoạn đầu, nhưng bạn có thể tìm thấy một số văn bản của tôi về nó quan tâm. Tuy nhiên, hãy nhớ rằng tôi không có ý định thực hiện phát hiện ngang hàng - cho những gì tôi đang cố gắng đạt được, tôi không nghĩ mình cần nó. – halfer

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