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

6

背景:

我正在构建一个应用程序,想要确定我的最低要求。作为开发人员,我对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中实现复制更加容易。


以下是三个关键问题。1.每次写入的大小有多大-1kB,1MB?2.您希望使用起始设置扩展到多高?20万个应用程序,200万个?3.数据有多重要-如果您的应用程序(a)无法访问服务器或(b)写入后丢失了某些内容,会发生什么。 - Richard Huxton
@RichardHuxton,请看一下我的问题,我添加了你要求的细节。谢谢! - konung
1个回答

3

这是个好消息:

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

因此,我们不必应对大量小写入的问题,可以批量更新。更重要的是,我们可以偶尔拒绝它们,应用程序稍后可以再尝试。另外,我们可能可以按月租赁而不是按小时(更便宜!)。

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

一些粗略的计算...

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

现在,您将首先写入WAL(事务日志),然后是表格,并且您需要允许报告,但那并不多。如果您的磁盘需求增加了很多,那么最好使用一对具有自己磁盘的托管实际机器。

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


谢谢Richard。感谢你的指点!对于我的设置,您建议我选择更多的RAM还是更好的磁盘I/O?换句话说,考虑到预算限制,我的钱花在SSD硬盘上还是更多的RAM上会更划算?我可以用大约60-80美元的价格购买带有SSD的不错VPS,或者我应该购买带有更大RAID 10附加存储(SATA)和更多RAM的VPS?什么会更有利于我的吞吐量?(带宽不是问题-我正在考虑的主机位于达拉斯或密歇根数据中心,拥有大型管道和慷慨的允许额度) - konung
1
这将取决于您的报告。您需要足够的RAM来保存索引以正确过滤报告。如果您计划长期保存数据,我猜您会想要真正的硬盘-至少允许存储原始数据的3倍空间,如果有大量索引,则可能需要5-10倍的空间。 - Richard Huxton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接