以编程方式合并 HSQLDB 数据库
Posted
技术标签:
【中文标题】以编程方式合并 HSQLDB 数据库【英文标题】:Programmatically merging HSQLDB databases 【发布时间】:2014-02-24 09:57:22 【问题描述】:我正在使用 Java 开发一个小型游戏编辑器,它使用户可以使用我的 UI 在 HSQL 数据库中插入/编辑/删除数据。我面临的问题是,我想给在不同机器上处理这样一个游戏项目的可能性,然后以编程方式合并数据库。
我想提供的另一件事是模组,因此人们应该能够创建模组并将特定游戏用作他们的“基础版本”。至少在它们不修改数据库中的相同行的情况下,还应该可以同时激活多个 mod。在那种情况下,它们将是不兼容的。
数据库完全离线,这意味着我不提供任何服务器或类似的东西。该数据库包含大约 30 个表格,包括 NPC、物品、地形 (...) 以及所有这些之间的链接。
我已经看到了一些 HSQLDB 插件:C-JDBC、HA-JDBC 和 SymmetricDS。它们旨在执行集群,但我什至不确定这是否正是我需要的东西,而且我无法弄清楚它们是否可以从我的代码中自动完成这项工作,以免让最终用户使用任何第 3 方 UI 自行合并。
我也想过只在 XML 结构中保存“变更集”,但这意味着我必须自己实现整个合并,而且我更愿意使用现有的解决方案而不是自己做所有事情.
【问题讨论】:
我非常怀疑任何数据库都包含专门为能够满足您的应用程序需求而构建的合并功能。当然你需要自己构建合并逻辑;其特定于您的应用程序的业务逻辑。我可能会添加一个简单的 Web 服务连接,以便能够使一个实例采用来自另一个实例的数据;使用 JSON 作为数据格式的导入/导出可能是一个简单的替代方案,根本不需要连接。 【参考方案1】:您提到的程序:C-JDBC、HA-JDBC 不适合这种用法。他们让两台运行 HSQLDB 的服务器实时同步。 SymmerticDS 可能具有您想要的功能。还有其他用于数据库差异和合并的程序可以很好地与 HSQLDB 配合使用。进行搜索。一个例子在这里:http://flywaydb.org/
但您真正需要做的是设计您的数据库,以便它可以存储任何游戏和任何模组的不同版本(模组)。看看 CVS 如何与点版本一起工作。您可以实现相同的东西,因此修改后的数据库确实包含基础游戏的所有原始数据行而不做任何更改,但会为新版本或 mod 添加新行。
将这样的数据库与以前的版本合并是微不足道的,因为您只是在原始数据库中添加不退出的行。
【讨论】:
感谢您的帮助。但是我仍然面临着现有行也可以被mods编辑或删除的问题。使用某种 XML 或 JSON 来保存“变更集”是否合适? 我添加了一个指向软件的链接来执行此操作。但是,如果您实现基于版本的数据库,则永远不会删除或修改现有行。以上是关于以编程方式合并 HSQLDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章