Mongodb установка

Thank you for reading this post, don't forget to subscribe!

MongoDB – это сво­бод­ная и откры­тая доку­мен­то-ори­ен­ти­ро­ван­ная база дан­ных. Она отно­сит­ся к базам NoSQL, пото­му что в её осно­ве не лежит тра­ди­ци­он­ная реля­ци­он­ная струк­ту­ра базы дан­ных. Вме­сто это­го MongoDB исполь­зу­ет JSON-подоб­ные доку­мен­ты с дина­ми­че­ски­ми схе­ма­ми, кото­рые мож­но редак­ти­ро­вать в любой момент.

Добав­ля­ем репозиторий:
Паке­та mongodb-org нет в офи­ци­аль­ном репо­зи­то­рии CentOS. Одна­ко MongoDB под­дер­жи­ва­ет спе­ци­аль­ный отдель­ный репо­зи­то­рий, кото­рый мож­но добавить.

Открой­те офи­ци­аль­ную доку­мен­та­цию MongoDB (раз­дел Install on Red Hat) и добавь­те в файл инфор­ма­цию о послед­нем ста­биль­ном релизе:

vi /etc/yum.repos.d/mongodb-org.repo

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

Теперь нуж­но убе­дить­ся, что yum видит репо­зи­то­рий MongoDB. Для это­го исполь­зуй­те коман­ду repolist.

yum repolist
[root@mongodbmaster ~]# yum repolist | grep -i mongo
mongodb-org-4.2/7 MongoDB Repository 10

или

Установка MongoDB

Уста­но­ви­те пакет mongodb-org:
yum install mongodb-org
После запус­ка коман­ды появит­ся два запроса:

Is this ok [y/N]:

Пер­вый – это запрос на раз­ре­ше­ние уста­нов­ки паке­та MongoDB, а вто­рой – на импор­ти­ро­ва­ние GPG-клю­ча для под­твер­жде­ния целост­но­сти загру­жен­ных паке­тов. Вве­ди­те Y и нажми­те Enter.

или

Запу­сти­те сер­вис MongoDB:
systemctl start mongod

При­ме­ча­ние: Управ­лять сер­ви­сом мож­но с помо­щью команд reload (пере­за­груз­ка, при этом про­цесс mongod пере­чи­ты­ва­ет кон­фи­гу­ра­ци­он­ный файл /etc/mongod.conf) и stop (оста­нов­ка сервиса).

systemctl reload mongod
systemctl stop mongod

Ути­ли­та systemctl не выво­дит на экран резуль­та­тов коман­ды start. Что­бы про­ве­рить состо­я­ние сер­ви­са, про­смот­ри­те лог mongod.log с помо­щью коман­ды tail.

tail /var/log/mongodb/mongod.log
[initandlisten] waiting for connections on port 27017

Такой вывод зна­чит, что база дан­ных MongoDB была успеш­но запу­ще­на, теперь вы може­те полу­чить доступ к обо­лоч­ке MongoDB.

mongo

При­ме­ча­ние: Во вре­мя запус­ка обо­лоч­ки может появить­ся предупреждение:

** WARNING: soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

MongoDB явля­ет­ся мно­го­по­точ­ным при­ло­же­ни­ем. Такое при­ло­же­ние может запус­кать допол­ни­тель­ные про­цес­сы для обра­бот­ки рабо­чей нагруз­ки. Это пре­ду­пре­жде­ние сооб­ща­ет, что про­из­во­ди­тель­ность MongoDB уве­ли­чит­ся, если коли­че­ство одно­вре­мен­но под­дер­жи­ва­е­мых про­цес­сов будет вдвое мень­ше, чем коли­че­ство одно­вре­мен­но откры­тых фай­лов. Что­бы устра­нить ошиб­ку, отре­дак­ти­руй­те пара­метр processes в фай­ле 20-nproc.conf.

vi /etc/security/limits.d/20-nproc.conf

Добавь­те в конец фай­ла такую строку:


mongod soft nproc 32000

Пере­за­пу­сти­те MongoDB:

systemctl restart mongod

Попро­буй­те сно­ва под­клю­чить­ся к обо­лоч­ке. Пре­ду­пре­жде­ние боль­ше не появится.

Что­бы понять, как вза­и­мо­дей­ство­вать с обо­лоч­кой, про­смот­ри­те вывод мето­да db.help(), кото­рый предо­став­ля­ет вывод мето­да объ­ек­тов db.
db.help()
DB methods:
db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(…) ]
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : …, capped : …, max : … } )
db.createUser(userDocument)
db.currentOp() displays currently executing operations in the db
db.dropDatabase()

Про­цесс mongod мож­но оста­вить в фоно­вом режи­ме, а обо­лоч­ку нуж­но закрыть:
exit
Bye

Настройка автозапуска MongoDB

При­ло­же­ния на осно­ве баз дан­ных не могут рабо­тать без БД, пото­му очень важ­но настро­ить авто­ма­ти­че­ский запуск демо­на mongod во вре­мя загруз­ки сервера.

Что­бы убе­дить­ся, что авто­за­пуск не настро­ен, запро­си­те состо­я­ние демона:

systemctl is-enabled mongod; echo $?
enabled
0

Ноль в выво­де сооб­ща­ет, что демон вклю­чен. Если в выво­де 1, зна­чит, демон отклю­чен. Что­бы запу­стить его, исполь­зуй­те команду:

systemctl enable mongod

Теперь MongoDB будет авто­ма­ти­че­ски запус­кать­ся после пере­за­груз­ки системы.

Импорт тестовых данных (опционально)

В отли­чие от дру­гих сер­ве­ров баз дан­ных, MongoDB не предо­став­ля­ет базы дан­ных test. Что­бы не экс­пе­ри­мен­ти­ро­вать с дан­ны­ми, кото­рые нахо­дят­ся в про­из­вод­стве, загру­зи­те обра­зец дан­ных из доку­мен­та­ции MongoDB. Полу­чен­ный доку­мент JSON содер­жит спи­сок ресто­ра­нов, на кото­ром вы може­те поупраж­нять­ся в рабо­те с MongoDB.

Перей­ди­те в ката­лог с воз­мож­но­стью записи:

cd /tmp

С помо­щью коман­ды curl загру­зи­те файл JSON из доку­мен­та­ции MongoDB:

curl -O https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

Коман­да mongoimport вста­вит дан­ные в БД test.
Флаг —db опре­де­ля­ет БД, кото­рую нуж­но использовать,
collection ука­зы­ва­ет, где имен­но в БД нуж­но хра­нить данные,
file ука­зы­ва­ет файл, в кото­рый нуж­но доба­вить данные.

mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json

Вывод под­твер­дит пере­ме­ще­ние дан­ных из фай­ла primer-dataset.json.

connected to: localhost
imported 25359 documents

Теперь попро­буй­те создать запрос. Запу­сти­те оболочку:

mongo

Обо­лоч­ка выбе­рет базу test по умолчанию.

Запро­си­те кол­лек­цию restaurants с помо­щью мето­да find(), что­бы про­смот­реть спи­сок ресто­ра­нов. Дан­ная кол­лек­ция содер­жит более 2500 запи­сей; что­бы огра­ни­чить вывод, исполь­зуй­те метод limit(). Метод pretty() выве­дет дан­ные в более удоб­ном для чте­ния формате.
db.restaurants.find().limit( 1 ).pretty()
вывод будет следующий:
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

Попро­буй­те исполь­зо­вать дру­гие мето­ды MongoDB. Что­бы уда­лить тесто­вые дан­ные, исполь­зуй­те метод db.restaurants.drop().

db.restaurants.drop()

Что­бы закрыть обо­лоч­ку, введите:

exit
Bye