saas应用程序的最佳数据库模型(每个帐户1分贝VS每个人1分贝)

时间:2015-07-02 22:10:34

标签: mysql database saas

小问题,我正在开发一个saas软件(erp)。

我为每个帐户设计了一个数据库,原因如下:

  • 我进行了大量的个性化设置,需要为每个帐户添加特定的表格列。
  • 更容易管理数据库备份(并重新加载数据!)
  • 风险较小:有时我需要在表上运行SQL查询,如果查询错误(更新/删除...)错误,只有一个客户受影响而不是全部。

基点:我转而拥有数百个数据库......

我雇用一家公司来管理我的服务器,他们说最好只有一个数据库,只有几个表,并将所有数据放在同一个表中,列为{{{ 1}}。我对这些话感到非常惊讶,所以我想知道......你的想法是什么?

谢谢!

弗雷德里克

1 个答案:

答案 0 :(得分:4)

我正在处理的当前环境中,我们处理来自众多客户的数百万条记录。我们的解决方案是使用 Schema 来隔离每个客户。模式允许您在单个数据库内将客户端分区为单独的虚拟数据库。每个模式都有一个应用程序表的精确副本。

好处:

  • 隔离的客户数据
  • 可以轻松备份,导出或删除单个客户端的数据
  • 编程仍然相同,但您必须在db调用
  • 之前选择模式
  • 将客户端移动到另一个数据库或独立服务器要容易得多
  • 每个客户端添加特定表格更容易(见下文)
  • 运行数据库的单个实例
  • 调整数据库会影响所有租户

缺点:

  • 除非您正确管理共享架构,否则您可以复制数据
  • 每个架构都会重复迁移
  • 您必须记住在db调用
  • 之前选择模式
  • 很难添加许多底片...我猜我可能有偏见。

添加特定表: 如果这是SAAS而不是自定义软件,为什么要添加客户特定表?最好使用带有Hstore field的Postgres数据库,并存储尽可能多的可搜索数据。

架构非常适合多租户数据库Link Link

我告诉你的很多内容取决于你的软件堆栈,开发人员的能力以及你选择的后端数据库(你忽略了所有这些)

您的硬件人员不应该决定您的软件架构。如果他们这样做,你可能会在你走出大门之前把自己射中腿。找一个优秀的高级软件架构师,他们将为您节省的悲痛,可能会挽救您的业务。

我希望这会有所帮助......

Bonne Chance