3

我有一个分布式 java 应用程序,我想在两个数据库之间发送数据库数据,这两个数据库位于不同的计算机系统或 android 设备中。哪个是传输表数据的最佳方式抛出套接字连接?我考虑将表行作为文本行或 xml 元素发送,或者为每个表创建一个类(实现 Serializable 接口)并传输该对象的数组列表每张桌子。您认为哪种解决方案更有效?还有其他方法可以做到这一点吗?数据库可能不同,如 mysql、sqlite、h2database,所以我不能使用任何数据库本机函数来同步(在这里,当我搜索类似的东西时,我读了一些关于 orable 数据库的东西,有这样的函数)。

非常感谢!!

4

2 回答 2

2

如果我这样做,我将采取的步骤只是一些想法。

首先将数据库中的数据读取为每台机器或设备上的某种通用格式。使用 JPA 来做会是最简单的。

因为这两个设备需要同步,所以您需要一个共同点进行比较。然后,如果数据中存在差异,您需要确定哪个副本是正确的。或者,如果这是一个表,只需将两个副本合并,然后将其推送回每台机器。

所以,我会使用排队服务器来做到这一点。在每台机器上,使用 JPA 读取数据并使用Gson将其发布到排队服务器(我将使用HornetQ)。来自两台机器的数据都到达输入队列。

然后让这个输入队列有一个读取器,它将数据混合在一起,丢弃重复项并提出数据的规范视图。最后,该数据然后被推送(再次使用 Gson)到两个(或所有)设备都订阅的 JMS 主题。

然后每个设备获取数据库的每一行,并可以相应地添加或更新。如果您还想在任何地方删除数据,则需要在每台设备上记录一些特殊日志来记录删除。

这只是一个开始......!:)

于 2011-04-27T18:03:24.827 回答
2

我个人认为 XML 对于传输数据来说过于冗长,您最终可能会得到一半的内容数据量和一半的结构数据量。

<record>
   <name>John</name>
   <age>30</age>
</record>

在定义结构时大部分空间都丢失了,您想要的数据所剩无几(John,30)。

纯文本行太有限,如果必须,至少考虑逗号分隔值。

Name;Age
John;30

第一行仅用于标签,如果您确定它永远不会改变,您可以将其删除。

对象的序列化可能太危险而无法传输数据,因为随着时间的推移,您可能会创建不兼容性,从而导致反序列化失败。例如,引入或删除一个字段就足够了。

看看JSON,它不像 XML 那样冗长,而且比行更结构化。重要的部分当然是您在两端正确处理数据,但如果您知道发送的结构,您可以正确转换它。

例子:

{name: John, age: 30 }
于 2011-04-27T18:28:56.507 回答