根据您上面的描述,我假设您每秒 5,000 次查询完全是读取操作。这本质上就是我们所说的数据仓库用例。您的可用性要求是什么?它必须托管在 AWS 和朋友上,还是您可以购买自己的硬件在内部运行?你的数据是什么样的?使用这些数据的逻辑是什么样的?
您可能会觉得这里确实没有足够的信息来明确回答这个问题,但我至少可以提供一些建议。
首先,如果您的数据相对较小并且查询很简单,请省去一些麻烦,并确保您从 RAM 而不是磁盘进行查询。任何支持内存缓存/表空间的现代 RDBMS 都可以解决问题。Postgres 和 MySQL 都有这方面的特性。在 Postgres 的情况下,请确保您已经适当地调整了内存参数,因为开箱即用的配置旨在运行在相当微薄的硬件上。如果您必须使用 NoSQL 选项,则取决于您的数据结构,Redis 可能是一个不错的选择(它也主要在内存中)。然而,为了说明哪种类型的 NoSQL 可能最适合,我们需要更多地了解您正在查询的数据的结构,以及您正在运行的查询。
如果查询归结为SELECT * FROM table WHERE primary_key = {CONSTANT}
- 不要打扰 NoSQL - 只需使用 RDBMS 并学习如何调整该问题。如果您可以在自己的硬件上运行它,那就更是如此。如果连接数很高,请使用读取从站来平衡负载。
事后编辑(5/7/2013):我之前应该提到的:EC2 是一个非常糟糕的地方来衡量自我管理的数据库节点的性能。除非您付出高昂的代价,否则您的 I/O 性能将非常糟糕。您的选择是为预置的 IOPS 支付大笔费用,将一堆 EBS 卷组成 RAID,或者在将 WAL 同步到 S3 或类似设备的同时依赖临时存储。所有这些选项都很昂贵且难以维护。所有这些选项都有不同程度的性能。
我在最近的一个项目中发现了这一点,所以我切换到了 Rackspace。那里的性能得到了极大的提升,但我注意到当我真的只需要快速 I/O 时,我为 CPU 和 RAM 资源付出了很多。现在我在 Digital Ocean 主持。DO的所有存储都是SSD。与其他产品相比,它们的 CPU 性能有点糟糕,但我非常受 I/O 限制,所以我不在乎。在将 Postgres'random_page_cost
降到 2 之后,我的表现非常好。
故事的寓意:简介,曲调,重复。问自己假设问题并不断验证您的假设。
另一个长期的事实编辑(11/23/2013):作为我在这里描述的示例,查看以下文章以获取使用 MySQL 5.7 和 InnoDB memcached 插件实现 1M QPS 的示例:http ://dimitrik.free.fr/blog/archives/11-01-2013_11-30-2013.html#2013-11-22