【发布时间】:2014-03-04 18:49:54
【问题描述】:
我有一个在 tomcat7 环境中运行的基于 servlet 的应用程序。
该应用程序需要以这样一种方式管理用户的文件,这些文件可以通过多种方式和不同的分类方法(例如面向时间的分类和搜索、关键字、标签、作者等)访问。
所以我有一个多维搜索空间,我需要组织一个基于数据库的分组系统。
让我们专注于一个特定的方面。
任何用户都可以上传自己的文件。所以我会有一个保存这些文件的路径。
然后我还需要一个地方来存储与文件相关的信息。
我认为最好将文件与相关信息(标题,...)分开,然后创建第三个实体,它是一个小字符串,可以明确标识信息和文件。
这样,一旦我知道文件 ID,我就可以获得信息(存储在特定文件中)和文件,但我可以将此 ID 保存在任何不正当的分类表中,而无需复制任何繁重的内容。
因此,如果我有文件 ID (fid),我可以获得文件和信息。例如,当我必须将一个对象关联到一个文件时,我可以简单地将该对象关联到 fid。
那么任何用户都必须有自己的表格来收集他上传的文件的各种 fid。 因此,我为每个用户准备了一张桌子。然后对于任何其他分类维度,我将有 N 个表(其中 N 是维度的大小)。因此,例如我想为关键字分类文件,我需要 N 个表,每个表对应一个特定的键盘。 (每次我希望通过所有用户文件与密钥 AGAA 关联的文件时搜索效率太低) 因此,如果我需要显示与关键字“AGAAA”相关的 50 个最近的文件,我需要一个 AGAAA 表。等等。
这太疯狂了。随着用户数量的增加,我会得到更多的表格。
我听说过 mysql 数据库中每个数据库的表限制。
到目前为止,我正在使用带有连接池的 mysql (mariaDB)。
我想在不同的数据库中拆分不同“性质”的表格(即键盘的表格,时间的表格等等)(也是为了以清晰的方式组织内容)。但是对于连接池,我需要在资源定义中声明数据库名称。因此,对于不同的数据库,我将需要不同的池。
现在的问题。
- 使用池,我必须为每个不同的数据库访问创建不同的池资源。我不是吗?
- 如果是,对所有不同类型的表使用相同的数据库是否是一种好习惯?
- 如果没有。如何更改数据库运行时?
我认为我可以使用不同的数据库系统管理不同的表。例如,我可以使用 SQLite 来管理分类表,使用 mysql 来管理用户交互等等。这是一个好习惯吗?
SQLite 在多用户应用程序中通常比基于服务器的数据库更快吗?
- 我可以在 SQLite 中使用连接池吗?我的意思是,如果 SQLite 没有服务器,那么 SQLite 连接是什么?考虑连接池是否有意义?
- 对于此类问题,您建议使用哪种数据库架构?
谢谢
【问题讨论】:
标签: java mysql database sqlite servlets