【问题标题】:Is it better to use separate databases in a Rails app instead of a single database?在 Rails 应用程序中使用单独的数据库而不是单个数据库更好吗?
【发布时间】:2012-02-23 10:19:24
【问题描述】:

我的团队正在构建一个应用程序,在一次头脑风暴会议上出现了一个我不确定的问题,所以我想我应该联系 Stack Overflow 社区以获得更多意见。这是它的要点:

  • 我们的应用程序为拥有多个用户的组织创建了一个帐户。这些用户有帖子和 cmets。
  • 最初的数据库设计是为组织提供一个表,然后每个用户将通过组织的id 关联。

其中一位开发人员建议我们为每个组织的帐户使用单独的数据库,以便在组织之间分离数据并提高性能。我从未见过任何 Rails 应用程序以这种方式使用多个数据库,我什至不知道如何在 Rails 中做到这一点。

那么我的问题是:

我们是否会从使用单独的数据库中获得任何好处,或者这是否会给应用程序增加不必要的复杂性?

示例

假设有 100 个组织。每个组织有 100 个用户。每个用户有 100 个帖子和 100 个 cmets。

通过这些表进行查询是否会消耗大量性能,或者拥有 100 个单独的数据库会变得笨拙并导致比其价值更多的问题吗?这会导致迁移问题吗?组织之间的架构是相同的。

我不确定这是否是一个足够清楚的问题,所以如果您需要更多信息,请在回答之前告诉我。

我确实阅读了以下 Stack Overflow 文章,但它们确实没有帮助我做出这个决定。

【问题讨论】:

  • 您可以考虑为您的每个客户运行您的整个应用的唯一实例,包括数据库。但是您绝对不应该出于“组织”目的将一个应用程序的数据拆分到多个数据库中。
  • 这是个好主意。由于这是我们在 Rails 中的第一个主要应用程序开发人员,我们仍在学习设置这种东西的最佳方法。我不完全确定如何运行单独的应用程序实例,但我会研究一下。谢谢!
  • 如果您应该将每个组织的数据与其他组织隔离,请查看标记为“多租户”的 SO 问题。另见this SO answer

标签: ruby-on-rails database-design


【解决方案1】:

您可以对数据库进行分片,也可以使用各种 gem,但根据我的观点,您无需为您的应用创建单独的数据库,但这取决于您,您可以通过各种方式提高数据库性能

【讨论】:

  • 我看到一些提到分片的宝石。这对我来说是一个新概念,我需要做更多的研发来确定这是否对我们有用。
【解决方案2】:

不要这样做。它只会增加一定程度的不必要的复杂性。

在问题成为问题之前不要针对问题进行优化。如果您的应用程序达到数据库性能成为巨大瓶颈的程度,那么请解决该问题。现在,专注于编写良好、快速的查询

37 Signals 刚刚发布了this article,讲述了他们如何通过良好的硬件设法避免分片和相关的系统管理开销。

【讨论】:

  • 这是我的看法。我认为当您甚至没有可以测试的应用程序时,考虑边缘情况的性能问题有点出格。我很感激您的意见,并且可能会坚持使用单个数据库并在(如果)我们达到它时跨越性能桥梁。
猜你喜欢
  • 1970-01-01
  • 2018-06-25
  • 2021-08-21
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
相关资源
最近更新 更多