Java 创建许多小型数据库以供webapp访问
我对我的生意有这个要求。我们有一个与mysql数据库一起工作的swing桌面应用程序。在每天结束时,swing应用程序导出已更改的数据并将其上载到服务器。设置是,一个在办公室工作的用户,将有许多公司与他合作。如果他更改了该公司的任何数据,那么我将从数据库中单独导出该公司的数据。数据以java对象的形式导出,序列化并存储到上传的文件中 第二天,如果该公司再次发生任何更改,我将用最新上传的文件替换服务器中的文件 现在在我的服务器上,我想处理这个文件。我想把这些文件转换成一个网络应用程序可以读取的迷你数据库。它不会写信给它。每次用户上传时,数据库都会被删除并重新创建 因此,最终这些文件都是用户在其桌面应用程序中拥有的数据的一小部分 现在这些问题是:Java 创建许多小型数据库以供webapp访问,java,database,Java,Database,我对我的生意有这个要求。我们有一个与mysql数据库一起工作的swing桌面应用程序。在每天结束时,swing应用程序导出已更改的数据并将其上载到服务器。设置是,一个在办公室工作的用户,将有许多公司与他合作。如果他更改了该公司的任何数据,那么我将从数据库中单独导出该公司的数据。数据以java对象的形式导出,序列化并存储到上传的文件中 第二天,如果该公司再次发生任何更改,我将用最新上传的文件替换服务器中的文件 现在在我的服务器上,我想处理这个文件。我想把这些文件转换成一个网络应用程序可以读取的迷你
我不会尝试将每个数据集放入自己的数据库中。我会将所有这些数据放在一个大数据库中,并在关键表中添加一列,指示每一行应用的数据集(听起来它应该只是一个公司标识符)。这是一个比拥有许多小型数据库更规范化的设计 然后,您需要编写webapp,以便它查询特定的数据集,而不是连接到特定的数据库 如果采用这种方法,则可以在数据集到达时反序列化并存储它们。存储只是将行插入现有数据库,因此速度应该非常快 此外,我希望一个大型数据库比许多小型数据库更易于管理、维护、报告等
如果您告诉我们更多关于您的模式的详细信息,我们可以讨论如何组织数据库,如果这样做有用的话。我不会尝试将每个数据集放入自己的数据库中。我会将所有这些数据放在一个大数据库中,并在关键表中添加一列,指示每一行应用的数据集(听起来它应该只是一个公司标识符)。这是一个比拥有许多小型数据库更规范化的设计 然后,您需要编写webapp,以便它查询特定的数据集,而不是连接到特定的数据库 如果采用这种方法,则可以在数据集到达时反序列化并存储它们。存储只是将行插入现有数据库,因此速度应该非常快 此外,我希望一个大型数据库比许多小型数据库更易于管理、维护、报告等
如果您告诉我们更多关于您的模式的详细信息,我们可以讨论如何组织数据库,如果这样做有用的话。+1用于使用同一数据库。从DBA的角度来看,更容易维护,也更容易编码(例如,只有一个JDBC连接而不是n,其中n是建议的数据库的#)。+1用于将数据存储在单个数据库中,而不是许多非常小的数据库中。它为您带来了简单性和速度,并且作为非需求奖励,您可以轻松查询单个数据库以生成统计信息,这可能会帮助您优化解决方案。感谢您的帮助。由于时间不足,我很遗憾无法将所有数据库合并到一个大模式中。每个表都需要修改,以包括您上面建议的公司标识符。在一个mysql实例中创建多个模式如何?我将为每个用户创建一个模式,而不是如上所述为每个公司创建一个模式。这也将大大减少模式的数量。如果数据库模式有任何更改,那么一旦用户上传数据,我将首先应用模式更改。从上面继续。。我将首先应用模式更改,删除与该公司相关的记录,然后在上传数据时插入反序列化对象中的数据。你们认为这会飞吗?我切换到mysql而不是其他基于文件的数据库,因为如果我在嵌入式模式下运行这些数据库中的任何一个,那么如果为我的服务器引入了负载平衡器,那么就会出现问题。将会有更多的JVM尝试连接到同一个数据库。老实说,这听起来不是一个好主意。请记住,您不一定需要在每个表中添加公司标识符,只需在“持久根”中添加公司标识符—假设您有一个合同表和一个支持调用表,每个都引用一个合同,那么您需要在合同上添加公司标识符,但不需要在支持调用上添加公司标识符,因为这些都是必要的