我正在做一个小型研究项目,目前作为 ec2 上的一个实例运行,我希望弄清楚我是否走在正确的道路上。我们和其他一千人一样,正在利用一些 Twitter 流媒体来收集一些数据来取乐,而我的数据库似乎无法跟上,查询似乎需要很长时间。我不是专业的 DBA,所以我只在这里转储一些信息,并在需要时添加更多信息。
系统规格:
ec2 xl,15 GB 内存
ebs:4 个 100 gb 驱动器,raid 0。
我们获得的流是每分钟大约 10k 个插入。
3 个主表,我们正在跟踪的用户当前大约有 2600 万行。
对于这种硬件来说,插入数量是否太多了?是否应该考虑一些开销较少的东西,比如 mongodb?
答案1
@Gnanam 的链接给出了一些很好的建议,特别是这个工作设置的描述。我认为没有理由避免使用 EBS,但将 EBS 卷视为真实服务器中的单个硬盘:容易发生故障。因此,您需要一个具有良好抗故障能力的 RAID 级别,因此不是RAID 0。考虑到您的要求,您需要一个写入速度也很快的 RAID 级别。因此,跨 6-10 个卷的 RAID 10 似乎是最佳起点。
至于实际性能,这将取决于您的索引要求以及您插入的数据的大小和类型。AWS 的优点在于,找出某个配置的性能相对便宜。因此,您需要做的是想出一些示例数据和方法来模拟您尝试处理的传入提要(例如,一个脚本,每次插入一条记录,并每 X 行写入一个带有时间戳的日志语句)。如果示例数据随着时间的推移而重复,这可能没问题,但请确保您的脚本至少可以运行一个小时或更长时间。
现在,使用快照或亚马逊的新云的形成服务以生成一些可靠的可重现的起点,并测量更改配置时的性能变化(并且随着时间的推移也很重要)。您可能希望加入单卷和 RAID5 配置以进行比较。
答案2
就 Amazon EC2/EBS 基础设施上的 PostgreSQL 性能而言,这可能对您有所帮助: EC2/EBS 上的 Postgresql 性能