【发布时间】:2017-03-17 19:24:52
【问题描述】:
我有一个多租户应用程序的想法,我正在尝试决定是应该使用一个大型数据库还是为每个租户使用单独的数据库。
我什至不知道后者是否可以在 Rails 中使用,或者在 Heroku 上使用 rails。
我也不知道这是个好主意,还是成本过高。
但我想一开始我只是想知道这是否可能。
【问题讨论】:
标签: ruby-on-rails postgresql heroku
我有一个多租户应用程序的想法,我正在尝试决定是应该使用一个大型数据库还是为每个租户使用单独的数据库。
我什至不知道后者是否可以在 Rails 中使用,或者在 Heroku 上使用 rails。
我也不知道这是个好主意,还是成本过高。
但我想一开始我只是想知道这是否可能。
【问题讨论】:
标签: ruby-on-rails postgresql heroku
多租户有多种方法,每种方法各有利弊。 Postgres 有一个很好的特性叫做schemas,这意味着你可以有一个数据库,但里面有多个命名空间。这对于 Rails 来说是一种方便的解决方案,因为 Rails 设计用于仅连接一个数据库。很容易与apartment gem 集成。它根据指定的规则(通常是子域)处理迁移和租户切换。但是这个解决方案有缺点。虽然 Postgres 对模式的数量没有任何限制,但当你有很多时,迁移将需要很长时间。并且备份存在问题。 Heroku 建议使用少于 50 个模式。
如果您想拥有多个物理数据库,那么使用 Rails 有点棘手。有一些 gem 允许连接到多个数据库。最近听说了octoshark gem,但是没用过。
总之,如果您想在不做太多工作的情况下获得良好的隔离,Postgres 模式是不错的选择。在 Heroku 上也将具有成本效益,因为您将只使用一个数据库。但它不会适用于很多租户。多个数据库提供了最好的隔离,但我认为 Rails 中对这种解决方案的支持并不是那么好。而且成本很高,因为您需要为每个租户提供单独的数据库。最后的手段是只使用一个数据库并将所有租户数据的范围设置为tenant_id。在此解决方案中,您需要保证隔离,这需要额外的工作,并且很容易错过应用程序的某些部分。
【讨论】: