背景:
我正在构建一个应用程序,想要确定我的最低要求。作为开发人员,我对MySQL和PostgreSQL相当熟悉,但我不是DBA,因此有以下问题。 我正在构建一个移动应用程序,将与远程API通信,并需要确定此API的要求。目前,这是我的业余项目,移动应用程序将是免费的,因此我没有大量预算,需要尽可能接近地确定我的要求。
应用需求:
远程API使用Rails提供Web和JSON接口,并将数据存储在postgresql集群中。移动应用程序将发送大量的短写入 ~每分钟约1次* 20,000个应用程序安装。大多数读取都将是报告样式,因此较长的读取并不经常发生-每天每个用户可能一两次。因此,数据库主要需要针对写入进行优化。阅读操作始终可以重定向到副本集群/服务器,因为它们目前不需要实时。一天的延迟可以接受。
更多详细信息请参见评论中的问题:
1)写入非常小:我将返回某种身份验证令牌(例如API密钥),并且只有很少的数据-我们正在谈论不到1kb的数据:时间戳和GPS坐标,可能会有其他内容,但我怀疑。它将类似于跑步/慢跑/骑自行车跟踪应用程序。
2)扩展?嗯。如果在前2年内真的取得成功,则最多有200,000-400,000个应用程序。
3)数据相当关键。一旦收集了数据,整个重点就是能够运行准确的报告。但是,有两种选项可以减轻问题:
- 我可以根据Google地图数据和最后已知点(在连接丢失之前和重新建立连接之后)进行估计。
- 数据首先保存在手机上的sqlite存储器中,每天一次(或在应用程序启动时)与服务器同步/验证。一旦验证/同步成功,手机上的数据就可以轮换(例如任何超过1个月的数据都可以从手机上擦除)
实际问题细节
因此,我的问题是针对处理此规模的应用程序的人:您的初始PostgreSQL设置是什么样的-包括群集配置和硬件(云),以及扩展的难易程度?
为防止无关的建议和答案:
无SQL替代方案
我考虑了像CouchDB、MongoDB等NoSQL替代方案。考虑到Riak易于单人团队管理,并且只需要3个数据库服务器即可拥有工作复制群集,因此Riak实际上胜出了。但是,在映射出我的应用程序后,我发现NoSQL不适合这个应用程序,它属于关系数据库管理系统领域。
NoSQL替代方案和SQL选项
考虑到我没有预算,我甚至没有考虑过SQL Server和Oracle等数据库。MySQL是唯一的其他真正选择,但我需要hstore,并且在我看来,目前在PostgreSQL中实现复制更加容易。