Mongodb на вырост
Содержание:
Устройство базы данных. Документы
Последнее обновление: 25.03.2018
Всю модель устройства базы данных в MongoDB можно представить следующим образом:
Если в реляционных бд содержимое составляют таблицы, то в mongodb база данных состоит из коллекций.
Каждая коллекция имеет свое уникальное имя — произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания.
В отличие от реляционных баз данных MongoDB не использует табличное устройство с четко заданным количеством столбцов и типов данных. MongoDB
является документо-ориентированной системой, в которой центральным понятием является документ.
Документ можно представить как объект, хранящий некоторую информацию. В некотором смысле он подобен строкам в реляционных субд, где строки
хранят информацию об отдельном элементе. Например, типичный документ:
{
"name": "Bill",
"surname": "Gates",
"age": "48",
"company": {
"name" : "microsoft",
"year" : "1974",
"price" : "300000"
}
}
Документ представляет набор пар ключ-значение. Например, в выражении name представляет ключ, а Bill — значение.
Ключи представляют строки. Значения же могут различаться по типу данных. В данном случае у нас почти все значения также представляют строковый тип,
и лишь один ключ (company) ссылается на отдельный объект. Всего имеется следующие типы значений:
- String: строковый тип данных, как в приведенном выше примере (для строк используется кодировка UTF-8)
- Array (массив): тип данных для хранения массивов элементов
- Binary data (двоичные данные): тип для хранения данных в бинарном формате
-
Boolean: булевый тип данных, хранящий логические значения или ,
например, - Date: хранит дату в формате времени Unix
- Double: числовой тип данных для хранения чисел с плавающей точкой
- Integer: используется для хранения целочисленных значений, например,
- JavaScript: тип данных для хранения кода javascript
- Min key/Max key: используются для сравнения значений с наименьшим/наибольшим элементов BSON
- Null: тип данных для хранения значения
- Object: строковый тип данных, как в приведенном выше примере
- ObjectID: тип данных для хранения id документа
- Regular expression: применяется для хранения регулярных выражений
- Symbol: тип данных, идентичный строковому. Используется преимущественно для тех языков, в которых есть специальные символы.
- Timestamp: применяется для хранения времени
В отличие от строк документы могут содержать разнородную информацию. Так, рядом с документом, описанным выше, в одной коллекции
может находиться другой объект, например:
{
"name": "Tom",
"birthday": "1985.06.28",
"place" : "Berlin",
"languages" :
}
Казалось бы разные объекты за исключением отдельных свойств, но все они могут находиться в одной коллекции.
Еще пара важных замечаний: в MongoDB запросы обладают регистрозависимостью и строгой типизацией. То есть следующие два документа не будут
идентичны:
{"age" : "28"}
{"age" : 28}
Если в первом случае для ключа age определена в качестве значения строка, то во втором случае значением является число.
Идентификатор документа
Для каждого документа в MongoDB определен уникальный идентификатор, который называется . При добавлении документа в коллекцию
данный идентификатор создается автоматически. Однако разработчик может сам явным образом задать идентификатор, а не полагаться на автоматически генерируемые,
указав соответствующий ключ и его значение в документе.
Данное поле должно иметь уникальное значение в рамках коллекции. И если мы попробуем добавить в коллекцию два документа с одинаковым идентификатором, то добавится только один из них, а при добавлении второго мы получим ошибку.
Если идентификатор не задан явно, то MongoDB создает специальное бинарное значение размером 12 байт. Это значение состоит из нескольких
сегментов: значение типа размером 4 байта, идентификатор машины из 3 байт, идентификатор процесса из 2 байт и счетчик из 3 байт.
Таким образом, первые 9 байт гарантируют уникальность среди других машин, на которых могут быть реплики базы данных. А следующие
3 байта гарантируют уникальность в течение одной секунды для одного процесса. Такая модель построения идентификатора гарантирует с высокой долей вероятности,
что он будет иметь уникальное значение, ведь она позволяет создавать до 16 777 216 уникальных объектов ObjectId в секунду для одного процесса.
НазадВперед
Создание индекса
Если мы не хотим блокировать БД при построении нового индекса, мы строим его в фоновом режиме (опция background: true). Но в условиях репликации построение любого индекса будет запущено на каждом ведомом c блокированием проигрывания opLog — произойдет скачок отставания, а если возрастет интенсивность записи, то и до развала недалеко. Также если индекс строится долго, то может прерваться ожидание w:majority.
Перед построением индекса замеряйте время его создания на похожих данных, чтобы оценить время простоя на боевом кластере.
Есть способ построения большого индекса без блокирования ведомого.
- На каждом ведомом сервере выполняем последовательность действий:
- Переключаем сервер в одиночный режим.
- Запускаем построение нужного индекса и ждем окончания.
- Возвращаем сервер в репликасет и ждем его синхронизации.
- Запускаем построение нужного индекса на ведущем сервере.
MongoDB от теории к практике. Руководство по установке кластера mongoDB
Из песочницы
Доброго времени суток, уважаемые читатели. В этом посте я хотел бы описать несколько примеров развертки mongoDB, отличия между ними, принципы их работы. Однако больше всего хотелось бы поделиться с вами практическом опытом шардирования mongoDB. Если бы этот пост имел план, он бы выглядел скорее всего так:
- Вступление. Кратко о масштабировании
- Некоторые примеры развертки mongoDB и их описание
- Шардинг mongoDB
Пункты 1 и 2 — теоретические, а номер 3 претендует на практическое руководство по поднятию кластера mongoDB и больше всего подойдет тем, кто столкнулся с этим в первый раз.
Использование
Сохранение в БД
Простой пример отношения one-to-many со ссылкой только в одну сторону (примеры будут на typescript, в конце пример на javascript):
В БД появятся две коллекции и с записями:
и
Метод был вызван только на модели , Maraquia как и положено сама позаботилась о сохранении второго документа.
Усложним пример, теперь отношение many-to-many и ссылки в обе стороны:
В БД появится коллекция с записями:
и коллекция с записями:
Вы, наверное, уже заметили отсутствие декораторов с именами вроде , , как это обычно принято для ORM. Maraquia справляется без этой дополнительной информации, hasOne или hasMany определяется значением, массив — значит hasMany. А встроенный документ или внешний (сохраняется в отдельной коллекции) определяется наличием в его схеме заполненного . Например, если в первом примере закомментировать строку и вновь запустить его, то запись появится только в коллекции и будет выглядеть так:
Кроме того тип поля перестаёт быть промисом.
То есть с помощью Maraquia можно также удобно работать и со встраиваемыми документами.
Чтение из БД
Попробуем прочитать из базы что-то из ранее сохранённого:
При чтении поля было использовано ключевое слово — внешние документы достаются из базы лениво при первом чтении соответствующего поля.
Но что если необходимо иметь доступ к идентификаторам хранящимся в поле без вытаскивания соответствующих им документов из БД, но при этом опционально может понадобиться и вытащить их? Имя поля в модели соответствует имени поля в документе, но используя опцию можно изменить это соответствие. То есть определив два поля в модели ссылающихся на одно поле в документе и не указав тип для одного из них можно решить эту проблему:
Удаление документа
Метод удаляет соответствующий документ из БД. Maraquia не знает где есть ссылки на него и здесь программисту необходимо поработать самому:
В данном примере массив был заменён на новый, созданный методом , но можно менять существующий массив, Maraquia находит и такие изменения. То есть можно было так:
Валидация
Для валидации поля необходимо добавить свойство в его опции:
Так же можно передавать объекты создаваемые библиотекой joi:
Использование с javascript
Typescript — это здорово, но иногда надо без него. Для этого вместо объекта передаваемого декоратору необходимо определить статическое поле , в котором есть также поле :
Запись в поля делается через метод :
А чтение полей с внешними документами через метод :
Остальные поля читаются как обычно.
Verify Windows Packages¶
This verifies the MongoDB binary against its SHA256 key.
1
Download the installer.
Download the MongoDB installer. For example, to download the
latest version of MongoDB Community Edition:
➤ MongoDB Community Download Center
- In the Version dropdown, select
. - In the Platform dropdown, select Windows.
- In the Package dropdown, select msi.
- Click Download and save the file to your Downloads
folder.
2
Get the public signature file.
Get the public signature file for your MongoDB version.
For example, for the SHA256 signature of the latest version
of MongoDB Community Edition:
- From https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-4.4.0-signed.msi.sha256, copy the content.
- Save the content to a file in your Downloads folder.
3
Compare the signature file to the MongoDB installer hash.
To compare the signature file to the hash of the MongoDB binary,
invoke this Powershell script:
copy
$sigHash = (Get-Content $Env:HomePath\Downloads\mongodb-windows-x86_64-4.4.0-signed.msi.sha256 | Out-String).SubString(,64).ToUpper(); ` $fileHash = (Get-FileHash $Env:HomePath\Downloads\mongodb-windows-x86_64-4.4.0-signed.msi).Hash.Trim(); ` echo $sigHash; echo $fileHash; ` $sigHash -eq $fileHash
copy
BBF2662BF05D8CF2B796A9702CB82699AD0259796DD44D5FED1D818090431503 BBF2662BF05D8CF2B796A9702CB82699AD0259796DD44D5FED1D818090431503 True
The command outputs three lines:
- A hash that you downloaded directly from MongoDB.
- A hash computed from the MongoDB binary you
downloaded from MongoDB. - A or result depending if the hashes match.
If the hashes match, the MongoDB binary is verified.
CRUD Operations
Once you have connected to the database, it’s time to start adding and manipulating some data. The type has several methods which allow you to send queries to the database.
Insert documents
First, create some new structs to insert into the database:
To insert a single document, use the method:
To insert multiple documents at a time, the method will take a slice of objects:
Update documents
The method allows you to update a single document. It requires a filter document to match documents in the database and an update document to describe the update operation. You can build these using types:
This code will then match the document where the name is Ash and will increment Ash’s age by 1 — happy birthday Ash!
Find documents
To find a document, you will need a filter document as well as a pointer to a value into which the result can be decoded. To find a single document, use . This method returns a single result which can be decoded into a value. You’ll use the same variable you used in the update query to match a document where the name is Ash.
To find multiple documents, use . This method returns a . A provides a stream of documents through which you can iterate and decode one at a time. Once a has been exhausted, you should close the . Here you’ll also set some options on the operation using the package. Specifically, you’ll set a limit so only 2 documents are returned.
Delete Documents
Finally, you can delete documents using or . Here you pass as the filter argument, which will match all documents in the collection. You could also use to delete an entire collection.
Run MongoDB Community Edition as a Windows Service¶
You can set up the MongoDB server as a Windows Service that
starts automatically at boot time.
1
Create the database and log directories.
If you have not created the data and log directories for your MongoDB
server, you must create them before running MongoDB Community Edition
as a Windows service.
From the Command Interpreter, create the following directories:
copy
cd C:\ md "\data\db" "\data\log"
2
Create a MongoDB configuration file.
Create a MongoDB configuration
file:
copy
C:\Program Files\MongoDB\Server\3.6\mongod.cfg
Note
MongoDB configuration files use the
YAML file format. Per the ,
all indents must use spaces to maintain portability. To ensure no
parsing errors, enclose all values in double quotation marks
() and escape any backslash characters ().
Set the and . Include additional
configuration options as
needed:
copy
systemLog destination "file" path "c:\\data\\log\\mongod.log" storage dbPath "c:\\data\\db"
3
Create the MongoDB service.
Invoke the following command in the Command Interpreter
to create the service:
copy
sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.6\bin\mongod.exe\" ^ --service --config=\"C:\Program Files\MongoDB\Server\3.6\mongod.cfg\"" DisplayName= "MongoDB" start= auto
Note
requires a space between “ ” and the
configuration values (i.e. and to escape a double-quoted string.
If successfully created, the following message is written to the
log:
CreateService SUCCESS
4
Close all other command prompts, then invoke the following command:
copy
net start MongoDB
5
Verify that MongoDB has started successfully.
Check your MongoDB log file for the following line:
waiting for connections on port 27017
You may see non-critical warnings in the process
output. As long as you see this message in the MongoDB log, you can
safely ignore these warnings during your initial evaluation of
MongoDB.
6
Connect to the MongoDB server.
To connect to MongoDB through the
shell, open another Command Interpreter.
copy
"C:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
Stop MongoDB Community Edition as a Windows Service
To stop/pause the MongoDB service, use the Services console:
- From the Services console, locate the MongoDB service.
- Right-click on the MongoDB service and click Stop (or Pause).
You can also stop the MongoDB service from the Windows command prompt/interpreter (). Open a Windows command prompt/interpreter () as an Administrator, and
run the following command:
copy
net stop MongoDB
Бэкап
Процесс копирования данных занимает время, и чтобы получить их моментальный снимок (snapshot), мы используем команду db.fsyncLock() на скрытой реплике, чтобы остановить запись во все коллекции. После этого утилитой mongodump копируем все данные в хранилище бэкапов.
В процессе снятия бэкапа состояние данных все больше отстает от ведущего. Конечно, надо следить, чтобы время снятия бэкапа было не больше длительности opLog.
Есть еще много способов снять бэкап: копия образа диска, копия директории БД, snapshot виртуалки.
Mongodump — самый медленный способ, но у него есть преимущества:
- Не зависит от системы виртуализации.
- Не зависит от версии БД (восстановление старых бэкапов может потребовать развертывания предыдущей версии БД).
- Можно восстановить выбранные коллекции или даже некоторые документы, а как показала практика, фатальные ошибки в коде или при администрировании редко затрагивают более одной коллекции.
Аутентификация REST API с помощью Spring Security и MongoDB
Перевод
Всем привет! Уходя на выходные делимся с вами статьей, которая была переведена в преддверии старта курса «Разработчик на Spring Framework».
В прошлых статьях мы создавали RESTful веб-сервис, теперь же мы поговорим о безопасности
Вступление
В предыдущем посте мы рассмотрели, как создать REST API с использованием инфраструктуры Java Spring Boot и MongoDB. API, однако, не требовал никакой аутентификации, а это значит, что он, вероятно, все еще не готов к использованию. Поэтому в этом руководстве будет рассказано, как использовать встроенную среду безопасности Spring для добавления уровня аутентификации в этот API.
Run MongoDB Community Edition from the Command Interpreter¶
Open a Windows command prompt/interpreter () as an Administrator.
Important
You must open the command interpreter as an
Administrator.
1
Create the database directory.
Create the where MongoDB stores data.
MongoDB’s default data directory path is the absolute path
on the drive from which you start MongoDB.
From the Command Interpreter, create the data directory:
copy
cd C:\ md "\data\db"
2
Start your MongoDB database.
To start MongoDB, invoke .
copy
"C:\Program Files\MongoDB\Server\3.6\bin\mongod.exe" --dbpath="c:\data\db"
The option points to your
database directory.
If the MongoDB database server is running correctly, the
Command Interpreter displays:
copy
initandlisten waiting for connections
Important
Depending on the
Windows Defender Firewall
settings on your Windows host, Windows may display a
Security Alert dialog box about blocking
“some features” of
from communicating on networks. To remedy this issue:
- Click Private Networks, such as my home or work
network. - Click Allow access.
To learn more about security and MongoDB, see the
Security Documentation.
Графовая база данных Neo4j в PHP
Из песочницы
В последнее время я все чаще слышу о NoSQL и о графовых базах данных в частности. Но воспользовавшись хабропоиском с удивлением обнаружил, что статей на эту тему не так и много, а по запросу «Neo4j», так вообще 4 результата, где косвенно упоминается это название в тексте статей.
Что такое Neo4j?
Neo4j — это высокопроизводительная, NoSQL база данных основанная на принципе графов. В ней нет такого понятия как таблицы со строго заданными полями, она оперирует гибкой структурой в виде нод и связей между ними.
Как я докатился до этого?
Уже более года я не использовал в своих проектах SQL, с того времени, как попробовал документо-ориентированную СУБД «MongoDB». После MySQL моей радости не было предела, как все просто и удобно можно делать в MongoDB. За год, в нашей студии создания сайтов, переписали тройку CMS, использующих основные фишки Mongo c её документами, и с десяток сайтов работающих на их основе. Всё было хорошо, и я уже начал забывать, что такое писать запросы в полсотни строк на каждое действие с БД и все бы ничего пока на мою голову не свалился проект с кучей отношений, которые ну никак не укладывались в документы. Возвращаться к SQL очень не хотелось, и пару дней я потратил чисто на поиск NoSQL решения, позволяющего делать гибкие связи — на графовые СУБД. И по ряду причин мой выбор остановился на Neo4j, одна из главных причин — это то, что мой движок был написан на PHP, а для неё был написан хороший драйвер «Neo4jPHP», который охватывает почти 100% REST-интерфейса, предоставляющегося сервером Noe4j.
Релиз MongoDB 2.4
Сегодня состоялся релиз финальной версии MongoDB 2.4. Одна из новых возможностей — поддержка полнотекстового поиска с морфологией и стоп-словами. Правда, пока только в экспериментальном режиме. Среди 15 поддерживаемых языков есть и русский, что очень радует.
Ещё одно заметное изменение — смена движка javascript. Вместо SpiderMonkey теперь используется V8. Довольно логичный шаг, теперь было бы неплохо посмотреть сравнительные тесты map-reduce.
Также можно отметить улучшения в индексировании и выборке гео-данных.
И ещё одно крупное изменение: добавление ролей пользователей и привилегий(read, readWrite, dbAdmin, clusterAdmin и т.д.). Посмотрим, что из этого выйдет.Полный список изменений
Меня порадовало, что вместе с основным релизом вышла новая версия драйвера для C# с поддержкой новых возможностей. Драйвер C#
Опыт персонализации интернет-магазина на примере динамической рекомендации
Привет, Хабр!
Поделюсь опытом о том, как собрали собственную систему персонализации на базе «знаний» о потенциальном покупателе.
Единственное чем отличалось наше решение от классических — это использование комбинированной связки ряда решений и удовлетворял списку требований:
- сервис должен был работать сразу на N сайтах
- динамическая сегментация аудитории
- Коллаборативная фильтрация для целей прогнозирования в разных состояниях сегментов аудитории
- предварительно сгенеренная статика в виде рекомендованного контента + динамический подмес товаров на основе анализа кликстрима
- изменение контента, практически в реал-тайме, из оперативной памяти, с учетом динамических коэффициентов
Об этом подробнее 🙂 И о тех граблях, которые помогали нам меняться стек в лучшую сторону.
Шардинг по префиксу индекса с уникальностью
Пример выбора ключа, когда пришлось остановить выбор на менее селективном ключе шардинга.
Сущности в нашем проекте Smartcat:
- Аккаунт (Account) — владелец документов.
- Документ (Document) — документ для перевода (идентификатор глобально уникальный).
- Сегмент (Segment) — предложение в документе.
Поля сегмента:
- accountId — идентификатор аккаунта.
- idInAccount — уникальный идентификатор в рамках аккаунта.
- documentId — идентификатор документа.
- order — порядковый номер сегмента в документе.
- и другие…
Индексы:
- { documentId: 1, idInAccount: 1 }
- { documentId: 1, order: 1 }
- { accountId: 1, idInAccount: 1 }, { unique: true }
Большинство запросов включают в себя documentId. Значит, выбирать будем из первых двух индексов, и это исключает шардинг по accountId. Тогда будем убирать уникальность с третьего индекса. Каждый документ имеет глобально уникальный идентификатор и не может принадлежать двум аккаунтам. Следовательно, первый индекс можно сделать уникальным, а со второго убрать уникальность.
idInAccount в нашем коде известен только в одном поисковом запросе, т.е. при выборе полного ключа шардинга сегменты документа могут быть разделены по разным чанкам, и поисковые запросы могут обращаться к нескольким шардам.
Рассматриваем вариант шардинга по { documentId: 1} — это допустимо, т.к. он является префиксом с уникальностью. Мы оцениваем максимальный объем сегментов одного документа — это примерно 50 Mb. Значит, документ отлично входит в размер одного чанка шардинга (он у нас 64 Mb).
Результат:
- Строим индекс с уникальностью по { documentId: 1, idInAccount: 1 }
- Убираем уникальность с { accountId: 1, idInAccount: 1 }
- Включаем шардинг по { documentId: 1}
Zero Inbox. Гайд по наведению порядка в почте
Моему почтовому ящику на gmail много лет. Более десяти лет самостоятельного существования, а также в нем лежат архивы из других почтовых систем. Все эти годы я использовал его так как и нужно использовать умные продукты:
- Не сортировал письма, так как для этого есть хороший поиск
- Не удалял письма с большими вложениями, так как для этого есть куча пространства
- Не категоризировал письма и позволял сервису обучаться на моих привычках, для автоматических эвристик
И это было чудесное время, пока мне не захотелось навести в нем порядок.
Задача навести порядок не была самоцелью, скорее меня начало раздражать что весь inbox завален каким-то мусором: заказы из магазинов, рекламные письма, обновления от почты, все это вперемешку с периодическими дайджестами и личной перепиской.
^^ Это не настоящий скрин моей почты. Просто картинка для превью.
Руководство по выживанию с MongoDB
Все хорошие стартапы либо быстро умирают, либо дорастают до необходимости масштабироваться. Мы смоделируем такой стартап, который сначала про фичи, а потом про перфоманс. Перфоманс будем улучшать с MongoDB — это популярное NoSQL-решение для хранения данных. С MongoDB легко стартовать, и многие проблемы имеют решения «из коробки». Однако, когда нагрузка растет, вылезают грабли, о которых вас заранее никто не предупреждал… до сегодняшнего дня!
Моделирование проводит Сергей Загурский, который отвечает за инфраструктуру бэкенда вообще, и MongoDB в частности, в Joom. Также был замечен в серверной части разработки MMORPG Skyforge. Как сам себя описывает Сергей — «профессиональный набиватель шишек собственным лбом и граблями». Под микроскопом — проект, который использует стратегию накопления для управления техническими долгом. В этой текстовой версии доклада на HighLoad++ будем двигаться в хронологическом порядке от возникновения проблемы до решения с помощью MongoDB.
Шардирование
всем нам привычный
Создадим 2 пустые директории, в которых будут храниться данные:
Поднимаем 2 инстанса mongod командами:
А в следующем терминале:
Параметр —dbpath указывает путь, по которому будут храниться файлы .0, .1, .2 и .ns. В файлах .0, .1, .2 и т.д. хранятся сами данные данного инстанса в бинарном виде, а в файле .ns — пространство имен, необходимое для навигации по БД. —port — порт, по которому будет доступен объект БД.
После первого пункта у нас имеется два инстанса:
Создадим пустую директорию, в которой будут храниться данные config сервера:
Поднимаем конфиг сервер, командой
Параметр —configsvr указывает, что новый инстанс будет именно конфиг сервером, —dbpath — путь, по которому будут храниться данные
После второго пункта картина выглядит так (обращу ваше внимание, что пока эти сущности ничего не знают друг о друге):
Поднимаем mongos, командой
По этой команде поднимается mongos на порту 27100, на вход ему нужно передать перечень конфиг серверов с их хостами, на которые он будет обращаться. Если мы при поднятии монгоса не указали порт, то он использует по умолчанию 27017 (если он не занят)
После поднятия монгоса:
Приконнектимся к монгосу, указав порт, на котором мы его поднимали, командой
После этого получим:
Остался финальный шаг — добавляем наши шарды в кластер
Эти 2 команды нужно выполнить на монгосе, коннекшен к которому был открыт в пункте 4. Командой db.printShardingStatus() можно просмотреть статус шардинга. Убедимся, что шарды добавлены, в терминале мы должны увидеть что-то вроде:
Имеем финальную картину:
bank
db.printShardingStatus()
partitionedtrue
sh.status(true)db.printShardingStatus()db.printShardingStatus()
Run MongoDB Community Edition as a Windows Service¶
Starting in version 4.0, you can install and configure MongoDB as a
Windows Service during the install, and the MongoDB service
is started upon successful installation. MongoDB is configured using
the configuration file .
Start MongoDB Community Edition as a Windows Service
To start/restart the MongoDB service, use the Services console:
- From the Services console, locate the MongoDB service.
- Right-click on the MongoDB service and click Start.
To begin using MongoDB, connect a shell
to the running MongoDB instance. To connect, open a Command
Interpreter with Administrative privileges and run:
copy
"C:\Program Files\MongoDB\Server\4.2\bin\mongo.exe"
For more information on connecting a
shell, such as to connect to a MongoDB instance running on a different
host and/or port, see The mongo Shell. For information on CRUD
(Create,Read,Update,Delete) operations, see:
- Insert Documents
- Query Documents
- Update Documents
- Delete Documents
Stop MongoDB Community Edition as a Windows Service
To stop/pause the MongoDB service, use the Services console:
- From the Services console, locate the MongoDB service.
- Right-click on the MongoDB service and click Stop (or Pause).
О чем статья
Это попытка обобщить свой опыт разработки с MongoDB. Мое первое практическое знакомство с этой СУБД состоялось в 2010 году в виде проекта-прототипа. После прохождения первых онлайн-курсов 10gen я уже уверенно применял MongoDB параллельно с SQL, но только на вспомогательных и исследовательских проектах.
С 2013 года я работаю в компании Smartcat на должности ведущего разработчика. Все новые проекты мы начинали только с использованием MongoDB. Большая часть разработки у нас ведется на C#, но есть проекты и на других языках. Во всех проектах я либо сам проектировал схему данных, либо активно консультировал коллег. На протяжении всего времени жизни проектов я наблюдал за характером использования СУБД. В 2015 году основной проект сайта Smartcat был плавно переведен с MSSQL на MongoDB.
Это описание того, что надо учесть в разработке, чтобы проект был гибок в масштабировании.
Можно попасть в ситуацию, когда есть успешно работающий проект-прототип. Пока пользователей мало, все оптимизации откладываются. Но, сервис «раскручивается», пользователи уже пришли, и работу нельзя останавливать. А масштабирование невозможно без глубокого рефакторинга схемы данных БД, и простые запросы, работавшие вчера, сегодня «кладут» систему.
Мое основное направление разработки — бэкенд на C#, поэтому в этом ключе и будут примеры.
Итак, попробуем описать этапы развития проекта с точки зрения использования MongoDB, от одиночного сервера до шард-кластера и причин, которые вынуждают нас переходить к следующей, более сложной конфигурации серверов БД.
Standalone
Конечно, для 24/7 проекта мы не рассматриваем одиночный сервер. Но если это внутренний проект или решение для офиса, то вполне сойдет. Надо лишь планировать возможность остановки сервиса для снятия бэкапа или предусмотреть программный экспорт/импорт всех нужных данных. Такая конфигурация особых вопросов в администрировании не вызывает, но и надежностью не блещет.
В основном, одиночные сервера используются для разработки. Это может быть общий сервер — в этом случае удобно пригласить коллегу к разработке приложения на одной БД. Это может быть локально запущенный сервис.
Самое главное — мы ожидаем, что программные решения в клиентском коде будут идентично работать в условиях репликасет. А также, хоть это и ощущается как далекая перспектива, в условиях шард-кластера.
Репликация
Репликация — это необходимое условие непрерывной работы боевого проекта. Мы совершенно точно рассчитываем на:
- Автоматическое или ручное восстановление после отказа отдельных серверов-копий.
- Возможность «заморозки» состояния БД для исследований или снятия бэкапа.
- Переезд из одного датацентра в другой без выключения сайта.
При работе репликасет мы должны постоянно заботиться о том, чтобы:
- Не потерять связность сети и ведущий сервер.
- Ведомым не сильно отстать.
- Не потерять синхронизацию из-за исчерпания opLog.
Может быть потом мы сумеем что-нибудь почитать с ведомых серверов, чтобы разгрузить наш единственный пишущий сервер.
Install MongoDB Community Edition¶
Prerequisites
Users on Windows versions previous to Windows 10 must install the
following update before installing MongoDB:
➤ Update for Universal C Runtime for Windows
Users on Windows 10, Server 2016 and Server 2019 do not need this
update.
Procedure
Follow these steps to install MongoDB Community Edition using the
MongoDB Installer wizard. The installation process installs both the
MongoDB binaries as well as the default configuration file .
1
Download the installer.
Download the MongoDB Community installer from the following
link:
➤ MongoDB Download Center
- In the Version dropdown, select the version of
MongoDB to download. - In the Platform dropdown, select Windows.
- In the Package dropdown, select msi.
- Click Download.
2
Run the MongoDB installer.
For example, from the Windows Explorer/File Explorer:
- Go to the directory where you downloaded the MongoDB installer ( file).
By default, this is your directory. - Double-click the file.
3
Follow the MongoDB Community Edition installation wizard.
The wizard steps you through the installation of MongoDB and MongoDB
Compass.
-
- Choose Setup Type
-
You can choose either the Complete (recommended for
most users) or Custom setup type. The
Complete setup option installs MongoDB and the
MongoDB tools to the default location. The Custom
setup option allows you to specify which executables are
installed and where.
-
- Service Configuration
-
Starting in MongoDB 4.0, you can set up MongoDB as a Windows service
during the install or just install the binaries.- MongoDB Service
- MongoDB
The following installs and configures MongoDB as a Windows
service.Starting in MongoDB 4.0, you can configure
and start MongoDB as a Windows service during the install, and
the MongoDB service is started upon successful
installation.-
Select Install MongoD as a Service MongoDB as a service.
-
Select either:
-
Run the service as Network Service user (Default)
This is a Windows user account that is built-in
to Windowsor
-
Run the service as a local or domain user
- For an existing local user account, specify a
period (i.e. ) for the Account
Domain and specify the Account Name and
the Account Password for the user. - For an existing domain user, specify the
Account Domain, the
Account Name and the
Account Password for that user.
- For an existing local user account, specify a
-
-
Service Name. Specify the service
name. Default name is . If you already
have a service with the specified name, you must
choose another name. -
Data Directory. Specify the data
directory, which corresponds to the
. If the
directory does not exist, the installer will
create the directory and sets the directory access
to the service user. -
Log Directory. Specify the Log
directory, which corresponds to the
. If the
directory does not exist, the installer will
create the directory and sets the directory access
to the service user.
The following installs MongoDB only and does not
configure MongoDB as a Windows service.If you choose not to configure MongoDB as a Windows service,
uncheck the Install MongoD as a Service.
-
- Install MongoDB Compass
-
For Windows 8 or greater, you can have the wizard install
MongoDB Compass.
To install Compass, select Install MongoDB Compass (Default).Note
The install script requires PowerShell version 3.0 or
greater. If you have Windows 7, unclick the
Install MongoDB Compass. You can
manually download Compass from the Download
Center.
-
When ready, click Install.
If You Installed MongoDB as a Windows Service
The MongoDB service is started upon successful installation .
To begin using MongoDB, connect a shell
to the running MongoDB instance. Either:
-
From Windows Explorer/File Explorer, go to directory and double-click on
. -
Or, open a Command Interpreter with Administrative
privileges and run:copy
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
For information on CRUD (Create,Read,Update,Delete) operations, see:
- Insert Documents
- Query Documents
- Update Documents
- Delete Documents
| The MongoDB instance is configured using the configuration file . |