Ruby on rails Rails web app:您是否为每个打开的帐户创建单独的数据库?

Ruby on rails Rails web app:您是否为每个打开的帐户创建单独的数据库?,ruby-on-rails,database,account,Ruby On Rails,Database,Account,我即将完成构建一个简单的基于订阅的支持票证Web应用程序。我正在设置授权。但由于这将是我自己的网络应用程序,我将部署它,我想知道这一点 您是否为每个打开的帐户创建单独的数据库 假设您有此支持票证Web应用程序。您只有一个帐户所有者。帐户所有者可以设置可以响应支持票证的代理。此外,还有客户角色打开支持通知单 如您所见,数据库将包含用户、支持票证等 最好的方式是什么 1) 为整个应用程序创建一个数据库?这样,每次有人注册时,所有内容都会与其他票证和用户数据以及其他内容一起添加到同一数据库中,或者 2

我即将完成构建一个简单的基于订阅的支持票证Web应用程序。我正在设置授权。但由于这将是我自己的网络应用程序,我将部署它,我想知道这一点

您是否为每个打开的帐户创建单独的数据库

假设您有此支持票证Web应用程序。您只有一个帐户所有者。帐户所有者可以设置可以响应支持票证的代理。此外,还有客户角色打开支持通知单

如您所见,数据库将包含用户、支持票证等

最好的方式是什么

1) 为整个应用程序创建一个数据库?这样,每次有人注册时,所有内容都会与其他票证和用户数据以及其他内容一起添加到同一数据库中,或者

2) 每次有人注册时,为每个帐户订阅创建一个单独的数据库


我认为,出于安全和数据完整性的目的,选项2可能是最佳选择。如果是这样,您是如何着手解决这个问题的?

听起来您想要的是多租户:

多租户是指软件体系结构中的一个原则,其中 该软件的单个实例在服务器上运行,为多个服务器提供服务 客户组织(租户)。多租户与多租户形成对比 多实例体系结构,其中独立的软件实例(或 硬件系统)是为不同的客户组织设置的。具有 一个多租户体系结构,一个软件应用程序被设计为 虚拟划分其数据和配置,以及每个客户机 组织使用自定义的虚拟应用程序实例。 -

这篇文章虽然有点过时,但它是我将如何着手做这件事的总体思路。它干净、高效,可以避免编写不需要的代码。

您应该选择选项1。第二个选项(几乎(可能有些情况下它是好的,但我现在找不到)从来都不是一个选项

您在安全性方面是正确的(从某种意义上讲),但它也会产生许多其他问题,您必须考虑这些问题

  • 为每个用户使用不同的数据库意味着对于每个请求(记住,HTTP是无状态的),您必须打开到数据库的新连接,执行需要执行的操作,然后再次关闭连接,而不是使用Rails中的连接池。这对性能影响很大

  • 数据库越多,管理就越麻烦。此外,在一台服务器上拥有多个数据库确实需要比一个更大的数据库更多的资源

  • 您必须绕过Rails中的整个连接处理,因为每个应用程序通常只有一个数据库。更改特定模型的数据库很容易,但它会增加一些可能出错的地方

  • Rails确实具有很好的功能,可以在同一个数据库中对分离的数据进行范围界定和处理,只适用于您提到的那种用例


  • 看看瑞安·贝茨的坎坎。它是一个伟大的授权宝石,可以与“角色”一起使用