在Heroku上使用PostgreSQL实现多租户Rails 3应用程序

5
我在Heroku上有一个多租户应用程序(多个账户互相不知道),我不确定如何最好地设计我的数据库。Postgres的模式看起来很棒,但是Heroku无法处理大量的它们。现在,我的Rails应用程序主要提供JSON服务,因为大多数模板都是在客户端渲染的(使用Backbone.js)。因此,我正在考虑转向MongoDB,因为1)每个租户可以获得一个顶级“帐户”文档,并且一切都可以嵌套在下面,2)它的存储格式非常类似于JSON。我们仍处于测试阶段,所以可能会被取消。这些是使用Mongo的有效原因吗?前者甚至是使用Mongo的明智方式吗?如果我坚持使用postgres,所有内容都应属于顶级帐户模型(具有索引)吗?如果是这样,我该如何处理连接?是否可以执行多索引连接(完全是postgres新手)?
我们的一个表格已经有大约6万条目了,但是一个账户可能只有200-1000个,所以我担心在整个表格上进行连接。
非常感谢任何帮助。
更新:
我们最终转移到了VPS(Rackspace Cloud)并实现了Postgres的模式。这次转移让它比在Heroku上运行要快得多,并且我们对服务器有更多的控制。

2
在开发多租户应用时,大家都会将所有内容都放在类似账户表的范围内,这并不是什么新鲜事。这样做更容易处理复制和分片,而不是使用多模式解决方案。至于连接操作,无论如何,连接操作都是昂贵的。 - Maurício Linhares
1
问题中缺乏足够的细节来回答它。仅仅告诉我们你“有一个多租户应用程序”并不足以提供足够的信息来帮助你决定使用哪种数据存储。任何一种都可能是完全适当的。你有多少张表?你的数据有多“关联”? - Dondi Michael Stroma
@MaurícioLinhares 谢谢。所以,你的意思是在每个表中添加一个 account_id 并对它们进行索引? - kmurph79
是的,这通常是这样做的。 - Maurício Linhares
2
这会创建许多额外的索引。现在,对于那些表中的几乎每个字段运行的每个查询都必须通过帐户ID进行过滤,从而为您的索引结构和查询计划增加更多的复杂性和大小。模式避免了所有这些索引的需要,并极大地简化了所有查询。模式是最佳架构,Heroku只需要找到一种解决其备份问题的方法。另一个选择是,不是依赖于主数据库的备份,而是创建一个低功率的跟随者来进行备份。这将提供实时备份。 - brightball
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接