7

我正在寻找一种方法来跨对等方复制一个小而简单的关系数据库(如 SQLite)。这应该在网络连接不稳定的环境中工作,因此每个对等点都需要拥有数据库的完整副本。这应该允许对等方在网络故障的情况下继续离线工作。

为了简单起见,复制应该只支持添加数据的复制,即只有 INSERT,而不是 DELETE 或 UPDATE。

有谁知道创建这样一个系统的好的——理想情况下是跨平台的——技术或方法?我目前正在研究 JXTA 和 JXSE,但在 Oracle 收购 Sun 之后,我对其复杂性和社区明显缺乏活力感到厌烦。

谢谢!弗兰斯

4

3 回答 3

1

rqlite使用 raft 共识算法,因此它应该对不稳定的网络连接具有相当的弹性。

此外,即使在网络故障的情况下,似乎也可以将 rqlite 配置为接受读取。

一个类似的项目dqlite作为一个库存在,有多种语言版本,但对于网络故障的事件似乎不太明确。

于 2020-07-06T22:36:04.133 回答
0

如果您不喜欢 JXTA,您可能想要探索用于通信层的JGroups 。对于复制,我认为您必须实现自己的代码。

于 2011-10-07T22:27:54.343 回答
0

我正在做类似的事情(尽管代码还远未准备好)。我将简要介绍一下我的预期方法,但这是否适合您取决于您​​需要考虑的一些关键设计点。不幸的是,我不知道有任何现成的项目可以做到这一点。

  • 特别是我们需要知道您希望使用哪种语言,或者您希望避免使用哪种语言。
  • 另外,请考虑您打算如何进行对等发现 - 您可以手动设置节点对之间的信任,还是希望它们自动发现?
  • 大概所有的对等点都可以插入数据?

如果您能够使用 PHP,并且乐于手动对等节点对,那么我的方法可能会引起您的兴趣。设置一个 ORM,例如 Doctrine、Propel 或 NotORM,并让每个节点定期与互联网时间源同步。对于 db 中的每个新行,获取数据(在数组或 ORM 对象中),将其序列化,然后将其推送到与您有信任关系的所有节点。如果推送失败,请记下这一点并定期重试(在远程节点无法响应大量重试后可能会放弃)。

推送可以由创建行的应用程序启动,也可以由每台机器上可用的任何调度程序调用。推送消息可以是 XML,或者为简单起见,可以只是一个 POST 消息,其中包含新行和任何元数据(例如保存的时间戳,以便解析来自多个节点的 INSERT 顺序)。

如果您的节点没有静态 IP 地址,则可以将它们注册到动态 DNS 寻址服务,以便每个节点即使 IP 发生变化也能与对等节点保持联系。您还可以考虑添加消息签名系统,以确保节点之间的消息是真实的。

于 2011-10-10T21:51:59.200 回答