什么是最低硬件要求&设置一个PostgreSQL集群与Rails前端有很多小写和长读?

时间:2013-08-15 17:09:39

标签: ruby-on-rails database postgresql database-design

背景

试图找出我正在构建的应用程序的最低要求。对于开发人员我非常流利的MySQL和PostgreSQL,但我不是DBA,因此我的问题。 我正在构建一个移动应用程序,它将与远程API通信,并需要确定此API的要求。在这一点上,我这样做是因为爱好项目和移动应用程序是免费的,所以我没有很大的预算 - 并且需要尽可能地确定我的要求。

申请要求:

远程API在Rails中完成,提供web& json接口,用于将数据存储在postgresql集群中。移动应用程序将发送大量短写〜每分钟大约1个* 20,000个应用程序安装。大多数读取都是 - 报告样式,因此读取时间越长,通常不会发生 - 也许每个用户每天一次或两次。因此DB主要需要针对写入进行优化。读取操作始终可以重定向到从属群集/服务器,因为此时它们不需要是实时的。延迟一天是好的。

评论中每个问题的详细信息:

1)写入非常小:我将发回一些身份验证令牌(如api密钥)和非常少的数据 - 我们说的少了谢谢1kb的数据:时间戳和gps坐标,也许是某些东西最终,但我怀疑。我没有想象任何大型数据,如图片或类似的东西。它将类似于跑步/慢跑/自行车跟踪应用程序。

2)扩大规模?嗯。如果它在最初的2年内真正起飞,则最多200,000 - 400,000个应用程序。

3)数据非常关键。重点是能够在收集数据后运行准确的报告。但是,有两种方法可以缓解这个问题:

  • 我可以根据谷歌地图数据和最后已知点(在数据丢失之前,以及重新建立连接之后)估计它。
  • 数据首先保存在sqlite存储中的手机上,每天一次(或在应用启动时),它与服务器/已验证同步。一旦验证/同步成功,手机上的数据就可以旋转(比如可以擦掉1个月以上的任何电话)

实际问题详情

所以我的问题是那些处理这种规模的应用程序的人,你最初的PostgreSQL设置是什么样的 - 集群配置和硬件(云)方面,以及扩展的难易程度是多么容易/难以实现?


防止无关的建议和答案:

NoSQL替代

我考虑过NoSQL替代品,如CouchDB,MongoDB等。 Riak实际上是一个胜利者,考虑到单人团队的管理很容易,我只需要3个数据库服务器就可以拥有一个可以复制的集群。但在映射出我的应用程序之后,我认为NoSQL不适合这个应用程序,它属于RDBMS的领域。

NoSQL替代品& SQL选项

考虑到我不存在的预算,我甚至没有考虑SQL服务器和Oracle等。 MySQL是唯一的另一种替代方案,但我需要hstore,而且现在在PostgreSQL恕我直言中更容易实现复制。

1 个答案:

答案 0 :(得分:2)

这是个好消息:

  

数据首先保存在sqlite存储中的手机上......

所以 - 我们不必处理小批量写入的爆发,我们可以一起批量更新。更重要的是,我们可以偶尔拒绝它们,应用程序可以稍后再试。同样好,我们可能每月租金而不是每小时(更便宜!)。

这意味着我们的限制完全取决于最大可持续磁盘I / O.现在,你提到“云”使事情复杂化。对于(任何类型的)数据库来说,廉价的磁盘I / O通常很差,并且好的东西很贵。

一些封套计算......

20,000个应用程序@ 1kB / min~20 MB / min~333 kB / sec 200,000个应用程序@ 1kB / min~200 MB / min~3.3 MB /秒

现在你将首先写入WAL(事务日志),然后是表格,你需要允许报告,但这根本不是。如果您的磁盘需求增加很多,那么使用具有自己磁盘的几台托管的真实计算机可能会更好。

所以 - 自己编写一个PostgreSQL服务器设置脚本。我发现ansible很容易上手。添加一些测试脚本以模拟不同数量的请求和批量大小。您应该能够启动VM,并运行一批测试,并在每个提供商的几个小时内获得一些实际数据。

相关问题