MongoDB如何在後臺建立索引
預設情況下,MongoDB的ensureIndex()是阻塞型操作,會暫停資料庫上所有正在進行的其他操作,直到建立索引完成。但是,在高於或等於1.3.2版本的MongoDB中,提供了可選的後臺建立索引的選項。
命令如下:
> db.things.ensureIndex({x:1}, {background:true});
> db.things.ensureIndex({name:1}, {background:true, unique:true,... dropDups:true});
當後臺模式啟動時,其他的操作,包含寫,在建立索引期間不會被阻塞。該索引在建立完成前不會被應用到查詢中去。
舉例如下:
> db.chenfeng.find()
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
>
> db.chenfeng.ensureIndex({age: 6},{name:"idx_age_6",background:true}); --加入background:true選項
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.chenfeng.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "chenfeng.chenfeng"
},
{
"v" : 1,
"key" : {
"age" : 6
},
"name" : "idx_age_6",
"ns" : "chenfeng.chenfeng",
"background" : true
}
]。
>
注意:
每個集合在同一時刻只允許建立一個索引。
一些管理操作,如repairDatabase,不允許在後臺建立索引期間使用。
(應用到生產環境,應使用)v1.4或者更高版本。
建議使用者在建立索引時,儘量選擇後臺建索引的方式,可能效能上不如前臺方式,但後臺建索引對業務的影響是最小的(前臺建索引還會獲取 db 的寫鎖,導致 db 上的讀寫都被阻塞)。
命令如下:
> db.things.ensureIndex({x:1}, {background:true});
> db.things.ensureIndex({name:1}, {background:true, unique:true,... dropDups:true});
當後臺模式啟動時,其他的操作,包含寫,在建立索引期間不會被阻塞。該索引在建立完成前不會被應用到查詢中去。
舉例如下:
> db.chenfeng.find()
{ "_id" : ObjectId("5714419cf7c81959e12a904e"), "age" : 1, "name" : "duansf" }
{ "_id" : ObjectId("571441a3f7c81959e12a904f"), "age" : 2, "name" : "duansf" }
{ "_id" : ObjectId("571441a7f7c81959e12a9050"), "age" : 3, "name" : "duansf" }
{ "_id" : ObjectId("571441abf7c81959e12a9051"), "age" : 4, "name" : "duansf" }
{ "_id" : ObjectId("571442b0f7c81959e12a9052"), "age" : 5, "name" : "duansf" }
{ "_id" : ObjectId("571442bcf7c81959e12a9053"), "age" : 6, "name" : "duansf" }
>
>
> db.chenfeng.ensureIndex({age: 6},{name:"idx_age_6",background:true}); --加入background:true選項
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.chenfeng.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "chenfeng.chenfeng"
},
{
"v" : 1,
"key" : {
"age" : 6
},
"name" : "idx_age_6",
"ns" : "chenfeng.chenfeng",
"background" : true
}
]。
>
注意:
每個集合在同一時刻只允許建立一個索引。
一些管理操作,如repairDatabase,不允許在後臺建立索引期間使用。
(應用到生產環境,應使用)v1.4或者更高版本。
建議使用者在建立索引時,儘量選擇後臺建索引的方式,可能效能上不如前臺方式,但後臺建索引對業務的影響是最小的(前臺建索引還會獲取 db 的寫鎖,導致 db 上的讀寫都被阻塞)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2122811/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- 如何在 Flutter 建立一個後臺任務Flutter
- mongodb資料庫如何建立索引?MongoDB資料庫索引
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- mongodb 重複建立索引不報錯MongoDB索引
- 後臺執行MongoDBMongoDB
- MongoDB 索引MongoDB索引
- mongodb索引MongoDB索引
- 建立索引後,速度變快原因?以及索引失效總結索引
- mongodb索引使用MongoDB索引
- mongoDB的索引MongoDB索引
- MongoDB索引概述MongoDB索引
- MongoDB之索引(地理資訊索引)MongoDB索引
- MongoDB之索引(全文索引)MongoDB索引
- MongoDB之索引(過期索引)MongoDB索引
- MongoDB之索引(唯一索引)MongoDB索引
- 如何在SAP雲平臺上使用MongoDB服務MongoDB
- IDEA和後臺建立Idea
- MongoDB索引,效能分析MongoDB索引
- Java後臺開發學習(3)——MongoDBJavaMongoDB
- 建約束(Constraint)時隱式建立索引(Index)及先建立索引後建立約束的區別AI索引Index
- mongodb 如何檢視索引MongoDB索引
- MongoDB ( 五 )高階_索引MongoDB索引
- MongoDB之索引(簡介)MongoDB索引
- MongoDB索引實戰技巧MongoDB索引
- 如何在後臺修改網站資料?網站後臺如何修改字型?網站
- 快速掌握mongoDB(三)——mongoDB的索引詳解MongoDB索引
- 【Mongodb】如何建立mongodb的replica setMongoDB
- [需求建議]獨立模型如何在後臺展現出來,建立了獨立模型之後即不能用,難道要自己編寫後臺?模型
- ElasticSearch建立索引Elasticsearch索引
- DocumentDB 建立索引索引
- 【MongoDB學習筆記】MongoDB索引那點事MongoDB筆記索引
- MongoDB系列一(索引及C#如何操作MongoDB)MongoDB索引C#
- MongoDB索引優化詳解MongoDB索引優化
- MongoDB中的定時索引MongoDB索引
- 005.MongoDB索引及聚合MongoDB索引
- MongoDB索引的簡單理解MongoDB索引
- MongoDB慢查詢與索引MongoDB索引