外部只读数据库,我的本地数据库,不一致

问题描述:

有一个服务A与DB1一起使用,服务B使用DB1和DB2。服务A具有对DB1的读写访问权限,并且根本不适用于DB2。服务2具有对DB2的读写访问权和对DB1的只读访问权。外部只读数据库,我的本地数据库,不一致

想法是,我正在开发服务2并关注不一致性。服务2就像服务1的“插件”,所以DB2可能被认为是“与DB1实体有关的更多数据”。我无法明确与服务1同步,并且它是数据库,当实体被移除,更改或出现新实体时,我无法收到任何通知。

问题是,服务2使所有这些东西保持一致的正确方法是什么?

我在考虑将实体从DB1复制到DB2,所以唯一真正与DB1一起工作的是“复印机”。然后,Service 2将只与DB2一起工作,应该没有问题。这似乎相当微不足道,所以我非常喜欢这种方法。

还有其他想法吗?

一些更多的细节: DB1就像2个表,总结1M行。两个数据库都在同一台服务器上。该服务器是MS SQL 2005/2008。服务2在.NET中。

“定期复制”选项是一个好主意,如果您的需求可以处理在DB1中添加/更新记录时与在DB2中显示记录时之间有点滞后的情况,那么该选项将很好。

如果您的应用程序不能句柄滞后,那么方法会采取基本上是一个2管齐下的方法,你仍然做定期同步从DB1到DB2,但随后也有您的应用程序副本如果DB2发现它在DB2中需要的东西尚未存在,那么将数据从DB1转移到DB2中。

例如,假设您有一位用户需要更新DB2中存储的一些特殊配置文件信息(一种常见的“插件”方案)。

  1. 当用户进入应用程序的插件部分来设置此特殊信息位时,您的应用程序将首先在DB2中查找该用户。
  2. 如果用户的信息尚未存在(例如新用户),则可以使用
    • 然后您转到DB1以获取数据并将其填充到DB2中。
  3. 然后,您可以像平常一样继续保存特殊配置文件信息。

根据您的性能要求,“根据需要复制”方法可能已足够,可能不需要额外的“同步所有”周期性过程。然而,如果额外的同步过程可能会减少应用程序在DB2上发生的“未命中”数量,并且该数据不在那里并且必须从DB1中获取。