SQLite支持复制吗?

SQLite支持复制吗?,sql,sqlite,replication,embedded-database,Sql,Sqlite,Replication,Embedded Database,在嵌入SQLite3并使用内存中数据库的应用程序中,是否可以在应用程序的两个运行实例之间复制数据库?我可以用一个复制所有数据库访问的自制协议手动完成这项工作,但这似乎应该在数据库层内完成。暴力方法:发送“.dump”命令以创建数据的文本表示形式。将该数据读入第二个数据库。我不确定你能用这个 如果需要细粒度更新(将每个副本的一个副本发送到另一个副本),请查看 但是您计划如何处理错误呢?例如,当app2中的DB副本由于某种原因无法进行更新时,会发生什么情况 要解决此问题,请将数据库移动到服务器进程,

在嵌入SQLite3并使用内存中数据库的应用程序中,是否可以在应用程序的两个运行实例之间复制数据库?我可以用一个复制所有数据库访问的自制协议手动完成这项工作,但这似乎应该在数据库层内完成。

暴力方法:发送“.dump”命令以创建数据的文本表示形式。将该数据读入第二个数据库。我不确定你能用这个

如果需要细粒度更新(将每个副本的一个副本发送到另一个副本),请查看

但是您计划如何处理错误呢?例如,当app2中的DB副本由于某种原因无法进行更新时,会发生什么情况


要解决此问题,请将数据库移动到服务器进程,并让两个应用程序与之对话。

不,因为该项目的范围是一个简单的进程内数据库。但由于数据库只是一个文件,因此可以基于普通文件复制操作、rsync或类似操作编写自己的复制脚本


如果您真的想要基于SQLite的客户机/服务器类型的RDBMS,您可以看看。

如果您想要在内存数据库中进行复制,您需要看看。然而,BDB的数据模型是字符串字典,因此您失去了SQL的灵活性。另外,它有一个三条款许可证,所以如果你的项目是商业性的,你需要获得许可证。

Unison?但您能做的最好的事情是热备盘,因为SQLite db位于一个单片文件中。您不能在这两个“实例”之间进行循环。热备盘还不错,你只需拿起另一个app+db就可以了,与MySQL主从或主动被动相比,手动干预并不容易。MySQL复制围绕SQL传递,而不仅仅是unison/rsync这样的差异。但有了unison,你就有了master master。

在这里可能有用。它使用rsync在文件级别执行连续复制。

开箱即用,否。 有少量第三方选项:

SQLite同步:这一个看起来很吸引人,因为它可以复制到其他数据库以及SQLite,并且不修改SQLite引擎。我还没试过

Litereplica:仅单向。似乎已经有一点了


LiteSync:双向复制。非常新,但它是Litereplica的一个演变,因此可能比它看起来更成熟。我已经尝试过一点,它似乎工作顺利,开发人员正在查看一些bug。您必须使用开发人员修改过的SQLite引擎,这似乎是一个令人担忧的依赖项。您也没有太多的控制权,例如,如果不重新打开数据库,就不能说立即复制。

好的,所以sqlite3\u update\u hook将是我逐行分层的起点。那很有帮助,谢谢。作为对其他观点的回应,我避免了应用程序的某些神奇属性无法插入的东西。对两个独立实例而不是一个中央数据库的需求是由分布需求的健壮性驱动的,而sqlite是由系统资源限制驱动的。只需确保两个拷贝同时用完内存/磁盘空间,等等。这似乎不是一个严肃的答案。是的,您最终可以自己构建它,但要使它可靠,这将是一项艰巨的任务。@Aarondigula很公平,但问题是关于两个正在运行的实例之间的复制。。。您的答案并没有真正提供。对于实时运行的数据库来说,这可能不是一个好主意。如果在事务期间进行复制,可能会导致从属数据库损坏。Sqlitedbms dead Now什么是unison?@BoppityBop,它指向用OCaml编写的,这本身就很有趣。现在你可能更喜欢golang解决方案,等等