对于具有大量小写和长读的 Rails 前端的 PostgreSQL 集群,最低硬件要求和设置是什么?

kon*_*ung 6 database postgresql database-design ruby-on-rails

背景:

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

申请要求:

远程 API 在 Rails 中完成,提供 web 和 json 接口,将数据存储在 postgresql 集群中。移动应用会发送大量短文~大约每分钟 1 次 * 20,000 次应用安装。大多数阅读将是 - 报告风格,因此更长的阅读时间,这种情况不会经常发生 - 每个用户每天可能一次或两次。所以DB大多需要针对写入进行优化。读取操作始终可以重定向到副本集群/服务器,因为此时它们不需要是实时的。延迟一天就好了。

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

1) 写入非常小:我将发回一些身份验证令牌(如 api 密钥)和很少的数据 - 我们少说话,感谢 1kb 的数据:时间戳和 GPS 坐标,也许最终还有其他东西,但我对此表示怀疑。我不认为有任何大数据,比如图片或类似的东西。它将类似于跑步/慢跑/骑自行车的跟踪应用程序。

2)扩大规模?唔。200,000 - 400,000 个应用程序,如果它真的在前 2 年内起飞的话。

3)数据相当关键。重点是能够在收集数据后运行准确的报告。然而,有两种选择可以缓解这个问题:

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

实际问题详情

所以我的问题是针对处理这种规模应用程序的人,您最初的 PostgreSQL 设置是什么——集群配置和硬件(云)方面,以及扩展的难易程度?


为了防止不相关的建议和答案:

NoSQL 替代品

我考虑过 NoSQL 替代品,如 CouchDB、MongoDB 等。Riak 实际上是赢家,考虑到单人团队很容易管理,而且我只需要 3 台数据库服务器即可拥有一个工作复制集群。但是在规划我的应用程序后,我发现 NoSQL 不适合这个应用程序,它属于 RDBMS 的 .

NoSQL 替代方案和 SQL 选项

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

Ric*_*ton 3

这是个好消息:

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

因此,我们不必处理突发的小写入,我们可以一起批量更新。更重要的是,我们可以偶尔拒绝它们,应用程序可以稍后再试。也很好,我们可能可以按月租而不是按小时租(更便宜!)。

这意味着我们的限制纯粹是最大可持续磁盘 I/O。现在,您提到“云”,这使事情变得复杂。廉价的磁盘 I/O 对于(任何类型的)数据库来说通常很差,而好东西却很昂贵。

一些粗略的计算...

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

现在,您将首先写入 WAL(事务日志),然后写入表,并且您需要允许报告,但这根本不算什么。如果您的磁盘需求增加很多,那么您最好使用几台拥有自己磁盘的托管真实机器。

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