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

Създайте клъстер от база данни в облака с MongoDB Atlas

От години MongoDB е най-популярната база данни за NoSQL както за физически лица, така и за предприятия, изграждащи широкомащабни приложения. Той е с отворен код, лесно мащабируем и осигурява висока наличност. Той също така поддържа много сложни заявки и фин контрол на паралелността.

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

За щастие има по-лесна алтернатива: MongoDB Atlas, напълно управлявана облачна версия на базата данни.

С MongoDB Atlas можете да създадете MongoDB клъстер на всеки основен доставчик на облак по ваш избор и да започнете да използвате този клъстер за броени минути. Използвайки базирания на браузър потребителски интерфейс на Atlas, можете също така интуитивно да конфигурирате клъстера и да наблюдавате неговата производителност.

В този урок ще ви покажа как да създадете клъстер от безплатни нива на MongoDB Atlas и да го използвате в приложение на Python.

Предварителни условия

Преди да продължите, уверете се, че имате инсталирано и конфигурирано следното на вашия компютър:

  • Python 3.4 или по-нова версия
  • pip 18.0 или по-висока

1. Създаване на клъстер

За да можете да използвате облачните услуги на MongoDB, ще ви трябва акаунт в MongoDB Atlas. За да създадете такъв, отидете на началната му страница и натиснете Започнете безплатно бутон.

След като попълните краткия формуляр за регистрация, ще бъдете пренасочени към съветника за създаване на клъстер. В първия му раздел ще трябва да изберете доставчика на облак и региона, който предпочитате.

За да сведете до минимум латентността на мрежата, в идеалния случай трябва да изберете регион, който е най-близо до вашия компютър. Засега обаче, тъй като създаваме клъстер от безплатни нива, уверете се, че избраният от вас регион е този, който има налично безплатно ниво. Освен това, ако използвате Google Cloud VM или екземпляр на Amazon EC2 като среда за разработка, първо изберете съответния доставчик на облак.

В нивото на клъстерите раздел изберете M0 опция за създаване на вашия безплатен клъстер от нива. Той предлага 512 MB пространство за съхранение, последна версия на MongoDB с WiredTiger като двигател за съхранение, набор от реплика от три възела и щедри 10 GB честотна лента на седмица.

И накрая, дайте смислено име на клъстера и натиснете Създаване на клъстер бутон.

MongoDB Atlas сега ще отнеме около пет минути, за да настрои вашия клъстер.

2. Конфигуриране на клъстер

Преди да започнете да използвате клъстера, ще трябва да предоставите няколко подробности, свързани със сигурността, така че превключете към Сигурност раздел.

Първо, в Потребители на MongoDB раздел, трябва да създадете нов потребител за себе си, като натиснете Добавяне на нов потребител бутон. В диалоговия прозорец, който се показва, въведете желаното от вас потребителско име и парола, изберете Четене и запис във всяка база данни привилегия и натиснете Добавяне на потребител бутон.

След това в белия списък за IP адреси раздел, трябва да предоставите списък с IP адреси, от които ще осъществявате достъп до клъстера. Засега е достатъчно да предоставите текущия IP адрес на вашия компютър.

Натиснете Добавяне на IP адрес бутон, за да създадете нов запис за IP адрес. В диалоговия прозорец, който се показва, натиснете Добавяне на текущ IP адрес бутон за автоматично попълване на Запис в белия списък поле. Освен това, ако нямате статичен IP адрес, добра идея е да маркирате, че е временен запис, като поставите отметка в Запазване като временен бял списък опция. Накрая натиснете Потвърди за да добавите записа.

3. Получаване на низа за връзка

Ще ви е необходим валиден низ за връзка, за да се свържете с вашия клъстер от вашето приложение. За да го получите, отидете на Общ преглед раздела и натиснете Свързване бутон.

В диалоговия прозорец, който се отваря, изберете Свържете приложението си опция и натиснете Използвам драйвер 3.6 или по-нова версия бутон. Вече трябва да можете да видите своя низ за връзка. Няма да съдържа действителната ви парола, така че ще трябва да я въведете ръчно. След като го направите, запишете низа, за да можете да го използвате по-късно.

4. Инсталиране на Python драйвер

За да можете да взаимодействате програмно с вашия MongoDB Atlas клъстер, трябва да имате инсталиран драйвер на MongoDB на вашия компютър. За езика за програмиране Python PyMongo е най-популярният достъпен днес драйвер. Препоръчителният начин да го инсталирате на вашия компютър е да използвате pip модул, както е показано по-долу:

python3 -m pip install pymongo --user

Може да сте забелязали, че вашият низ за връзка с MongoDB Atlas е mongodb+srv:// URI. За да разрешите на драйвера да работи с DNS SRV записи, трябва също да инсталирате dnspython модул. Ето как:

python3 -m pip install dnspython --user

5. Свързване към клъстер

Вече можете да използвате своя MongoDB клъстер от всяко приложение на Python. За да последвате мен, създайте нов скрипт на Python и го отворете с всеки редактор на код.

Вътре в скрипта, за да можете да взаимодействате с клъстера, ще ви е необходим екземпляр на MongoClient клас. Като единствен аргумент на неговия конструктор, предайте своя низ за връзка.

import pymongo



my_client = pymongo.MongoClient(

    'mongodb+srv://alice:[email protected]/test?retryWrites=true'

)

Горният конструктор се връща незабавно и няма да предизвика никакви грешки. Ето защо, за да проверите дали сте установили успешно връзка, ви предлагам да опитате да извършите операция върху клъстера. Извикване към server_info() метод, който ви дава различни подробности за вашия екземпляр на MongoDB, ще бъде достатъчен.

Ако няма грешки във вашия низ за връзка, извикването на server_info() методът ще успее. Ако обаче потребителското име или парола, които сте посочили, са неправилни, ще срещнете OperationFailure грешка. Следният код ви показва как да го хванете:

try:

    print("MongoDB version is %s" % 

            my_client.server_info()['version'])

except pymongo.errors.OperationFailure as error:

    print(error)

    quit(1)

Сега можете да продължите и да опитате да изпълните своя скрипт.

6. Вмъкване на документи

Низът за връзка по подразбиране, който получавате от уеб интерфейса на MongoDB Atlas, споменава база данни с име test . Нека продължим да използваме същата база данни. Ето как можете да получите препратка към него:

my_database = my_client.test

Базата данни на MongoDB се състои от една или повече колекции, които не са нищо друго освен групи от BSON документи (съкращение от двоичен JSON). Вашият безплатен клъстер от нива в MongoDB Atlas може да има максимум 500 колекции.

В името на реалистичен пример, нека създадем нова колекция с име foods . С PyMongo не е нужно изрично да извиквате никакъв метод, за да го направите. Можете просто да го препратите, сякаш вече съществува.

my_collection = my_database.foods

Струва си да се спомене, че горният код не създава foods незабавно събиране. Създава се само след като добавите документ към него. Така че нека сега създадем и добавим нов документ, съдържащ хранителни данни за хранителен артикул.

Използване на insert_one() Методът е най-простият начин за добавяне на документ към колекция. За да посочите съдържанието на документа, предавате речник на Python към метода. Следният примерен код ви показва как:

my_collection.insert_one({

    "_id": 1,

    "name": "pizza",

    "calories": 266,

    "fats": {

        "saturated": 4.5,

        "trans": 0.2

    },

    "protein": 11

})

Добавянето на документи един по един може да бъде неефективно. С insert_many() метод, можете да добавите няколко документа към вашата колекция наведнъж. Той очаква масив от речници като вход. Следният код добавя още два документа към колекцията:

my_collection.insert_many([

    {

        "_id": 2,

        "name": "hamburger",

        "calories": 295, "protein": 17,

        "fats": { "saturated": 5.0, "trans": 0.8 },

    },

    {

        "_id": 3,

        "name": "taco",

        "calories": 226, "protein": 9,

        "fats": { "saturated": 4.4, "trans": 0.5 },

    }

])

_id полето, което виждате в горните документи, е поле, което се използва като първичен ключ от MongoDB. Като такъв, той е неизменим и трябва да присъства във всички документи на MongoDB. Ако забравите да го включите, докато създавате документа си, PyMongo ще го добави автоматично за вас и ще му присвои автоматично генерирана уникална стойност.

7. Изпълнение на заявки

Когато добавите няколко документа към колекцията си, можете да изпълнявате заявки за нея, като извикате find() метод, който връща Cursor обект, който можете да повторите. Ако не му предадете никакви аргументи, find връща всички документи в колекцията.

Следният код ви показва как да отпечатате имената на всички хранителни продукти, присъстващи в нашата колекция:

my_cursor = my_collection.find()



for item in my_cursor:

    print(item["name"])



# Output is:

#   pizza

#   hamburger

#   taco

Ако искате find() метод, за да върнете само онези документи, които отговарят на определени критерии, трябва да му подадете речник на Python. Например, ако искате да намерите документа, чието name полето е зададено на "пица", можете да използвате следния код:

my_cursor = my_collection.find({

    "name": "pizza"

})

За по-сложни заявки можете да използвате интуитивно наименуваните оператори на заявки на MongoDB в речниците, които предавате на find() метод. Например, следният код ви показва как да използвате $lt оператор за намиране на документи, чиито calories полето е зададено на стойност, по-малка от 280:

my_cursor = my_collection.find({

    "calories": { "$lt": 280 }

})



for item in my_cursor:

    print("Name: %s, Calories: %d" % 

        (item["name"], item["calories"]))



# Output is:

#   Name: pizza, Calories: 266

#   Name: taco, Calories: 226

Като използвате нотацията с точки, можете също да използвате вложени полета във вашите заявки. Следващият код ви показва как да намерите документи, чийто trans поле, което е вътре в fats поле, се задава на стойност, която е по-голяма или равна на 0,5:

my_cursor = my_collection.find({

    "fats.trans": { "$gte": 0.5 }

})



for item in my_cursor:

    print("Name: %s, Trans fats: %.2f" % 

        (item["name"], item["fats"]["trans"]))



# Output is:

#   Name: hamburger, Trans fats: 0.80

#   Name: taco, Trans fats: 0.50

8. Актуализиране и изтриване на документи

Много подобен на insert_one() и insert_many() методите са update_one() и update_many() методи, които можете да използвате, за да промените съдържанието на документи, които вече са във вашата колекция. И двата метода за актуализиране, в допълнение към нови данни, се нуждаят от заявка за нулиране на документите, които трябва да бъдат променени.

Можете да използвате различни оператори за актуализиране във вашите методи за актуализиране. Най-често използваният е $set , което ви позволява да добавяте нови полета или да актуализирате стойностите на съществуващите полета. Следващият код ви показва как да добавите две нови полета с име fiber и sugar към документа, чието name полето е зададено на "taco":

my_collection.update_one(

    { "name": "taco" }, # query

    {

        "$set": {       # new data

            "fiber": 3.95,

            "sugar": 0.9

        }

    }

)

Ако заявката предавате на update_one() метод връща повече от един документ, само първият документ се актуализира. update_many() методът няма това ограничение.

И накрая, като използвате delete_one() и delete_many() методи, можете да изтривате документи във вашите колекции. И двата метода се нуждаят от заявка, за да се определи кои документи трябва да бъдат изтрити. Ето как можете да изтриете всички документи, чиито calories полето е зададено на стойност, по-малка от 300:

my_collection.delete_many({

    "calories": {

        "$lt": 300

    }

})



# Deletes all the three documents

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor:разлика между имената на колекции, променливи, публикации и абонаменти?

  2. Ограничение за попълване на възел js mongoose

  3. Използвайте MongoEngine и PyMongo заедно

  4. MongoDB изтеглящ елемент от масив от колекция

  5. Мониторинг на база данни с ClusterControl