我/我可以使用多个数据库吗?

时间:2012-04-16 23:28:57

标签: ruby-on-rails database dns

我正在使用Ruby on Rails并设计身份验证。我有一个用户(客户)模型和一个商业模式。我希望用户(客户)通过特定业务注册并属于特定业务。企业有许多用户(客户),但用户只属于一个企业。我最终想让企业能够使用他们自己域名的子域名来对应他们自己的id,但是现在我已经到了那一点,我不知道如何处理它......

老实说,我还在读高中,我不知道所有事情是如何与这样的事情结合在一起的。因此,我计划将这个应用程序授权给企业(已经有一些在我开发这个东西之前已经预付款)。每个企业的数据都需要与其他企业分开。有些企业根本没有域名,所以我必须在我的服务器上使用子域名。有些企业确实有一个网站,所以我想通过他们的业务领域使用子域名。

我现在认为使用多个数据库肯定更好。老实说,我对数据库结构的了解非常有限。我相信可以运行单独的个人应用程序,我一直在想这可能是最好的方式。也许最容易开发/维护?

所以我的问题是运行多个数据库与运行单独的个人应用程序的权衡是什么?我在哪里可以找到有关如何实际执行此操作的更多信息?还有谁能引导我进入正确的方向,如何转发这些领域或我必须做什么?

如果我的问题不够明确,请发表评论......对不起,这太长了哈哈。

2 个答案:

答案 0 :(得分:2)

一旦你走上了多个数据库的道路,你就不能轻易回去,所以你最好有充分的理由去做。除非您遇到严重的扩展问题,否则最好尽可能延迟该决策,而是使用标准关系对数据库进行分区。

Rails可以很容易地执行此操作,因为您可以将范围应用于几乎任何内容。例如,您创建一个Business模型,然后不是直接获取其他对象,而是始终在特定的上下文中执行。在实践中,这看起来像:

@orders = @business.orders.paginated

您可以使用@business使用before_filter模型加载父类的所有“面向业务”控制器的后代,以便不必复制许多不同的控制器。

如果您确实想要拆分数据库,可以通过基于business_id或其他派生关系分离表来实现。

我发现这对大多数应用程序都很有效,并且可以很好地扩展。请记住,扩展的第一步不是共享而是复制,因为拥有许多只读副本可以大大提高读取性能,而不会在内部使应用程序复杂化。

答案 1 :(得分:1)