我有一个分布式的java应用程序,我想在两个数据库之间发送数据库数据,这两个数据库位于单独的计算机系统或Android设备中。哪个是传输表数据的最佳方法抛出套接字连接?我考虑将表行作为文本行或xml元素或为每个表创建一个类(实现Serializable接口)并传输该对象的arraylist每张桌子。在您看来哪个更有效的解决方案?有没有其他方法可以做到这一点?数据库可能与mysql,sqlite,h2database不同,所以我不能使用任何数据库本机函数来同步(这时我搜索类似的东西我读了一些关于orable数据库的东西,有这样的函数)。
非常感谢!!
答案 0 :(得分:1)
如果我这样做的话,我会采取一些步骤。
首先将数据库中的数据读入每台机器或设备上的一些通用格式。使用JPA可以做到最简单。
由于这两个设备需要同步,因此您需要一个共同点进行比较。然后,如果数据存在差异,您需要确定哪个副本是正确的。或者,如果这是一个表,只需将两个副本合并,然后将其推回每台机器。
所以,我会使用排队服务器来做到这一点。在每台计算机上,使用JPA读取数据并使用Gson将其发布到排队服务器(我将使用HornetQ)。两台机器的数据都到达输入队列。
然后有一个读取器用于此输入队列,它将数据一起发送,同时丢弃重复数据并提供数据的规范视图。最后,然后将这些数据(再次使用Gson)推送到JMS主题,两个(或所有)设备都订阅了该主题。
然后每个设备获取数据库的每一行,并可以相应地添加或更新。如果你想在任何地方删除数据,你需要在每个设备上有一些特殊的日志来记录删除。
那只是一个首发......! :)
答案 1 :(得分:1)
就个人而言,我认为XML对于传输数据来说过于冗长,最终可能会有一半的内容数据和一半的结构数据。
<record>
<name>John</name>
<age>30</age>
</record>
在定义结构时大部分空间都丢失了,你想要的数据很少(John,30)。
纯文本行太有限,如果必须,至少要考虑逗号分隔值。
Name;Age
John;30
第一行仅适用于标签,如果您确定永远不会更改,则可以将其删除。
对象的序列化对于传输数据来说可能太危险,因为您可能会随着时间的推移创建不兼容性,从而导致反序列化失败。例如,引入或删除字段就足够了。
看看JSON,它不像XML那么冗长,而且比结构更加结构化。当然,重要的一部分是你在两端正确处理你的数据,但是如果你知道发送的结构,你可以正确地转换它。
示例:
{name: John, age: 30 }