跨多个服务器复制SQLite数据库的方法

42

我正在开发一款分布式应用程序,并且我有一个SQLite数据库必须在分布式服务器之间共享。

如果我在serverA中更改了sqlite行,这个更改必须立即在其他服务器上更新,但是如果一个服务器离线然后重新上线,它必须更新所有与其他服务器相同的信息。

我正试图通过小型SQLite数据库开发高可用性服务。

我考虑使用像MongoDB或ReThinkDB这样的数据库,因为复制功能很好且我已经获得了独立于在线服务器的数据。

是否有一种库或其他SQL方法可以在服务器之间共享数据?


不考虑竞态条件或其他类型的冲突吗? - Liz Av
5个回答

25

rqlite是否支持JSON1扩展? - jack-y
看起来很棒。期待尝试一下。 - Jonathan
我想尝试这个,但我需要一个可以替代SQLite的插件。RQLite要求在执行SQL语句时使用其HTTP API。 - undefined

8
以下是一些选项:
- LiteReplica: 它支持使用单个主节点(可写节点)和一个或多个副本(只读节点)的SQLite3数据库的主从复制。如果设备离线然后再次上线,副本数据库将按增量方式更新为主数据库。
- LiteSync: 它实现了多主复制,因此我们可以在任何节点中写入数据库,即使设备离线也可以。在两者上,我们使用类似于以下方式的修改过的URI打开数据库:
“file:/path/to/app.db?replica=master&bind=tcp://0.0.0.0:4444”
- AergoLite: 基于区块链,具有最高级别的安全性。存储由低资源使用的分布式共识保护的不可变关系数据。重要声明:我是这些解决方案的作者。

这对于多对一是否可行?意思是我有许多来源(相同的布局/表)到一个单一的从站? - Tacitus86
1
不,它只能与单个主服务器配合使用。它不会将来自多个来源的数据合并到单个数据库中,但您可以为每个来源保留单独的副本。 - Bernardo Ramos
你好,我对这些特别是LiteSync非常感兴趣。我们有这样一种情况,多个高延迟位置需要写入本地数据库并同步到主数据库。在每个位置的主数据库中保留所有数据并不理想或必要,因此我们正在寻找更多的“单向”同步解决方案。您知道一个好的解决方案吗? - Alex
从辅助节点到主节点的单向同步?也许可以使用OctoDB。顺便说一句,这不是查询的地方。 - Bernardo Ramos

6

您可以通过在应用程序中嵌入SymmetricDS来同步SQLite数据库。它支持偶尔连接的客户端,因此当服务器上线时会捕获更改并同步它们。它支持几种不同的数据库平台,并可用作库或独立服务。


1
有没有一种方法可以同步不同的文件托管SQLite数据库? - neuviemeporte

1
你也可以使用CopyCat,它支持SQLite以及其他几种数据库类型。

显然,它只在非常有限的条件下支持SQLite(例如使用Delphi?!)。 - Michael

1

Marmot 看起来不错:

https://github.com/maxpert/marmot

来自他们的文档:

什么是Marmot?为什么要使用它?

Marmot是一个分布式SQLite复制器,具有无领导和最终一致性。它允许您通过在容错的NATS Jetstream之上构建来构建节点之间的强大复制。这意味着,如果您正在运行基于SQLite的读取重型网站,则可以通过添加更多的SQLite复制节点轻松扩展它。SQLite可能是存在于几乎所有地方的最普遍的数据库,Marmot旨在通过在其之上构建复制层使其在服务器端应用程序中变得更加普及。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接