背景:
试图找出我正在构建的应用程序的最低要求。对于开发人员来说,我对 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 恕我直言中更容易实现。