Java 通过套接字连接发送数据库数据

Java 通过套接字连接发送数据库数据,java,xml,database,serialization,synchronize,Java,Xml,Database,Serialization,Synchronize,我有一个分布式java应用程序,我想在两个独立的计算机系统或android设备中的数据库之间发送数据库数据。通过套接字连接传输表数据的最佳方式是什么?我考虑将表行作为文本行或xml元素发送,或者为每个表创建一个类(实现可序列化的接口),并为每个表传输该对象的arraylist。你认为哪一种解决办法更有效?还有别的办法吗?数据库可能与mysql、sqlite、h2database不同,因此我不能使用任何数据库本机函数进行同步(在这里,当我搜索类似的内容时,我阅读了一些关于orable数据库的内容,

我有一个分布式java应用程序,我想在两个独立的计算机系统或android设备中的数据库之间发送数据库数据。通过套接字连接传输表数据的最佳方式是什么?我考虑将表行作为文本行或xml元素发送,或者为每个表创建一个类(实现可序列化的接口),并为每个表传输该对象的arraylist。你认为哪一种解决办法更有效?还有别的办法吗?数据库可能与mysql、sqlite、h2database不同,因此我不能使用任何数据库本机函数进行同步(在这里,当我搜索类似的内容时,我阅读了一些关于orable数据库的内容,有一个类似的函数)


非常感谢

如果我这样做的话,我会采取一些步骤

首先将数据库中的数据读入每台机器或设备上的某种通用格式。使用JPA做这件事是最简单的

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

因此,我将使用排队服务器来完成这项工作。在每台机器上,使用JPA读取数据,并将其发送到队列服务器(我将使用它)。来自两台机器的数据到达一个输入队列

然后,这个输入队列有一个读卡器,它将数据合并在一起,丢弃重复数据并生成数据的规范视图。最后,该数据随后被推送到(同样使用Gson)两个(或所有)设备都订阅的JMS主题

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


这只是一个开始…!:)

>我个人认为XML传递数据太冗长,最终可能会有一半的数据内容,一半的结构。

<record>
   <name>John</name>
   <age>30</age>
</record>
第一行仅用于标签,如果您非常确定标签永远不会更改,可以将其删除

对象的序列化对于传输数据来说太危险了,因为随着时间的推移,可能会产生不兼容,从而导致反序列化失败。例如,引入或删除字段就足够了

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

例如:

{name: John, age: 30 }

你能依靠服务器来进行同步吗?当你说“同步”时,你的意思是两个数据库之后必须看起来相同,还是需要将数据从一个数据库推送到另一个数据库?@Bozho是,例如,我想做的是在pc上安装一个java应用程序,在同步后安装一个android应用程序。我想让pc上的应用程序安装一个来自android设备的数据库数据副本,反之亦然。@alpian你说得对,我只是编辑我的问题。我只是想推送数据库数据,因为这是我第一次这样做,所以我问哪种解决方案更有效。@Jament:好的,我的回答是假设交叉同步。对于单向,我也会使用同样的机制——让接收机器成为该主题的唯一订户。这似乎是一个更完整的答案,尽管我不同意软件在发生冲突时决定什么是合适的合并。明智的做法是添加一个版本列,并根据更改是针对最新版本还是旧版本进行的而拒绝更新。也许只是考虑向服务器发送一个差异。行id+键/值对已更改
{name: John, age: 30 }