我对我的业务有这个要求。我们有一个与mysql数据库一起使用的swing桌面应用程序。在每天结束时,swing应用程序导出已更改的数据并将其上载到服务器。设置是在办公室工作的用户将拥有他正在使用的许多公司。如果他更改了该公司的任何数据,那么我只从数据库中导出该公司的数据。数据以java对象的形式导出,序列化并存储到上传的文件中。
第二天,如果再次对该公司进行任何更改,我将使用最新上传的文件替换服务器中的文件。
现在在我的服务器上,我想使用这个文件。我想将这些文件中的每一个转换为webapp可以读取的迷你数据库。它不会写入它。每次用户上传时,数据库都将被删除并重新创建。
因此,最终这些文件中的每一个都是用户在其桌面应用程序中拥有的数据的一小部分。
现在这个问题是:
我导出的对象是“Apache Torque”对象。 Torque是一个ORM工具,基本上对象代表表。我需要将此对象转换为数据库。 Sqlite,HSQLDB,Derby ......?数据库应该很小。如果目标文件大约是5KB,那么表示该文件的数据库不应该是3MB。德比确实做到了。
java对象类可能会发生变化。由于底层数据库可能会改变。因此,我需要对这些对象进行反序列化,并在上传后立即从中创建数据库。否则,我将无法在以后对这些对象进行反序列化。对Web应用程序进行小的数据库更改很好。但如果我不立即对其进行反序列化,那么我就陷入了困境。
从java对象到数据库的转换应该很快。由于用户实际上在他的数据上传时等待,我想为转换添加最多5-10秒。
答案 0 :(得分:3)
我不会尝试将每个数据集放入自己的数据库中。我会将它们全部放在一个大数据库中,同时在关键表中的一列指示每行适用的数据集(听起来它应该只是一个公司标识符)。这是一个比许多小型数据库更规范化的设计。
然后,您需要编写webapp,以便对特定数据集进行查询,而不是连接到特定数据库。
如果采用这种方法,您可以在数据集到达时反序列化并存储数据集。存储只是将行插入现有数据库,因此应该非常快。
此外,我希望一个大型数据库比许多小型数据库更容易管理,维护,报告等。
如果您告诉我们有关架构详细信息的更多信息,我们可以讨论如何组织数据库,如果这样做有用。