为每个用户提供每个用户与单个数据库的专用数据库

时间:2014-01-27 23:46:15

标签: mysql database database-design

我将很快开发一个大型cms,用户可以在其中配置管理新闻,产品,服务以及更多有关其公司的网站。 想想没有电子商务部分的shopify(至少现在)。 rdbms是MySQL,用户群大约是150(可能更大)。

我正在试图弄清楚这两种方法中的哪一种更适合。

每个用户的专用数据库

优点:

  • 性能(以及可能的未来分片?):是否只使用您的数据查询较小的数据库比查询每个用户数据的巨型数据库更好?
  • 为用户轻松“导出我的数据”:我可以简单地转储自己的数据库,而无需获取所有数据并将其放入一些大型编码的逻辑数据结构中

每个用户的单个数据库

优点:

  • 减少一般开销
  • 统计信息:只需要一个数据库来查询以获取和聚合我需要的任何内容
  • 备份:一次转储(不确定这个,因为我没有集群转储的经验)

你会选择哪种方式?我不认为shopify为任何注册的用户创建了专用数据库......或者他们可能做到了?

我希望比我更有经验的人帮助我找出最好的方法以及我现在无法猜出的所有变量,因为我的无知。

1 个答案:

答案 0 :(得分:2)

听起来您正在开发一个软件即服务托管系统,而不是分发给客户的软件包,以便他们在自己的服务器上运行。在这种情况下,一般情况下,如果您为处理多个用户的单个数据库设计服务,您将更容易开发和管理服务。

您将能够使用数据操作语言(DML)而不是数据定义语言(DDL)向系统添加新用户。也就是说,您将为新用户插入行而不是创建表。当你上线时,这将使你的生活变得更轻松。

如果您拥有一个共享数据库,那么备份和汇总报告等内容会更加容易。

不要过分担心用户数据导出功能。无论如何,你必须为这些功能开发软件;进行导出时,用户进行过滤并不难。

但是你应该考虑单数据库方法的缺点:如果你的部分要求是隐藏各种用户的存在或数据,你必须非常小心地在开发中这样做。您的用户是否会成为彼此的竞争对手?这可能很棘手。您需要信任您的内部管理员和支持团队,以避免错误地(或故意地)将一个用户的数据泄露给另一个用户。对于每个用户使用单独的数据库,您在该区域的风险较小。

150个用户并不多。在您有付费客户的工作量之前,不要担心可扩展性。当发生这种情况时,您可以添加MySQL服务器RAM,分区,固态磁盘,复制,memcached,分片以及所有其他昂贵且高工作负载的东西。如果你在上线之前添加这些东西,你就会花更长的时间在上线之前赚更多的钱。不好。