ruby-on-rails - 如何使用 Ruby on Rails 处理数据库可伸缩性
问题描述
我正在创建一个管理系统,我想知道“ Ruby on Rails ”如何支持我确保每个客户都拥有独立于其他客户的信息、记录和表格。
将所有内容放入数据库并放入客户标识符以在查询中通过此参数提取信息还是自动为每个客户创建数据库更好?
我承认第二种选择更能吸引我……而且我知道将所有内容都放在一个数据库中会损害性能,因为我认为客户和他们的数据将成倍增长!
我想知道从长远来看哪个选项更可行。如果最好的选择是创建单独的数据库,我怎么能用 Ruby on Rails 做到这一点?
解决方案
这两种解决方案都各有利弊,具体取决于您的用例。
在自己的数据库中分离每个客户对于扩展、在不同的数据中心甚至现场运行具有绝对优势。然而,这带来了更高的复杂性。例如,您不能再跨客户查询,您需要为每个客户运行查询并汇总结果。这种方法称为多租户(或分片)。有一个很好的宝石,叫做 Apartment ( https://github.com/influitive/apartment )。
将所有内容保存在一个数据库中可能会更简单,因为它不太复杂,但这实际上取决于您的用例。
编辑
根据问题添加更多信息。
每个客户端架构使用一个数据库有几个原因。
你有明确分开的租户。如果使用一个数据库方法可能有意义。
规模。为每个租户提供独立的数据库当然使扩展更容易。
如果 2) 是您想要为每个客户端使用一个 db 方法的主要原因,我强烈建议您不要这样做。您为您的应用程序增加了如此多的复杂性,您可能在未来几年(如果有的话)都不需要。
如果扩展是您主要关心的问题,我建议您阅读Martin Kleppmann 的Designing Data Intensive Applications。但基本上,不要担心最初几年的规模,而是专注于你的产品。
推荐阅读
- python - 为什么我的 csv 文件只写一行?
- flutter - 权限处理程序问题
- excel - 如何使用 vba 从其他点参考参考选择特定范围?
- google-chrome-extension - 使用 AAC 编码的 WebRTC 录制
- python - 从网络抓取中搜索文本并将接下来的 4 行转换为 python 数据框
- python - IP 地址重复连接清理(数据帧)
- jenkins - 如何限制 Jenkins 用户使用 Jenkins RoleBasedAuthorizationStrategy 进行生产部署?
- c# - 在 Entity Framework Core 中为没有显式外键的表添加自定义导航属性
- kotlin - 在 Kotlin 中,如何创建一个 lambda 列表,其中每个 lambda 的类型为 (Int) -> List?我收到解构声明错误
- mongodb - 向数组中添加元素,如果存在则不添加,如果存在则更新