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

Fre*_*ric 1 mysql database saas

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

由于以下原因,我为每个帐户设计了 1 个数据库:

  • 我做了很多个性化,需要为每个帐户添加特定的表列。
  • 更容易管理数据库备份(和重新加载数据!)
  • 风险较小:有时我需要在表上运行 SQL 查询,以防出现错误查询(更新/删除...)的错误,只有一个客户而不是所有客户受到影响。

基本点:我正在转向拥有数百个数据库......

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

谢谢 !

弗雷德里克

Sin*_*lil 5

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

好处:

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

不足之处:

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

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

模式非常适合多租户数据库Link Link

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

您的硬件人员不应该决定您的软件架构。如果他们这样做了,您甚至可能在走出大门之前就朝自己的腿开枪。找一个优秀的高级软件架构师,他们会救你的悲痛,很可能会救你的生意。

我希望这有帮助...

好机会