不确定这是否是适合我的查询的组,但我必须确定我要购买什么。我已经做了研究,但还不确定,因为这是我第一次这样做。我计划托管自己的桌面服务器,并决定使用至少有 8 个内核和 32GB RAM 的 XEON 处理器。但我不确定这是否是适合我的家庭服务器。我的应用程序每小时需要处理至少 20,000,000 个 SQL 查询,并且具有需要尽可能快速的关键任务流程。
答案1
您应该考虑一些因素(但您的帖子中没有体现)。这些因素包括:
您需要尽可能多的 RAM — — 理想情况下足够容纳整个数据集在内存中。
如果您要进行大量写入和/或您的数据无法完全放入内存中,则需要尽可能快的磁盘 - 我不知道您的数据集的大小,但 RAIDED PCI-E SSD 是个好主意 - 正如您所说的那样,它是“任务关键型”。是的,将数据库放在 SSD 上是可以的 - 只需每 5 年左右更换一次即可。
您提到了“台式服务器”。我不相信这个术语存在 - 它要么是台式机,要么是工作站,要么是服务器。我猜您指的是台式机箱/外形尺寸的服务器 - 如果是这样的话,我建议使用可以放在侧面的 4u 尺寸的服务器 - 如果您知道如何寻找的话,很容易找到。当然,大多数台式机箱只有 1 个 PSU - 这可能会影响可靠性和正常运行时间 - 关键任务服务器通常有 2 个 PSU,分为 2 个不同的阶段。
大量(较慢的内核)可能比较少的较快内核更好,但这取决于您的数据库,甚至查询类型(例如,Postgres 9.5 不会将单个复杂查询拆分到多个内核 - 而转移到 Postgres 9.6 会这样做,导致某些单个查询的速度接近线性增加,内核更多 - 因此请检查您的数据库)。同样,您应该真正考虑对数据库进行分片,这样瓶颈就会减少,并且您可以根据需要部署额外的服务器。
如果任务至关重要,您还需要考虑复制 - 并且一旦您采用这种方式,让一台服务器执行读写操作,另一台服务器作为只读从属服务器可能有意义(也可能没有意义),并修改您的应用程序以利用这一点。再次 - 我想知道“任务至关重要”是否是描述您的用法的正确词语。
另外,你需要考虑“Meltdown”及其性能。如果为其添加缓解措施,数据库性能可能会下降 20-30%。如果你不缓解它 - 你需要意识到 - 并管理风险(即确保不可能在其上运行任意代码 - 包括确保没有办法进行 SQL 注入攻击)
不管其他人怎么说,如果你的查询足够简单,每秒 5000 个查询是可行的 - 请参阅https://www.percona.com/blog/2017/01/06/millions-queries-per-second-postgresql-and-mysql-peaceful-battle-at-modern-demanding-workloads/