首页 > 解决方案 > 如何使用 Ruby on Rails 处理数据库可伸缩性

问题描述

我正在创建一个管理系统,我想知道“ Ruby on Rails ”如何支持我确保每个客户都拥有独立于其他客户的信息、记录和表格

将所有内容放入数据库并放入客户标识符以在查询中通过此参数提取信息还是自动为每个客户创建数据库更好?

我承认第二种选择更能吸引我……而且我知道将所有内容都放在一个数据库中会损害性能,因为我认为客户和他们的数据将成倍增长

我想知道从长远来看哪个选项更可行。如果最好的选择是创建单独的数据库,我怎么能用 Ruby on Rails 做到一点

标签: ruby-on-railsdatabasepostgresql

解决方案


这两种解决方案都各有利弊,具体取决于您的用例。

在自己的数据库中分离每个客户对于扩展、在不同的数据中心甚至现场运行具有绝对优势。然而,这带来了更高的复杂性。例如,您不能再跨客户查询,您需要为每个客户运行查询并汇总结果。这种方法称为多租户(或分片)。有一个很好的宝石,叫做 Apartment ( https://github.com/influitive/apartment )。

将所有内容保存在一个数据库中可能会更简单,因为它不太复杂,但这实际上取决于您的用例。

编辑

根据问题添加更多信息。

每个客户端架构使用一个数据库有几个原因。

  1. 你有明确分开的租户。如果使用一个数据库方法可能有意义。

  2. 规模。为每个租户提供独立的数据库当然使扩展更容易。

如果 2) 是您想要为每个客户端使用一个 db 方法的主要原因,我强烈建议您不要这样做。您为您的应用程序增加了如此多的复杂性,您可能在未来几年(如果有的话)都不需要。

如果扩展是您主要关心的问题,我建议您阅读Martin Kleppmann 的Designing Data Intensive Applications。但基本上,不要担心最初几年的规模,而是专注于你的产品。


推荐阅读