我有一个用于数据处理的 NoSQL 数据库,因为它可以比 SQL 更快地用于我的应用程序。我几乎把我们的 NoSQL 数据库当作一个信息缓存,SQL 是数据的权威,NoSQL 存储随着变化而更新。现在,这是通过我们的应用程序完成的,因此当请求更改时,它会在 SQL 数据库和 NoSQL 数据库中进行。这有时会失败,因为有时 NoSQL 更新会失败,或者其他情况会导致 NoSQL 数据库不同步。
我可以每 X 分钟进行一次批量更新,但是数据存储中有很多信息,并且需要数小时才能确保它们同步。我们有一些时间戳来区分已更改的内容,但这并不总是准确的。
我想知道保持数据存储(二级数据库缓存)与我的主存储同步的一些推荐策略是什么?
最佳答案
我知道我过去已经完成了消息传递 - 特别是带有 ActiveMQ 的 JMS。我会使用队列将更新发送到 NoSQL 存储 (Mongo)。通过这种方式,消息可能会在队列中堆积,如果与 NoSQL 存储的连接被切断,它可以从中断的地方继续。
它工作得非常好,因为 ActiveMQ 非常稳定且易于使用。
我一直看到这是用你提到的差异来完成的。您一遍遍地引入日期字段,然后跟踪最新的同步。这种方法的好处在于它允许您通过修改上次同步日期轻松地重放事务。
最后一条建议......围绕将数据从 A 点泵送到 B 点(在本例中为 SQL 到 NoSQL)编写好的工具。我在上一份工作中编写了几个工具来从 SQL 批量加载 NoSQL 存储,如果任何事情真的不同步,它会让生活变得轻松。在脚本和批量加载过程之间,我总能恢复。
关于sql - 保持独立数据库同步的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17981794/