2017-05-03 43 views
2

我有一个关于数据库和性能的问题,所以让我来解释一下情况。多个数据库,或总是限制查询

要构建的应用程序具有以下设置: 在该组下面有用户的组。 数据/文件位置(用于搜索)估计一个群组可以轻松达到一百万个“搜索”条件。

现在,组可以永远看看对方的数据,用户只能看到属于他们组的数据。

他们唯一应该有的共同点是,有些地方发送错误日志(可能甚至没有必要)。

现在在这种情况下,您是否会为每个组创建一个新的数据库,或者始终使用查询限制您的搜索结果,这会将某些用户组标识考虑在内?

现在我的想法是创建一个新的数据库,因为你不需要限制你的查询,每一次,它会保持搜索结果通过较低(?),但是真正必要或甚至,甚至在超过一百万条记录上,“where groupid = 1”的速度足够快,不会注意到性能下降。

+1

只有这些条件,我会创建一个包含少数几个表的数据库。这实际上是如何设计使用关系数据库的。 –

+0

如果您没有高度逻辑分离的监管/标准/显式客户要求,则将所有数据保存在单个数据库中。 – Shadow

回答

3

这是一个常规的多租户SaaS架构问题,已经详细讨论过,并且解决方案总是根据您的具体情况而有所不同。下面是本次讨论,我将只是因为它的所有链接的,而不是复制粘贴的一个例子是值得一读:Multi-tenant PHP SaaS - Separate DB's for each client, or group them?

此外,我想补充一些高层次的考虑:

  • 对于存储用户数据是否有任何法律要求?一些企业在监管环境中运营,他们不允许将数据存储在共享环境中,这在金融和医疗行业中很常见。
  • 您是否会为所有用户提供相同的安全性(登录方法,数据存储加密),备份/恢复服务,地理位置冗余和正常运行时间保证?
  • 是否有任何用户愿意支付额外的费用来将其数据存储在单独的环境中?
  • 是否有任何用户可能具有与您将提供的标准产品不兼容的要求?如果是的话,你会尽量适应他们?请注意,偶尔会有一些大客户出现并提供大量现金用于特殊待遇。
  • 什么是独立环境?它是单独的数据库,单独的虚拟机,单独的物理机器,还是客户管理的机器?
  • 你的应用程序的哪些部分是每个环境的一部分(硬件配置,网络配置,数据库,源代码,二进制文件,加密证书等)?
  • 是否会有一些重度用户在您的应用程序中产生负载,从而对较小用户的性能产生负面影响?
  • 如果您在一个环境中为所有用户服务,那么您是否有可能在未来为某些客户创建单独的环境?如果是的话,这将影响您放置共享数据的位置,例如配置数据(如税率和汇率数据等)。

我希望这会有所帮助。

+0

谢谢你的回答,它给了我一个很好的见解,说明为什么我们应该有,或者至少支持这些事情,我会讨论选项和原因。 我无法通过搜索找到您链接的线索,也非常感谢您的帮助。 –

+0

不客气,很乐意提供帮助。搜索解决方案的问题是为问题寻找正确的搜索条件,在这种情况下可能并不明显。 – Matty

1

性能不是真正的问题,维护和数据安全性是。如果你有很多数据库,你将需要更多的维护。不仅备份而且连接字符串,修补程序,发布时的模式更新等。多个数据库也表明你也会有多个PHP站点。随着团队数量的增长,这将逐渐变得更加昂贵。

如果您有一个数据库,那么您需要确保每个查询都包含组ID,然后才能运行。

如果您仔细选择索引和约束条件,那么数据库表格可能非常非常大。如果你正在对非常大的表执行联接,那么它会很慢,但是一个简单的查找,你在组列上的索引应该足够快。

如果您要共享一个数据库,您是否曾经将其移出一个组?如果这是可能性,那么现在拆分数据库。如果你要有一个PHP站点,那么我会推荐一个带有组列的单个数据库。