mongodb indexing - documents.uow.edu.au

25
CSCI235 Database Systems MongoDB Indexing Dr Janusz R. Getta School of Computing and Information Technology - University of Wollongong MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1 1 of 25 17/5/22, 11:14 pm

Upload: others

Post on 03-Jun-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MongoDB Indexing - documents.uow.edu.au

       CSCI235 Database Systems

MongoDB IndexingDr Janusz R. Getta

School of Computing and Information Technology -University of Wollongong

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

1 of 25 17/5/22, 11:14 pm

Page 2: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 2/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

2 of 25 17/5/22, 11:14 pm

Page 3: MongoDB Indexing - documents.uow.edu.au

Overview of indexing

Indexes signiQcantly reduce amount of time needed to access thedocuments

Without indexes all the documents in a collection must be accessed

Single-key index is the most appropriate for {"key":"value"} queryconditions

For query conditions over multiple keys, for example{$and:[{"key1":"value1"},{"key2":"value2"}]}compound index is the best option

If we have a compound index on (key1, key2) then the second index onkey1 is not really needed, however it may still speed up an access a bit

If we have a compound index on (key1, key2) then the second index onkey2 speeds up access a lot

An order of keys in a compound index is very important

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 3/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

3 of 25 17/5/22, 11:14 pm

Page 4: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 4/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

4 of 25 17/5/22, 11:14 pm

Page 5: MongoDB Indexing - documents.uow.edu.au

Single key indexes

An index on "_id" is an automatically created single-key index

Equality search over the values of "_id" is the fasted possible search

The following command creates a single key unique index on a key code

The index is unique because it enforces uniqueness of the valuesassociated with key code, i.e. each document in a collection has adiYerent value associated with a key code

An attempt to insert two documents with the same value of key codefails enforcing a key constraint

Unique index should be create before inserting any data

A unique index cannot be created on a collection where duplicate keysexist

db.department.createIndex( {"code": 1}, {"unique":true} )createIndex()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 5/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

5 of 25 17/5/22, 11:14 pm

Page 6: MongoDB Indexing - documents.uow.edu.au

Single key indexes

The following command creates a single key nonunique index on a keybudget

db.department.createIndex( {"budget": 1}, {"unique": false} )createIndex()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 6/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

6 of 25 17/5/22, 11:14 pm

Page 7: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 7/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

7 of 25 17/5/22, 11:14 pm

Page 8: MongoDB Indexing - documents.uow.edu.au

Compound key index

The following commands create the single key nonunique indexes onthe keys budget and total_staff_number

A query like

uses only one of the indexes created above

A query optimizer picks the more e\cient index (with higher selectivity)

To use both indexes we can traverse each index separately and calculateintersection of disk locations found

db.department.createIndex( {"budget":1}, {"unique":false} )createIndex()

db.department.createIndex( {"total_staff_number":1}, {"unique":false} )createIndex()

db.department.find({"budget":2000, :"total_staff_number":5})createIndex()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 8/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

8 of 25 17/5/22, 11:14 pm

Page 9: MongoDB Indexing - documents.uow.edu.au

Compound key index

The following commands create a compound key nonunique index onthe keys budget and total_staff_number

A compound index is a single index where each entry is composed ofmore than one key

A compound index is used by a query

db.department.createIndex( {"budget":1, "total_staff_number":1}, {"unique":false} )createIndex()

db.department.find({"budget":2000, :"total_staff_number":5})find()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 9/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

9 of 25 17/5/22, 11:14 pm

Page 10: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 10/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

10 of 25 17/5/22, 11:14 pm

Page 11: MongoDB Indexing - documents.uow.edu.au

Sparse index

MongoDB indexes are dense by default

In a dense index for every document there is an index key even thedocument lacks a key

Then there exists a null entry in an index and it is possible to use anindex for a query like

Dense index is inconvenient when:

In a sparse index, only documents that have a value for the indexed keyare indexed

db.department.find( {"budget":null} )find()

unique index on a Qeld that doesn’t appear in every document in a collection isneeded

a large number of documents in a collection have no indexed key

-

-

db.department.createIndex( {"total_staff_number":1}, {"unique":false, "sparse":true} )

createIndex()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 11/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

11 of 25 17/5/22, 11:14 pm

Page 12: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 12/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

12 of 25 17/5/22, 11:14 pm

Page 13: MongoDB Indexing - documents.uow.edu.au

Multikey index

In multikey index multiple entries in the index reference the samedocument

Multikey index is useful for indexing Qelds whose values are arrays

Each value in this courses.code array will appear in the index

A query on any array values can use the index to locate the document

db.department.createIndex( {"course.code":1} )createIndex()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 13/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

13 of 25 17/5/22, 11:14 pm

Page 14: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 14/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

14 of 25 17/5/22, 11:14 pm

Page 15: MongoDB Indexing - documents.uow.edu.au

Hashed index

In hashed index the keys become the arguments of a hash function anda results of of hash function determine location of a document in a hashbucket

The hashed values will determine the ordering of the documents

Hashed indexes have the following restructions:

Hashed indexes are used for sharding

db.department.createIndex( {"name":"hashed"} )Indexing

equality queries can be processed with an index

range queries cannot use hashed index

multikey hashed indexes are not allowed

boating-point values are cast to an integer before being hashed; 1.4 and 1.5 willhave the same value in hashed index

-

-

-

-

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 15/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

15 of 25 17/5/22, 11:14 pm

Page 16: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 16/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

16 of 25 17/5/22, 11:14 pm

Page 17: MongoDB Indexing - documents.uow.edu.au

Geospacial index

Geospacial index allows to Qnd the documents that are close to a givenlocation, based on latitude and longitude values stored in eachdocument

Geospacial index can be used to e\ciently calculate geographicdistances, including the curvature of the earth

MongoDB supports diYerent kinds of indexes, however, only the Qrsttwo types of indexes listed below can be combined to a compound index

1: Ascending B*-tree index

-1: Descending B*-tree index

"hashed": Hashtable index; very fast for lookup by exact value, especially in verylarge collections. But it is not usable for inexact queries ("$gt", "$regex" orsimilar)

"text": Text index designed for searching for words in strings with naturallanguage

"2d": Geospatial index on a bat plane

"2dsphere": Geospatial index on a sphere

-

-

-

-

-

-

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 17/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

17 of 25 17/5/22, 11:14 pm

Page 18: MongoDB Indexing - documents.uow.edu.au

IndexingOutline

Overview of indexing

Single key index

Compound key index

Sparse index

Multikey index

Hashed index

Geospacial index

Index administration

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 18/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

18 of 25 17/5/22, 11:14 pm

Page 19: MongoDB Indexing - documents.uow.edu.au

Index administration

Listing the indexes

db.department.getIndexes()find()

[{

"v" : 2,"key" : {

"_id" : 1},"name" : "_id_","ns" : "test.department"

}]

Results

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 19/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

19 of 25 17/5/22, 11:14 pm

Page 20: MongoDB Indexing - documents.uow.edu.au

Index administration

Creating an index

db.department.createIndex( {"name":"hashed"} )createIndex()

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

}

Results

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 20/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

20 of 25 17/5/22, 11:14 pm

Page 21: MongoDB Indexing - documents.uow.edu.au

Index administration

Listing the indexes

db.department.getIndexes()getindexes()

[{

"v" : 2,"key" : {

"_id" : 1},"name" : "_id_","ns" : "test.department"

},{

"v" : 2,"key" : {

"name" : "hashed"},"name" : "name_hashed","ns" : "test.department"

}]

Results

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 21/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

21 of 25 17/5/22, 11:14 pm

Page 22: MongoDB Indexing - documents.uow.edu.au

Index administration

Delete an index name_hashed

db.department.dropIndex("name_hashed")dropIndex()

db.department.getIndexes()getIndexes()

[{

"v" : 2,"key" : {

"_id" : 1},"name" : "_id_","ns" : "test.department"

}]

Results

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 22/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

22 of 25 17/5/22, 11:14 pm

Page 23: MongoDB Indexing - documents.uow.edu.au

Index administration

Creation of indexes before loading data allows indexes to be builtincrementally as the data is inserted

Creation of an index on an already loaded collection may take a longtime

It is possible to create an index in the background without closing adatabase system

It is possible to create an index in ogine by taking a replica node ogine,building an index, and taking node online allowing the node to catch upwith master replica node

When ready we can promote a node to primary and take anothersecondary node ogine, etc.

db.department.createIndex( {"total_staff_number":1},{"background":true} )createIndex()

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 23/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

23 of 25 17/5/22, 11:14 pm

Page 24: MongoDB Indexing - documents.uow.edu.au

Index administration

It is possible to re-build indexes in order to defragment them after a lotof updates

db.department.reIndex()reIndex()

{"nIndexesWas" : 1,"nIndexes" : 1,"indexes" : [

{"v" : 2,"key" : {

"_id" : 1},"name" : "_id_","ns" : "test.department"

}],"ok" : 1

}

Results

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 24/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

24 of 25 17/5/22, 11:14 pm

Page 25: MongoDB Indexing - documents.uow.edu.au

References

Banker K., Bakkum P., Verch S., Garret D., Hawkins T., MongoDB inAction, 2nd ed., Manning Publishers, 2016

MongoDB Manual, Indexes https://docs.mongodb.com/manual/indexes/

Chodorow K. MongoDB The DeQnitive Guide, O'Reilly, 2013

TOP              Created by Janusz R. Getta, CSCI235 Database Systems, Autumn 2022 25/25

MongoDB Indexing file:///Users/jrg/235-2022-AUTUMN/SLIDES/WEEK11/26indexing/26indexing.html#1

25 of 25 17/5/22, 11:14 pm