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

我试图找出这两种方法中的哪一种更合适。

每个用户的专用数据库

优点:


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


每个用户的单一数据库

优点:


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


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

我希望比我有更多经验的人帮助我找出最好的方法以及由于我的无知而现在无法猜测的所有变量。

最佳答案

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

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

绝对正确,如果您只有一个共享数据库,则备份和汇总报告之类的操作将变得容易得多。

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

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

150个用户并不多。在有付费客户的工作量之前,请不要担心可伸缩性。发生这种情况时,您可以添加MySQL服务器RAM,分区,固态磁盘,复制,内存缓存,分片以及所有其他昂贵和高工作量的内容。如果您在上线之前添加了这些内容,那么上线之前您将花费更长的时间并花更多的钱。不好。

关于mysql - 每个用户的专用数据库与每个用户的单个数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21394150/

10-14 10:37
查看更多