如何为rails / mysql使用具有相同结构但每个用户具有不同内容的多个数据库

时间:2014-08-22 09:07:43

标签: mysql ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 devise

我知道这听起来有点奇怪,但它正是我想要做的。

我有一个rails应用程序,其中有8个表,其中一个是设计创建的表,名为:partners

其中我存储每个用户。但除此之外,每个表的内容应该是唯一的并且对于每个伙伴都是不同的。我想在认证之后使用一些方法并将数据库设置为db _“#{parentName}”,但我不知道如何继续它。我如何创建和使用具有相同结构的这些不同的数据库?

2 个答案:

答案 0 :(得分:1)

SAAS

您正在查看的是multi tenancy

enter image description here

这基本上意味着您为众多用户提供了一组不同的数据库(不仅仅是数据表)。您通常会拥有一套中央公共"公共"数据(例如用户和选项),然后是一系列"租户"将容纳您需要的所有表格的数据库

Rails多租户才真正实现with PostgreSQL schemas之前:

enter image description here

然而, 希望MYSQL:)


MYSQL多租户

MYSQL(true)多租户的问题有几个问题:

  
      
  1. 只能使用" right"以编程方式创建DataBASE。主机
  2.   
  3. Rails只能支持一种模式 - 这意味着如果你想要"租户" DB,您需要为多个模式创建功能
  4.   
  5. 您需要一种方法来绑定数据库的创建与创建帐户等(可能使用Resque)
  6.   

我们现在实际上已经完成了第一期 - 我们的主机RackSpace实际上是provides an API for its MYSQL database instances。在与他们的一个令人难以置信的开发人员(Evan Light)合作之后,我们设法建立了一个系统,我们可以动态创建MYSQL数据库。完全合法的&程序化:)

下一个问题是我们仍在努力的事情 - 多个模式。这有点棘手,因为Rails似乎依赖于每次执行迁移时在db/schema.rb创建模式。对于真正的多租户,您需要能够为租户数据库以及您的主要数据库处理模式。分贝'第我现在不能为你提供任何资源

最后,您需要能够将它们全部链接在一起。如果您尝试创建数据库"同步"它将高度低效。 - 意味着您在与应用程序相同的流程中处理它。你需要处理它"异步" (在后台),释放您的应用程序的流程。最好使用排队机制,例如Resque

答案 1 :(得分:0)

只需拥有一个数据库,并将用户ID作为每个表中主键的一部分。