在 AWS 中运行 MongoDB 的最优化方法是什么?我得到了一些较慢的磁盘 i/o 基准测试(我知道这是 EC2 上的常态)。大型 ec2 实例是我最好的选择吗?有没有办法获得更好的磁盘读取?
答案1
如果整个数据库可以装入内存,MongoDB 的性能最佳 - 因此可能需要考虑使用高内存实例,特别是当您的应用程序读取量很大时(良好的索引也会有所帮助)。
MongoDB 使用内存映射文件 - 因此它在内存中存储的内容和写入磁盘的内容方面相当高效。索引具有优先级,并且应始终位于内存中(如果索引无法装入内存,则性能影响很大)。
作为一般准则,您应尝试最小化写入密集型应用程序的索引(因为每次写入都需要对索引进行额外写入)。读取密集型应用程序应在经常访问的字段上使用索引。
其次,各种实例类具有不同的“I/O 性能” – 大型实例类具有“高”I/O 性能。
最后,您可以通过将 EBS 卷设置为 RAID 来提高其读/写性能。使用 可以相当轻松地实现这一点mdadm
。
您可以使用检查磁盘访问iostat
(查看磁盘上发生了多少次读取/写入)。从 MongoDB 方面来看,db.serverStatus()
在 mongo shell 中使用,以获取相关数据(例如,mem
部分描述内存使用情况,而部分backgroundFlushing
描述对磁盘的写入)。
对于与查询应用程序位于同一台机器上的小型读取密集型数据库,所有适合内存的实例大小(可能除了 t1.micro)应该基本相同(因为所需的 I/O 很少)。对于写入密集型应用程序,I/O 成为一个更重要的考虑因素。