每个客户端与一个数据库的多个数据库的实用性


Practicality of multiple databases per client vs one database

我将尝试使它尽可能简短,同时涵盖所有要点 - 我目前是一名PHP/MySQL开发人员。我和一个朋友有一个移动应用程序的想法,我们将开始开发它。

我并不是说它会很棒,但如果它流行起来,我们将拥有大量数据。

例如,我们有"客户",因为没有更好的术语,他们会列出100-250,000个"产品"。假设最好,我们可以有数百个客户。

客户端将通过Web界面编辑数据,移动界面只会调用Web服务器并返回JSON(可能)。

我是一个低级的CMS开发型人,所以我不确定如何处理这个问题。我的问题或多或少与性能有关;我在 MySQL 表中见过的最多的是 340k,而且它已经有点慢了(当然它也不是最好的服务器)。

我只是无法理解一个有 4000 万行(并且有可能持续增长)运行良好的表。

我的计划是拥有一个"核心"数据库,其中包含

"真实"数据库的名称,因此用户将进入并尝试访问客户的数据,它将转到核心数据库并找出从哪个数据库获取信息。我不关心数据分离或数据安全(这不是私人信息)

是的,这是可能的,我的公司做到了。 不过,我当然不会说它很聪明。 我们有一个SAAS营销自动化系统。 一些客户的数据库有100万+条记录。 我们处理第二个"通用"数据库,该数据库有一个"履行"表,用于跟踪电子邮件,信件,电话等,其中包含超过400万条记录,以及许多其他非常大的共享表。 通过适当的索引、优化、维护单独的仅数据库服务器以及可能的集群(我们还不必这样做),您可以处理大量数据......在许多情况下,那些认为它只能处理几十万条记录的人以竞争产品为生。 如果您仍然怀疑它是否有效,请考虑根据 MySQL 的集群指标,一个 8 个服务器集群每秒可以处理 250 万次更新。 一点也不寒酸.....

使用两个数据库的问题是处理多个连接。 很难吗? 不,不是真的。 您可以创建不同的对象,并根据所需的数据库引用连接类。 在我们的例子中,我们点击主数据库的公司类来推断客户端数据库名称,然后基于该名称构建第二个连接。 但是,当您来回处理这些连接时,您可能会遇到需要额外调试的错误。 这不仅仅是"我的查询有效吗?",而是"我真的得到了正确的数据库连接吗?" 在我们的例子中,丢弃的会话可能会导致触发各种PDO错误,因为系统无法再跟踪要访问的客户端数据库。 另外,从可维护性的角度来看,试图将表结构更新推送到 100 个不同的实时数据库是一个可怕的过程。 是的,它可以自动化。 但是一个失误,你就把很多人打倒了,为自己做了大量的额外工作。 现在,计算处理连接和推送更新所需的额外开发和测试。这将是你衡量它是否值得的标准。

我的建议? 找到允许您将两台计算机放在同一本地网络上的主机。 我们选择了Linode,但您使用谁无关紧要。 从专用数据库服务器开始,提前计划在必要时进行群集。 将所有内容保存在一个数据库中,虔诚地索引和优化。 最后,找一个非常好的DB人,对他好。 有了这么多数据,一个优秀的DBA将是必须的。