Java 创建许多小型数据库以供webapp访问

Java 创建许多小型数据库以供webapp访问,java,database,Java,Database,我对我的生意有这个要求。我们有一个与mysql数据库一起工作的swing桌面应用程序。在每天结束时,swing应用程序导出已更改的数据并将其上载到服务器。设置是,一个在办公室工作的用户,将有许多公司与他合作。如果他更改了该公司的任何数据,那么我将从数据库中单独导出该公司的数据。数据以java对象的形式导出,序列化并存储到上传的文件中 第二天,如果该公司再次发生任何更改,我将用最新上传的文件替换服务器中的文件 现在在我的服务器上,我想处理这个文件。我想把这些文件转换成一个网络应用程序可以读取的迷你

我对我的生意有这个要求。我们有一个与mysql数据库一起工作的swing桌面应用程序。在每天结束时,swing应用程序导出已更改的数据并将其上载到服务器。设置是,一个在办公室工作的用户,将有许多公司与他合作。如果他更改了该公司的任何数据,那么我将从数据库中单独导出该公司的数据。数据以java对象的形式导出,序列化并存储到上传的文件中

第二天,如果该公司再次发生任何更改,我将用最新上传的文件替换服务器中的文件

现在在我的服务器上,我想处理这个文件。我想把这些文件转换成一个网络应用程序可以读取的迷你数据库。它不会写信给它。每次用户上传时,数据库都会被删除并重新创建

因此,最终这些文件都是用户在其桌面应用程序中拥有的数据的一小部分

现在这些问题是:

  • 我导出的对象是“ApacheTorque”对象。Torque是一种ORM工具,基本上对象代表表格。我需要将此对象转换为数据库。Sqlite、HSQLDB、Derby。。。?数据库应该很小。如果目标文件大约为5KB,则表示该文件的数据库不应为3MB。德比确实做到了

  • java对象类可能会改变。因为基础数据库可能会更改。因此,我需要对这些对象进行反序列化,并在上传后立即从中创建一个数据库。否则,我以后将无法反序列化这些对象。对数据库进行小的更改对于web应用程序来说很好。但是如果我不立即反序列化它,那么我就被卡住了

  • 从java对象到数据库的转换应该很快。由于用户在上传数据时实际上会等待,因此我希望为转换添加最多5-10秒的额外时间

  • 有数千个这样的迷你数据库可以吗?这个设计可以吗?有其他解决办法吗
    我不会尝试将每个数据集放入自己的数据库中。我会将所有这些数据放在一个大数据库中,并在关键表中添加一列,指示每一行应用的数据集(听起来它应该只是一个公司标识符)。这是一个比拥有许多小型数据库更规范化的设计

    然后,您需要编写webapp,以便它查询特定的数据集,而不是连接到特定的数据库

    如果采用这种方法,则可以在数据集到达时反序列化并存储它们。存储只是将行插入现有数据库,因此速度应该非常快

    此外,我希望一个大型数据库比许多小型数据库更易于管理、维护、报告等


    如果您告诉我们更多关于您的模式的详细信息,我们可以讨论如何组织数据库,如果这样做有用的话。

    我不会尝试将每个数据集放入自己的数据库中。我会将所有这些数据放在一个大数据库中,并在关键表中添加一列,指示每一行应用的数据集(听起来它应该只是一个公司标识符)。这是一个比拥有许多小型数据库更规范化的设计

    然后,您需要编写webapp,以便它查询特定的数据集,而不是连接到特定的数据库

    如果采用这种方法,则可以在数据集到达时反序列化并存储它们。存储只是将行插入现有数据库,因此速度应该非常快

    此外,我希望一个大型数据库比许多小型数据库更易于管理、维护、报告等


    如果您告诉我们更多关于您的模式的详细信息,我们可以讨论如何组织数据库,如果这样做有用的话。

    +1用于使用同一数据库。从DBA的角度来看,更容易维护,也更容易编码(例如,只有一个JDBC连接而不是n,其中n是建议的数据库的#)。+1用于将数据存储在单个数据库中,而不是许多非常小的数据库中。它为您带来了简单性和速度,并且作为非需求奖励,您可以轻松查询单个数据库以生成统计信息,这可能会帮助您优化解决方案。感谢您的帮助。由于时间不足,我很遗憾无法将所有数据库合并到一个大模式中。每个表都需要修改,以包括您上面建议的公司标识符。在一个mysql实例中创建多个模式如何?我将为每个用户创建一个模式,而不是如上所述为每个公司创建一个模式。这也将大大减少模式的数量。如果数据库模式有任何更改,那么一旦用户上传数据,我将首先应用模式更改。从上面继续。。我将首先应用模式更改,删除与该公司相关的记录,然后在上传数据时插入反序列化对象中的数据。你们认为这会飞吗?我切换到mysql而不是其他基于文件的数据库,因为如果我在嵌入式模式下运行这些数据库中的任何一个,那么如果为我的服务器引入了负载平衡器,那么就会出现问题。将会有更多的JVM尝试连接到同一个数据库。老实说,这听起来不是一个好主意。请记住,您不一定需要在每个表中添加公司标识符,只需在“持久根”中添加公司标识符—假设您有一个合同表和一个支持调用表,每个都引用一个合同,那么您需要在合同上添加公司标识符,但不需要在支持调用上添加公司标识符,因为这些都是必要的