Mongodb 500万和1.5亿网页的Mongo dbs真的很慢

Mongodb 500万和1.5亿网页的Mongo dbs真的很慢,mongodb,Mongodb,我正在mongodb中存储一组网页,大约1.5亿个网页。每页大小不同。我想做的唯一一个事务是使用页面id(而不是mongodb默认id)检索页面。然而,要得到结果需要很长时间,而且我还没有检索到任何文档。但是,使用db.collection.findOne()非常有效。因此,我为500万个网页的子集编制了索引,以便进行测试和修复。当对该dbdb.collection.find(“id”:“aw-000”)发出查询时,获取文档需要4分钟或更长时间 我尝试了db.runCommand({compac

我正在mongodb中存储一组网页,大约1.5亿个网页。每页大小不同。我想做的唯一一个事务是使用页面id(而不是mongodb默认id)检索页面。然而,要得到结果需要很长时间,而且我还没有检索到任何文档。但是,使用
db.collection.findOne()
非常有效。因此,我为500万个网页的子集编制了索引,以便进行测试和修复。当对该db
db.collection.find(“id”:“aw-000”)
发出查询时,获取文档需要4分钟或更长时间

我尝试了
db.runCommand({compact:'collection'})
db.runCommand({compact:'collection'})
m,但都没有用

当我检查
var/log/mongodb/mongod.log
下的日志时(应该包含超过100ms的查询),我发现:

655163:2017-07-16T14:05:37.231+0300 I COMMAND  [ftdc] serverStatus was very slow: { after basic: 0, after asserts: 0, after connections: 0, after extra_info: 310, after globalLock: 310, after locks: 310, after network: 310, after opcounters: 310, after opcountersRepl: 310, after storageEngine: 310, after tcmalloc: 310, after wiredTiger: 310, at end: 1220 }
然而,我不知道如何从这些日志中获益


有没有办法让我的数据库更高效?

正如尼尔·伦恩在上面的评论中指出的那样。我发现最简单的解决方案是从头开始创建db,同时使用
\u id
作为我的id字段名,而不是
“id”
<代码>\u id默认情况下有一个索引,针对该索引发出的唯一查询类型是按id检索

因此,程序(用于创建索引的任何程序)将按如下方式插入对象:

db.collection.insert( { _id: "aw-000", page: "...", .... } )
而不是:

db.collection.insert( { id: "aw-000", page: "...", .... } )

正如Neil Lunn在上述评论中指出的那样。我发现最简单的解决方案是从头开始创建db,同时使用
\u id
作为我的id字段名,而不是
“id”
<代码>\u id默认情况下有一个索引,针对该索引发出的唯一查询类型是按id检索

因此,程序(用于创建索引的任何程序)将按如下方式插入对象:

db.collection.insert( { _id: "aw-000", page: "...", .... } )
而不是:

db.collection.insert( { id: "aw-000", page: "...", .... } )

你有没有关于
id
的索引?或者你有没有想过向
\u id
提供你自己的“唯一值”?因为没有任何东西表明它“必须”包含
ObjectId
。当然,现在使用它需要重写整个集合。但这应该是一个简单的聚合管道,包含
$project
$out
。但听起来你基本上忘记添加索引了。@JohnnyHK如果我只需要使用我自己的id字段从db检索文档,你会建议什么类型的索引。实际上,我为自己的id字段创建了唯一索引,但这并没有提高查询响应时间。我阅读了文档,但他们不推荐任何东西。@Neil Lunn如果我理解正确,你的意思是我不必添加名为id的属性,因为mongodb有名为_id的默认属性。为此,我认为这取决于我使用的应用程序和数据;在我的例子中,我使用了我自己的id,因为它反映了我对每个网页的抓取,我的团队开发的应用程序都使用了我自己的id。你有关于
id
的索引吗?或者你有没有想过向
id
提供你自己的“独特价值”?因为没有任何东西表明它“必须”包含
ObjectId
。当然,现在使用它需要重写整个集合。但这应该是一个简单的聚合管道,包含
$project
$out
。但听起来你基本上忘记添加索引了。@JohnnyHK如果我只需要使用我自己的id字段从db检索文档,你会建议什么类型的索引。实际上,我为自己的id字段创建了唯一索引,但这并没有提高查询响应时间。我阅读了文档,但他们不推荐任何东西。@Neil Lunn如果我理解正确,你的意思是我不必添加名为id的属性,因为mongodb有名为_id的默认属性。为此,我认为这取决于我使用的应用程序和数据;在我的例子中,我使用了我自己的id,因为它反映了我的抓取,每个网页都有自己的id,这些id是我的团队开发的应用程序使用的。