对于我们的系统之一,我们拥有敏感的客户端数据,并将每个客户端的数据存储在单独的数据库中。该系统大约有10-15个客户端。
但是,我们正在开发一个新的系统,它将具有50-100个客户端,也许还会更多。我认为在这种情况下,每个客户端只有一个数据库(存储敏感记录和审核历史记录)可能是不可行的。但是我不知道这是否完全正常,或者是否存在另一种维护安全性的方法。
有什么想法吗?
对于我们的系统之一,我们拥有敏感的客户端数据,并将每个客户端的数据存储在单独的数据库中。该系统大约有10-15个客户端。
但是,我们正在开发一个新的系统,它将具有50-100个客户端,也许还会更多。我认为在这种情况下,每个客户端只有一个数据库(存储敏感记录和审核历史记录)可能是不可行的。但是我不知道这是否完全正常,或者是否存在另一种维护安全性的方法。
有什么想法吗?
Answers:
实际上,管理100或500个数据库与管理5或10个数据库并没有什么不同-您只需要接受自动化并制定可扩展性计划(并且不打算使用每个数据库的高成本功能,例如跨所有镜像客户)。
在我之前的工作中,我们使用了这种体系结构,即使有一些挑战可能是“艰巨的”,我也从未想过将两个客户端合并到一个数据库中。
最大的好处是独立的恢复模型(a
可以是简单的,b
可以是完整的等),可以在不中断其他客户端的情况下恢复到某个时间点(或完全删除)的功能,可以无缝移动大量资源的客户端的功能迁移到自己的存储或完全不同的服务器,而透明性很少(您可以更新配置文件或表来告知应用程序在哪里找到该客户端)。
我在这些帖子中谈到了一些反对意见,和/或如何解决这些问题:
综上所述,我认为我们谁也无法告诉您管理对您不切实际的一点-只要知道您遇到的任何具体挑战,就可以单独询问这些问题。
我建议您阅读Multi-Tenant Data Architecture,该白皮书讨论了您的选择以及优缺点。总而言之,它提供了三个选项:
您现在处于分离的DB阶段,该阶段提供了最佳的分离(租户之间的隔离),但最难管理。当您成长为数以百计的租户时,您将意识到管理100个DB的后勤工作并非易事。考虑备份还原(备份文件,作业,日程表等的位置)。想想如何在数百个数据库中监视和管理文件分配,已使用的磁盘空间以及数据库的增长。想一想在不久的将来有1000个租户的情况下,您的高可用性/灾难可恢复性方案是什么?1000个镜像数据库,1000个日志传送会话?想想如果您的开发团队在6个月内遇到您并说“我知道如何为我们的产品提供这一出色功能,我们将使用事务复制!”,您会怎么说?“当然,让我成立500家出版商,“!不是不可能的可管理数百个DB的,但如果你打算,你最好擦亮你的PowerShell使用的用户界面管理工具,技能和停止现在。
另外,您需要考虑多个(数百个)数据库对性能和成本的影响可衡量:
尽管由于隔离,分离的DB也具有一些优势,主要优势是独立的备份/还原。
像您这样的方案是SQL Azure数据库的理想选择。无需管理磁盘空间,无需提供HA / DR,可扩展到成百上千的DB等。
在我之前的工作中,我们不仅为每个客户端托管一个数据库,而且在大多数情况下,托管的数据库还不止于此!在我离开时,在一个MariaDB集群中运行着4,500多个数据库,在另一个(具有讽刺意味的是,较小的)集群中运行着近7,000个数据库,以及4个“分片”(完全独立的独立Web和数据库服务器,甚至在一个完全独立的数据中心中),每个主机单个MySQL服务器中包含200-500个数据库。该公司仍在快速发展。
总而言之,就是该公司的成功证明了这种架构确实可行。(注意:与通过使用单独的数据库单独获得明显的收益相反,所有数据都是通过三个紧密耦合的应用程序访问的,这些应用程序都使用相同的数据库用户/密码!我怀疑如果每个客户端的性能可能会受到轻微影响有一个单独的用户/密码-但只有一点点。)
根据与系统管理员紧密合作的经验(从技术上讲,我是公司的程序员,但实际上,我是他们拥有的最好的DBA,也是唯一的他们知道如何设置防火墙的人!),与性能相关这些问题归结为并发访问,查询复杂性/时间,索引性能等。换句话说,所有常见的可疑对象以及服务器上的数据库数量都没有明显的作用,这一结论得到了高薪专家的肯定。我们定期咨询的顾问。
最重要的是,您应该将关注点集中在应用程序,基础结构上,而不是您碰巧拥有的数据库数量上。所有其他因素将足以让您忙于解决性能问题和瓶颈。