什么数据库架构是这个应用程序的不错选择?

时间:2014-03-04 18:49:54

标签: java mysql database sqlite servlets

我有一个在tomcat7环境中运行的基于servlet的应用程序 该应用程序需要以这样的方式管理用户的文件,这些文件可以通过多种方式和不同的分类方法访问(例如,面向时间的分类和搜索,关键字,标签,作者等)。

所以我有一个多维搜索空间,我需要组织一个基于数据库的分组系统。

让我们专注于一个具体的方面 任何用户都可以上传自己的文件。所以我将有一个保存这些文件的路径。

然后我还需要一个存储与文件相关的信息的地方 我认为将文件与相关信息(标题,...)分开然后创建第三个实体是一件好事,这个实体是一个小字符串,可以单独识别信息和文件。
这样一旦我知道文件ID,我就可以得到信息(存储在特定文件中)和文件,但我可以将这个id保存在任何反常的分类表中,而不会复制任何重量。
所以,如果我有文件ID(fid),我可以得到文件和信息。例如,当我将一个对象与一个文件相关联时,我可以简单地将该对象与fid相关联。

然后任何用户都必须拥有自己的表来收集他上传的文件的variu fid。 因此,每个用户都有一个表。然后对于任何其他分类维度,我将有N个表格(其中N是维度的大小)。因此,例如我想为关键字分类文件,我需要每个N表用于特定的键盘。 (每次我想要通过所有用户文件关联到关键AGAA的文件时,搜索效率太高) 因此,如果我需要显示与关键字“AGAAA”关联的50个最新文件,我需要一个AGAAA表。等等。

这很疯狂。随着用户数量的增加,我得到了更多的表格 我听说过mysql数据库中每个数据库的表限制。 到目前为止,我正在使用带有连接池的mysql(mariaDB)。 我虽然在不同的数据库中分割出不同“性质”(即键盘的那些,时间等等)的表格(也是为了以明确的方式组织内容)。但是对于连接池,我需要在资源定义中声明数据库名称。所以对于不同的数据库,我需要不同的池。

现在问题。

  • 使用池我必须为每个不同的数据库访问创建不同的池资源。我不是吗?
  • 如果是,对所有不同类型的表使用相同的数据库是一个很好的实践吗?
  • 如果没有。如何更改数据库运行时?
  • 我以为我可以用不同的数据库系统管理不同的表。例如,我可以使用SQLite来管理分类表,使用mysql来管理用户交互等等。这是一个很好的实践吗?

  • 在多用户应用程序中,SQLite通常比基于服务器的数据库更快吗?

  • 我可以使用SQLite连接池吗?我的意思是,如果SQLite没有服务器,SQLite连接是什么?考虑连接池是否有意义?
  • 您对这类问题建议使用什么数据库架构?

感谢

1 个答案:

答案 0 :(得分:1)

为什么每个用户或关键字都需要自己的表?表可以有很多行。

  

使用池我必须为每个池创建不同的池资源   不同的数据库访问我不是吗?

您的问题有多重含义,但通常您为一个应用程序创建一个池,并自行管理。

  

如果是,那么对所有人使用相同的数据库是一个很好的实践   不同种类的桌子?如果不。如何更改数据库运行时?

通常,人们会将一个数据库用于应用程序。

  

我以为我可以用不同的数据库管理不同的表   系统。例如,我可以使用SQLite来管理   分类表,mysql管理用户交互等等。是   这是一个很好的实践吗?

你可以,但那会很疯狂。

  

在多用户中,SQLite通常比基于服务器的数据库更快   应用

绝对不是。 SQLite一次只能有一个编写器,尽管对许多读者来说都很好。

  

我可以使用SQLite连接池吗?我的意思是,什么是SQLite   如果SQLite没有服务器连接?思考是否有意义   关于连接池?

我不知道,但如果您希望多个并发用户编写/上传到数据库,则不应使用SQLite。

  

您建议使用哪种数据库架构   问题群?

我建议您使用Apache JackRabbit等内容存储库或Apache Solr等搜索服务器。