一个大数据库与许多小数据库

One big database versus many small databases

我的应用程序处理几个类似的数据集。即它们存储在相同的table中,但数据不同。用户可以创建更多数据集。在任何情况下,这些数据集都保证是分离的。一个数据集中的任何数据永远不会以某种方式链接到另一个数据集中的数据。

我在想,是不是每个数据集都有一个专用数据库,而不是将所有数据都放在一个大数据库中?

如果用户在较小的数据库上工作,我预计查找时间会缩短。在我担心查找时间之前,数据库(或 table)可以容纳多少个条目是否有经验法则?

我能想到的一个缺点是打开数据库会产生一些开销。但是,我不希望用户频繁切换数据集。

考虑这个例子:

数据库包含 table 公司、客户、产品和订单。公司从不共享客户或产品,因此公司是分离的数据集。但是,所有产品、客户和订单都在一个大 table 中(分别为每个)。

对数据库的查询可能包括:

这些查询的共同点是,它们总是在一家公司的背景下发出。然而,由于数据库不知道这个逻辑分区,所有 客户、产品和订单将被搜索。

如果我有几个数据库,每个公司一个,我的逻辑分区就会被反映出来,只搜索相关的数据。不过,我不确定拥有那么多数据库的开销。

因为我是数据库模式设计的新手,所以我想把这个想法扔出去看看,多个数据库是否真的是个好主意。

更新:

如果不清楚:数据库将位于 Android Phone,而不是云端或其他地方。

你的问题让我想起了一些讨论关系数据库和将数据存储为 json 或其他 noSQL 选项的区别的文章。如果不对你想要完成的事情和你可能达到的规模进行一些研究,就很难判断。但是,从维护的角度来看,您的数据库模式及其更改的灵活性将有利于单个数据库实例。您也可以使用多个表。

嗯,这是纯粹的性能问题。您应该知道您的数据库应该有多大,以及您应该将所有数据存储在单独的数据库中时它会大多少——如果这个数量大约是一般数据库的 20%,并且只会减少——使用一个数据库,如果分配 50% 或更多的通用数据库可能会增加 - 您可以考虑单独的数据库。

数据库的一般大小也很重要。现代设备可以相对轻松地处理高达 500mb(约 500 000 行粗线)的数据库。它将处理更多,但需要对 UX 和 UI 和方案进行一些修改,以最大程度地减少调用(分页、索引等)。虽然如果你会 运行 这样的一些弱设备的应用程序它会崩溃。

还了解 SQLite 的工作原理(RAM 中的虚拟表),它高度依赖于应用程序可访问的 RAM 量。最好使用最大 100mb 的数据库。

如您所见,没有单一的方法 - 您必须根据您的应用用例和预测的数据库大小进行选择。

希望这个回答能对您有所帮助。

没有经验法则。 AFAIK 查找时间并不完全取决于条目数。这取决于几个因素,例如但不限于 -

  1. table有多胖
  2. table 索引
  3. 如何存储数据,例如table 中的布尔值 true/false 或字符串 YES/NO 有 300 万条记录
  4. 硬件大小
  5. 主要 key/foreign 关键关系(有点连接到上面的第 1 点)

作为一种通用方法,一种数据库理论是可取的。现在的服务器非常强大,在处理性能优化方面有多种选择,例如 -

  1. 可灵活选择大小的云数据库
  2. 大数据
  3. 内存数据库
  4. SSAS 等分析服务
  5. 可水平扩展的 NoSQL 数据库,例如FireStore

现在,使用一个数据库的最大好处是——您的开发和测试会很快。那是什么意思 ?假设您需要 add/delete/modify 一字段 table。现在,如果您有 10 个不同的数据库,那么您将需要在 10 个不同的地方进行完全相同的更改,然后还要对其进行测试。如果更改频繁,那么您最终可能会编写一个通用脚本。而且这个脚本总是有可能中断,例如数据库更改,补丁更新等等。但是,在一个数据库的情况下,工作量直接是 1/10。另一个好处是数据库 administration/monitoring 很容易,例如添加索引。

几个月前我有一个类似的要求,其中我有一个类似的应用程序(移动+网络)。设置是相似的。不同的公司访问数据。来自特定公司的用户可以查看与 his/her 公司有关的数据。我所做的只是在几乎每个 table 中添加一个指定为 ORGCODE 的列。超过 12 个客户愉快地分享 table 没有任何问题。

免责声明:在不了解您的用例和性能要求的情况下,以上所有内容都非常通用。

我会选择一个数据库——更少的维护和可能出错的东西。 确保其优化和索引