【问题标题】:what database architecture is a good choiche for this application?什么数据库架构是这个应用程序的好选择?
【发布时间】: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


    【解决方案1】:

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

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

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

    如果是,对所有的数据库使用同一个数据库是一个好习惯吗? 不同种类的桌子?如果不。如何更改数据库运行时?

    一般来说,一个应用程序会使用一个数据库。

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

    你可以,但那太疯狂了。

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

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

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

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

    对于这种类型,您建议使用哪种数据库架构 有问题吗?

    我建议您使用像 Apache JackRabbit 这样的内容存储库,或者像 Apache Solr 这样的搜索服务器。

    【讨论】:

    • 非常感谢您的回复。每个“分类键”必须有自己的表,否则我需要多维表。实际上,如果我需要为作者分组文件,我可以为与任何用户关联的每一行创建一个表,然后我需要使用列来存储有关文件的信息。
    • 但我需要在创建时指定列大小,因此我对每个用户的可索引文件有上限。然后一个signle table会随着用户和文件的数量迅速增加。我不认为这是一种成功的方法。如果我想添加关键字分类怎么办?我添加了一个维度。我应该搜索整个文件表 aech 时间以查找与密钥关联的文件吗?我不这么认为。我认为拥有更多桌子更有效。您认为这是一种不好的方法吗?无论如何,我会检查你所有的建议,谢谢!
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2020-09-16
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多