2017-07-18 57 views
1

我正在將一組網頁存儲在大約150M的網頁中。每個頁面大小不同。我想要做的唯一事務是使用它的id(不是mongodb default _id)來檢索頁面。但是,獲得結果需要很長時間,而且我還沒有設法檢索任何文檔。但是,使用db.collection.findOne()完美。因此,我將5M網頁的一個子集編入索引進行測試和修復。當對這個db db.collection.find("id":"aw-000")發出查詢時,需要4分鐘或更長時間來獲取文檔。5M和150M網頁的Mongo數據庫真的很慢

我試過db.runCommand({compact: 'collection'})db.runCommand({compact: 'collection'}) m但他們沒有幫助!

當我檢查var/log/mongodb/mongod.log下的日誌(應該包含任何查詢了超過100毫秒),我發現這一點:

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 } 

不過,我不知道如何從這樣的日誌中受益。

有沒有辦法讓我的數據庫更有效率?

+1

你對'id'指數? – JohnnyHK

+0

或者你甚至想過爲'_id'提供你自己的「獨特價值」?因爲沒有什麼說它必須包含「ObjectId」。當然,現在使用它將涉及重寫整個集合。但是這應該是一個帶'$ project'和'$ out'的簡單聚合管道。但它聽起來像你基本上忘了添加索引。 –

+0

@JohnnyHK你對我的情況建議什麼類型的索引,我只需要使用我自己的id字段從db中檢索文檔。我爲自己的id字段創建了實際的唯一索引,但這不會改進我的查詢響應時間。我閱讀文檔,但他們不推薦任何東西。 – sareem

回答

0

正如Neil Lunn在上述評論中指出的那樣。我發現最簡單的解決方案是從零開始創建數據庫,而使用_id作爲我的id字段名稱而不是"id"_id默認情況下有一個索引,並且唯一類型的查詢將針對此索引發出,這是通過id檢索的。

因此,該程序(這是用來創建索引的任何程序)將插入對象爲以下內容:

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

代替:

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