我有一个在tomcat7环境中运行的基于servlet的应用程序 该应用程序需要以这样的方式管理用户的文件,这些文件可以通过多种方式和不同的分类方法访问(例如,面向时间的分类和搜索,关键字,标签,作者等)。
所以我有一个多维搜索空间,我需要组织一个基于数据库的分组系统。
让我们专注于一个具体的方面 任何用户都可以上传自己的文件。所以我将有一个保存这些文件的路径。
然后我还需要一个存储与文件相关的信息的地方
我认为将文件与相关信息(标题,...)分开然后创建第三个实体是一件好事,这个实体是一个小字符串,可以单独识别信息和文件。
这样一旦我知道文件ID,我就可以得到信息(存储在特定文件中)和文件,但我可以将这个id保存在任何反常的分类表中,而不会复制任何重量。
所以,如果我有文件ID(fid),我可以得到文件和信息。例如,当我将一个对象与一个文件相关联时,我可以简单地将该对象与fid相关联。
然后任何用户都必须拥有自己的表来收集他上传的文件的variu fid。 因此,每个用户都有一个表。然后对于任何其他分类维度,我将有N个表格(其中N是维度的大小)。因此,例如我想为关键字分类文件,我需要每个N表用于特定的键盘。 (每次我想要通过所有用户文件关联到关键AGAA的文件时,搜索效率太高) 因此,如果我需要显示与关键字“AGAAA”关联的50个最新文件,我需要一个AGAAA表。等等。
这很疯狂。随着用户数量的增加,我得到了更多的表格 我听说过mysql数据库中每个数据库的表限制。 到目前为止,我正在使用带有连接池的mysql(mariaDB)。 我虽然在不同的数据库中分割出不同“性质”(即键盘的那些,时间等等)的表格(也是为了以明确的方式组织内容)。但是对于连接池,我需要在资源定义中声明数据库名称。所以对于不同的数据库,我需要不同的池。
现在问题。
我以为我可以用不同的数据库系统管理不同的表。例如,我可以使用SQLite来管理分类表,使用mysql来管理用户交互等等。这是一个很好的实践吗?
在多用户应用程序中,SQLite通常比基于服务器的数据库更快吗?
感谢
答案 0 :(得分:1)
为什么每个用户或关键字都需要自己的表?表可以有很多行。
使用池我必须为每个池创建不同的池资源 不同的数据库访问我不是吗?
您的问题有多重含义,但通常您为一个应用程序创建一个池,并自行管理。
如果是,那么对所有人使用相同的数据库是一个很好的实践 不同种类的桌子?如果不。如何更改数据库运行时?
通常,人们会将一个数据库用于应用程序。
我以为我可以用不同的数据库管理不同的表 系统。例如,我可以使用SQLite来管理 分类表,mysql管理用户交互等等。是 这是一个很好的实践吗?
你可以,但那会很疯狂。
在多用户中,SQLite通常比基于服务器的数据库更快 应用
绝对不是。 SQLite一次只能有一个编写器,尽管对许多读者来说都很好。
我可以使用SQLite连接池吗?我的意思是,什么是SQLite 如果SQLite没有服务器连接?思考是否有意义 关于连接池?
我不知道,但如果您希望多个并发用户编写/上传到数据库,则不应使用SQLite。
您建议使用哪种数据库架构 问题群?
我建议您使用Apache JackRabbit等内容存储库或Apache Solr等搜索服务器。