多个数据库,或始终限制查询

时间:2017-05-03 12:30:36

标签: php mysql database performance

我对数据库和表演有疑问,请让我解释一下情况。

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

现在,群组可以 从不 查看彼此的数据,用户只能查看属于其群组的数据。

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

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

现在我的想法是创建一个新的数据库,因为你不需要每次限制你的查询,它会保持结果搜索较低的(?),但这是非常必要的,甚至是超过一百万条记录,a"其中groupid = 1"足够快,不会发现性能下降。

2 个答案:

答案 0 :(得分:3)

这是常规的多租户SaaS架构问题,已经详细讨论过,解决方案总是根据您自己的情况而有所不同。以下是此讨论的一个示例,我将链接到而不是复制粘贴,因为所有这些都值得阅读:Multi-tenant PHP SaaS - Separate DB's for each client, or group them?

除此之外,我想补充一些更高层次的考虑因素:

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

我希望这会有所帮助。

答案 1 :(得分:1)

性能不是您的问题,维护和数据安全性。如果您有很多数据库,那么您将需要维护更多数据库。不仅是备份,还包括连接字符串,补丁,发布时的架构更新等。多个数据库也表明您将拥有多个PHP站点。随着团体数量的增加,这将逐渐变得更加昂贵。

如果您有一个数据库,那么您需要确保每个查询在运行之前都包含组ID。

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

如果你要共享一个数据库,你会不会移动一个组?如果有可能,那么现在拆分数据库。如果您要拥有一个PHP站点,那么我建议使用一个具有组列的单个数据库。