关于体系结构:SaaS数据库设计-多个数据库? 分裂?

关于体系结构:SaaS数据库设计-多个数据库? 分裂?

SaaS database design - Multiple Databases? Split?

我已经看到以许多不同的方式托管SaaS应用程序。 在多个数据库之间拆分功能和模块是一个好主意吗? 例如,将诸如User表之类放在一个DB上,将特定于功能/应用程序的表放在另一个DB上,也许将其他常见的共享表放在另一个DB中?


从一个数据库开始。在项目需要时拆分数据/功能。

这是我们可以从LinkedIn获得的知识:

  • 单个数据库不起作用
  • 参照完整性将无法实现
  • 任何数据丢失都是一个问题
  • 即使效果适中,缓存也不错
  • 永远不要低估增长轨迹

资源:

LinkedIn架构

LinkedIn通讯架构


高可伸缩性是用于扩展SaaS应用程序的好博客。如前所述,按照您的建议在数据库之间拆分表通常不是一个好主意。但是类似的概念是分片,即您保留相同(或相似)架构,但将数据拆分到多个服务器上。例如,用户1-5000在服务器1上,用户5000-10000在服务器2上。根据您的应用程序使用的查询,这可能是一种有效的扩展方式。


对于SaaS应用程序,您将多个数据库用于多个租户,但通常不按模块拆分它。

这是我在SaaS应用程序设计中看到的最常见的模型。将为您添加到应用程序中的每个租户复制基本架构。


拥有单个数据库最有利于数据完整性,因为这样便可以使用外键。如果将数据拆分到多个数据库中,则无法拥有这种内置的数据完整性。如果您的数据不相关,这不是问题,但是如果相关,则您的一个数据库可能包含与另一个数据库不一致的数据。在这种情况下,您将需要编写一些代码来定期扫描数据库中的不一致数据,以便您可以适当地处理它。

但是,如果您需要站点/应用程序具有高度可扩展性(例如,互联网规模),则可能需要多个数据库。例如,您可以将每个数据库托管在不同的物理服务器上。


除非您看到有力的证据表明有必要,否则按功能拆分数据库可能不是一个好主意。通常,您可能需要在单个事务中更新两个数据库-分布式事务更难处理。此外,如果需要拆分数据库,则可以使用分片。


为什么要使用数据库?

我认为使用像Hadoop,Voldemort(由LinkedIn开发和使用的project-voldemort.com)这样的分布式存储系统是个好主意。

我认为db适用于诸如money操作之类的敏感数据,但是对于其他所有内容,您都可以使用分布式存储。


有多种方法可以实现它,但是多租户问题比数据模型更深。我不喜欢插入产品,但是请到我所在的公司Apprenda来查看SaaSGrid。我们是一个云操作系统,允许您编写单个租户SOA应用程序(随意使用NHibernate进行数据访问)并自动注入多租户进入您的应用。发布应用程序时,您可以执行诸如选择数据模型(隔离数据库或共享数据库)之类的操作,并且SaaSGrid将进行相应部署,并且您的应用程序将运行而无需任何代码更改-就像编写单个租户一样编写代码!


问自己:将所有内容移到单独的数据库中会得到什么?

我的猜测是管理方面的很多痛苦。我个人更希望将所有内容都放在一个数据库中,如果您遇到无法由单个数据库解决的问题,则可以将数据迁移到多个数据库中。


保持其自然的设计(根据需要尽可能多地进行规格化,而根据需要减少规格化)。将数据库模型分成其模块,并通过在数据前面拥有服务(拥有数据)来牢记面向服务的原则。


推荐阅读

    通过备份记录获得数据库的增长

    通过备份记录获得数据库的增长,,通常你想知道数据库是否正在增长,以及它增长了多少,可能比较数据库中每个历史时期的大小。 但是我们怎样才

    atsl电脑板故障|atsl车身控制模块故障

    atsl电脑板故障|atsl车身控制模块故障,atsl电脑板故障,1、2机械故障通过维修更换内部机械零件,可以解决机械故障。2、电路的故障有保险丝烧

    未知软件异常应用程序错误解决方案

    未知软件异常应用程序错误解决方案,,我有很多朋友的电脑未知软件异常应用程序错误的问题,对于异常未知的软件异常中的应用一般提示(0xc00000

    金蝶eas固定资产模块

    金蝶eas固定资产模块,,1.金蝶EAS8O版本中固定资产模块中变更如何操作路径:固定资产管理-固定资产管理-业务处理-固定资产变更步骤:1、在变更

    小米手机安装的应用程序包在哪里

    小米手机安装的应用程序包在哪里,,问题: 下载小米手机系统的安装文件在哪里 答案uff1a 下载应用程序包位置:SD卡>下载。 (摘自:小米手册:米

    PostgreSQL数据库修改sql表的方法汇总

    PostgreSQL数据库修改sql表的方法汇总,字段,默认值, 一,修改表 PostgreSQL 提供了一族命令用于修改现有表。 可以实现: 增加字段, 删除字段,

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法