MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

3 начина да скриете индекс от плана на заявката в MongoDB

Започвайки от MongoDB 4.4, вече можем да скрием индекси от плана на заявката. Това ни позволява да оценим потенциалното въздействие от отпадането на индекс, без действително да отпадаме индекса.

Ако скриването му има отрицателно въздействие, можем да разкрием индекса. Това ни спестява от необходимостта да пускаме индекса, след което да го създаваме отново.

По-долу са 3 начина за скриване на индекс в MongoDB.

hideIndex() Метод

db.collection.hideIndex() метод прави точно както обещава – той скрива индекса (от планировщика на заявки).

Пример:

db.pets.hideIndex("idx_weight_-1")

Изход:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Това крие индекс, наречен idx_weight_-1 на pets колекция. Алтернативно бихме могли да предоставим ключовия модел за индекса вместо името.

Резултатът от hideIndex() method показва старата стойност за hidden поле (в този случай false ) и новата стойност (в този случай true ).

Ако обаче скрием вече скрит индекс (или разкрием вече нескрит), те не се показват и просто получаваме следното:

{ "ok" : 1 }

Във всеки случай индексът вече е скрит.

hideIndex() Методът всъщност е обвивка за collMod команда за администриране (по-долу).

collMod Команда

collMod командата Administration ни позволява да добавяме опции към колекция или да променяме дефинициите на изглед.

Можем да го използваме, за да скрием индекс, като предадем hidden: true .

Пример:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "idx_weight_-1",
      hidden: true
   }
} )

Резултат:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Това връща същия документ, който hideIndex() връща.

Подобно на hideIndex() , имате възможност да посочите името на индекса или неговия ключов модел.

Ето пример за използване на ключовия модел:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { weight : -1 },
      hidden: true
   }
} )

В този случай индексът е дефиниран с помощта на { weight : -1 } , така че тази дефиниция може да се използва вместо името на индекса.

За да проверим това, можем да използваме getIndexes() за да видите дефиницията на индекса:

db.pets.getIndexes()

Резултат:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	}
]

Можем също да разкрием индекса, като предадем hidden: false .

Създайте скрит индекс

Третият начин да скриете индекс е да го създадете като скрит индекс.

За да направите това, използвайте hidden: true като една от опциите, когато създавате индекса.

Пример:

db.pets.createIndex( 
    { type: 1 },
    { hidden: true }
)

Изход:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 2,
	"numIndexesAfter" : 3,
	"ok" : 1
}

Сега нека извикаме getIndexes() отново, за да проверите новосъздадения ни скрит индекс:

db.pets.getIndexes()

Резултат:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	},
	{
		"v" : 2,
		"hidden" : true,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Можем да видим, че е създаден с "hidden": true .

Не можете да скриете индекси? Проверете тази настройка.

mongod featureCompatibilityVersion трябва да е най-малко 4.4 преди да можете да скриете индекси. Въпреки това, след като бъде скрит, индексът ще остане скрит дори с featureCompatibilityVersion зададен на 4.2 на MongoDB 4.4 двоични файлове.

Можете да проверите featureCompatibilityVersion настройка със следния код:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Можете да го настроите с помощта на setFeatureCompatibilityVersion команда:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

setFeatureCompatibilityVersion командата трябва да се изпълни в admin база данни.

Също така имайте предвид, че не можете да скриете _id индекс.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb не може да стартира

  2. Spring Data Mongo - приложете уникални комбинирани полета във вградения документ

  3. Мангуста - причинена от ::11000 E11000 дублиран ключов индекс на грешка?

  4. Битката на базите данни NoSQL - Сравняване на MongoDB и Cassandra

  5. запишете IP адрес в mongoDB