6

背景:

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

申请要求:

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

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

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 Server 和 Oracle 等。MySQL 是唯一其他真正的替代方案,但我需要 hstore,并且复制现在在 PostgreSQL 恕我直言中更容易实现。

4

1 回答 1

3

这是个好消息:

数据首先保存在手机上的 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/sec

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

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

于 2013-08-16T07:32:10.430 回答