0

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

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

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

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

如果我的问题不够清楚,也请发表评论......对不起,它太长了,哈哈。

4

2 回答 2

2

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

Rails 可以很容易地做到这一点,因为您可以将作用域应用于几乎任何东西。例如,您创建一个业务模型,然后不是直接获取其他对象,而是始终在特定上下文中进行。在实践中,这看起来像:

@orders = @business.orders.paginated

您可以使所有“面向业务的”控制器成为父类的后代,该父类将@business使用 a 加载到正确的模型中before_filter,这样就不必在许多不同的控制器中进行复制。

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

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

于 2012-04-16T23:34:39.450 回答