MarkLogic 数据库同步

MarkLogic Database Synchronization

我们正在寻找满足以下要求的解决方案:

  1. 我们的客户有一个 ML 数据库,他们没有给我们任何 访问,即使我们不能 运行 在那里只读查询
  2. 他们想要创建该数据库的另一个 ML 数据库实例 没有任何延迟的同步。
  3. 无论我们想执行什么操作,比如查询或更新,都会执行 在此副本数据库上。

可用于执行这些操作的准则很少:

  1. 数据库Backup/restore(有或没有日志归档) http://docs.marklogic.com/guide/admin/backup_restore
  2. 灵活复制(使用内容处理框架) http://docs.marklogic.com/guide/flexrep/rep_intro
  3. 数据库复制 http://docs.marklogic.com/guide/database-replication/dbrep_intro
  4. 森林 Backup/Restore(而不是整个数据库只是森林) http://docs.marklogic.com/guide/admin/forests#id_76303
  5. XQSync(应用级同步工具) http://marklogic.github.io/xqsync/tutorial.html

但是,我们无法最终确定哪个适合我们的情况。请建议我们最好的解决方案。

听起来您正在设置开发服务器并希望从生产环境中复制数据。你应该考虑

  • 对生产服务器的影响
  • 您是否需要从生产服务器频繁更新(生产应用程序是否更新其数据库?您是否需要开发中的那些?)
  • 您需要所有数据还是部分数据?

数据库管理员很有可能 scheduled regular backups,尤其是在频繁更新的情况下。假设是这种情况,您应该能够获得其中一个备份的副本,而不会对生产服务器产生任何影响。所以我的第一个建议是#1。您可以像管理员所做的那样频繁地使用这些备份更新您的开发服务器。请注意,使用数据库备份需要两台服务器 运行 在同一平台上。这将为您提供所有生产数据。

另一方面,如果您的开发服务器或多或少地从生产服务器获得频繁更新很重要,那么#2 灵活复制或#3 数据库复制将完成工作。了解这些需要生产服务器的更多工作,并且可能不是您想要为开发目的做的事情,但它是一个选项。对生产服务器的影响将取决于生产中数据库更新的频率。在这两者中,我不知道哪个会对产品产生更大的影响(还有其他人吗?)。这可以为您获取所有数据,或者可以配置为获取一个子集。

最后,如果您不需要频繁(当他们发生时)更新并且管理员没有进行备份,或者如果生产和开发 运行 在不同的平台上运行(Windows/Linux/Mac),您可以在下班时间 运行 XQSync。我会非常小心地这样做,因为混淆参数可能会将数据发送到错误的方向。您可以将其配置为根据目录、集合或自定义查询获取数据子集。

相关说明:这些策略中的每一个都是关于复制数据的,但是其中 none 会为您复制数据库配置。这将需要一些其他方法。您可以使用 Roxy Deployer 将您的配置保存在 git/svn/whatever 和 bootstrap 中,您的配置在所有环境中都以相同的方式保存。您可以使用 MarkLogic 提供的配置管理器拍摄生产环境的快照(您需要管理员为您执行此操作)并将其导入您的开发环境。

建议的起点:确保您的配置匹配,然后使用管理员可能正在使用的备份。这对生产系统的影响最小,风险也最低。如果这不能满足您的需求,请查看其他策略之一。

这听起来像是开发或测试环境。在这样的环境中,复制通常不需要自动发生。从数据库备份中恢复就足够了。您可以自由使用本地副本,运行宁查询和更新。然后,只要有意义,您就可以恢复新的备份,这将用最新的文档覆盖所有内容。

如果复制必须持续且自动进行,那么您需要复制。但是,这与您的数据库副本上的 运行ning 更新冲突。 MarkLogic 复制是单主的,所以如果不接受其中一个是主数据库和真实来源,就不能保持两个数据库同步。

数据库复制是保持整个数据库同步的最有效方式。数据库副本可以 运行 只读查询,但不能更新。当您想要 运行 更新您的副本时,您仍然可以通过将其关闭来使用数据库复制。然后再次打开复制并让它覆盖任何本地更改。

灵活复制效率较低,但更灵活。您可以自由地进行本地更改。来自主数据库的更新将覆盖这些更改,使您的副本或多或少与主数据库保持同步。