2016-03-15 115 views
0

我已经研究了很多电子商务项目的最佳多租户设置,但找不到合适的答案。我倾向于使用与MySQL或PostgreSQL共享的独立数据库架构设置。所有租户的表格结构都是一样的。我真的很喜欢这种设置,应用程序代码不需要为每个查询提供额外的WHERE子句,所以它非常适合开发者!Postgres电子商务共享架构多租户设置SaaS

现在你还有共享模式方法,这就是我目前使用的方式,但是我觉得这对安全和隔离目的是不利的。我想转到不同的解决方案。

这个应用程序今年将用于+ - 100网店(一个租户),我预计它将增长到成千上万。网上商店的范围从小到大,因此我可以稍后挑选特定商店数据并将其放入其自己的数据库服务器中,这一点非常重要。

由于我没有任何单独架构设置的经验,我想知道这是否会使我受益。走这条路时可能会遇到什么问题?特别是随着表格结构的变化,这是最让我困扰的。在使用PostgreSQL的单独模式方法(我将有100-1000个模式)中使用模式的限制是什么?

回答

1

以下是我采取的

块引用

  1. 当使用同一个表SharedDatabase所有租户,隔离与tenantid列发生的事情是容易的,因为你随时添加一个过滤器, tenantid = LoggedInTenantId [LoggedInTenantId =>在登录时设置]。当你在ORM中有一个基本方法,比如EF [我来自.Net]时,它会自动附加到任何不在代码中的查询。

  2. 当您选择共享模式时,如果有租户[网上商店]之间共享数据的用例,则不可行。否则,如果您的会计师想要审核租户的收集并希望仪表板查看空调统计数据等,那么这将变得不可能

  3. 从扩大的角度来看,您最好去一个单独的如果单个承租人或他们的集合想扩大规模,则每个承租人的数据库。这将比管理模式更好。

考虑您可能对您的产品有用的情况,并在此共享,以便我们可以推进此讨论。

HTH

+0

感谢您对此发表看法!对于仪表板统计信息,我使用的是ElasticSearch,因此部分数据(产品,订单,客户)也存储在那里,因此我不可能收集跨租户的统计信息。我更想知道管理一千种不同的模式有多糟糕。 对于性能我认为单独的模式也好多了,因为每个租户的持久性数据将被分开。不知道如何在共享模式中实现这样的性能?另外备份或移动租户到它自己的更大的数据库似乎更容易与分离的架构设置。 –

+0

Hi @Steffen Brem,请注意,我认为订单表可以扩展到单独的数据库,使用Redis缓存中变化最小的客户配置文件,我们可以通过代码实现目标,并允许缓存和扩展数据库以默认方式工作。请分享你的想法。 – Saravanan