许多表与许多Dbs用于多站点应用程序

时间:2014-02-20 16:26:34

标签: mysql ruby-on-rails database scalability mariadb

我正在建立一个网站,在不同的公司可以使用Rails或Drupal创建子网站。当每个用户创建一个帐户时,他或她完全独立于应用程序。

但是,对于db,我有两个选择。我可以将所有内容放在一个数据库中,并使用前缀来命名表。例如, client1 user表格为client1_user,其次是client2_user等等。

但根据我应该做出的决定,我不知道。它取决于语言吗?还是技术? MyDb可能是MariaDb或MySql。

1 个答案:

答案 0 :(得分:0)

正如评论中所建议的,您需要的概念称为多租户。这通常不是为每个新租户创建新表,而是拥有一个包含所有租户信息的表,然后在其他表中引用承载连接到租户的对象的租户ID。

让我们举个例子来澄清:

假设您要构建在线商店应用程序。您将创建一个包含所有商家的表格。每个商家都可以使用单独的子域进行识别。还有其他表格,如订单和产品。这些表不是为每个商家创建新的订单/产品表,而是存储所有商家的订单和产品,但是通过商家ID引用他们所属的商家。使用Rails关联可以很容易地在代码中完成。

在商家类中,您将定义与产品的关系     has_many:产品,依赖:: destroy

在产品类中,您将添加     belongs_to:商人

Rails会检查产品表是否有一个merchant_id列,你可以去。

在控制器网站上,您必须确保每个商家只能看到自己的产品,但加载产品如:     @ merchant.products 而不只是显示所有这些。

这就是在Rails应用程序中通常实现多租户的方式。尽管数据在同一个表中的数据库级别上进行组合,但Rails的模型和控制器层负责分离数据并仅允许访问附加到登录帐户的数据。没有必要为每个租户创建新表,这会导致巨大的开销。

你使用什么样的数据库,无论是Postgres,MySQL都不是很重要,因为做这样的事情无论如何都是SQL的核心。