gpt4 book ai didi

与具有 10M 记录的 MySQL 相比,MongoDB 极其缓慢

转载 作者:可可西里 更新时间:2023-11-01 09:58:20 25 4
gpt4 key购买 nike

我有一个负载相当高的项目,在 MySQL 上运行大约 1000 万条记录,每秒大约有 500 个请求。数据非常独特,缓存命中率只有 3% 左右。每行有大约 10 个字段,其中 2 个被索引。我 99% 的查询使用请求的两个索引字段。

我决定尝试 NoSQL,MongoDB 毫不费力。使用简单的自定义脚本移动数据非常容易。数据库模式保持完全相同,我复制了相同的两个索引字段,它们仍然负责 90% 的请求。然后我决定尝试一下并感到非常震惊:MongoDB 对查询的回答非常非常慢。响应速率从每秒 5 到 10 个请求不等,而 mysql 为 500。

知道为什么会这样吗?正常吗?我是否应该期望 MongoDb 在这种特殊情况下(1000 万条记录,许多具有低缓存命中率的独特请求)胜过 Mysql?我觉得我漏掉了一点。

更新一些规范

我测试的服务器是四核 xeon 和 4GB 内存

MySQL 表是(重命名的字段名称):

  CREATE TABLE `table` (
`recordid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`var1` varchar(200) DEFAULT NULL,
`var2` char(32) DEFAULT NULL,
`var3` bigint(20) unsigned DEFAULT NULL,
`var4` smallint(5) unsigned DEFAULT NULL,
`var5` datetime DEFAULT NULL,
`var6` int(10) unsigned NOT NULL,
`var7` int(10) unsigned NOT NULL,
`var8` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`recordid`),
UNIQUE KEY `recordid_UNIQUE` (`recordid`),
KEY `keyvar7` (`var7`),
KEY `keyvar6` (`var6`)

典型的查询是:从表中选择 var2、var4、var5、var6,其中 var7=xxx 和 var6=yyy

我通过比较使用索引字段和非索引字段的查询,手工验证了 MongoDB 正确复制了相同的索引。

UPDATE2 MongoDB .getIndexes() 回复

  > db.table.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "table.table",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"var6" : 1
},
"ns" : "table.table",
"name" : "var6_1"
},
{
"v" : 1,
"key" : {
"var7" : 1
},
"ns" : "table.table",
"name" : "var7_1"
}
]

最佳答案

MongoDB 不是神奇的查询加速器。您的网站不会仅仅因为您切换到 mongo 就承受 10 倍的负载。

从您的数字来看,我怀疑资源已经饱和。 MySQL 肯定可以做很多超过 500 QPS 的事情。

你知道你的瓶颈是什么吗?我敢打赌,您的 RAM 比需要的要少得多,必须从磁盘中获取数据,并且磁盘会饱和。在这一点上,没有任何数据库技术可以帮助您,除非您得到更多的铁(或删除一些数据)。

至于mongo的性能较差,没有具体的就不好说了。

关于与具有 10M 记录的 MySQL 相比,MongoDB 极其缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com