Если вы следили за этим блогом некоторое время, вы видели, как я упоминал MongoDB более одного раза. Для меня очень интересно то, что в этом году я буду участвовать в обучении на PyCon и MongoDB для Python и MongoDB, которое будет охватывать MongoDB, PyMongo и Ming. Поэтому, надеюсь, что у вас возникнет желание узнать больше в этом уроке, я решил написать несколько постов, посвященных MongoDB, PyMongo и Ming с точки зрения начинающего.
Что такое MongoDB?
От MongoDB.org :
MongoDB (от «humongous») — это масштабируемая, высокопроизводительная база данных NoSQL с открытым исходным кодом.
Ну, это еще не все, что просвещает, поэтому я немного подробнее расскажу о возможностях MongoDB …
MongoDB — это база данных документов
MongoDB — это база данных документов, что означает, что вместо хранения «строк» в «таблицах», как вы делаете это в реляционной базе данных, вы храните «документы» в «коллекциях». Документы в основном являются объектами JSON (технически BSON . Это следует отличать от других баз данных типа NoSQL, таких как хранилища значений ключей (например, Tokyo Cabinet ), хранилища семейства столбцов (например, Cassandra ) или хранилища столбцов (например, MonetDB ).
MongoDB имеет гибкий язык запросов
Это одна вещь, с которой MongoDB приятно работать, особенно если вы пришли из другой базы данных NoSQL, где запросы являются либо ограничительными (хранилища значений ключей, которые могут быть запрошены только по ключу), либо громоздкими (что-то вроде CouchDB , требующее от вас записи карта-свертка запрос ). MongoDB имеет основанный на BSON язык запросов, который немного более строг, чем SQL, и который вы все равно можете использовать для выполнения многих задач.
Вот пример простого запроса MongoDB, который мы используем в SourceForge, чтобы найти все сообщения в блоге для проекта:
blog_post.find({'state':'published','app_config_id':{'$in':app_con
Есть также несколько других операторов, таких как ‘$ lt’, ‘$ nin’, ‘$ not’ и ‘$ or’, которые позволяют вам создавать довольно сложные запросы, хотя вы несколько ограничены в том, что вы можете делать в SQL (даже с одной таблицы).
MongoDB быстрый и масштабируемый
Один узел MongoDB способен с удобством обслуживать тысячи запросов в секунду на дешевом оборудовании. Когда вам нужно выйти за рамки этого, вы можете использовать либо репликацию (хранение нескольких копий данных на разных серверах), либо разделение (разделение данных между серверами). MongoDB даже включает логику для автоматической балансировки нагрузки ваших сегментов по мере увеличения базы данных и нагрузки.
Начало работы с MongoDB
Хотя MongoDB довольно проста в установке на (64-разрядных) системах, есть также несколько компаний, предоставляющих бесплатный уровень хостинга MongoDB, MongoLab и MongoHQ , которые отлично подходят для начала работы. Я без особой причины использовал MongoLab для своих собственных вещей, и я могу рекомендовать их, и это то, с чем у меня есть опыт, поэтому я расскажу об этом здесь.
Предположим, вы зарегистрировали учетную запись MongoLab. Сделав это, вы можете создать базу данных с помощью веб-панели управления и, щелкнув по ней, вы увидите информацию о соединении в верхней части страницы:
(Имя вашего сервера и номер порта могут отличаться.) На этом этапе в большинстве учебных пособий будет сказано установить и запустить инструмент командной строки ‘mongo’, чтобы начать исследовать вашу базу данных. Мы пропустим это здесь и напрямую используем драйвер Python PyMongo. Я люблю использовать virtualenv сам и ipython , так что вот подход, который я выберу здесь:
$ virtualenv mongo ... install messages ... $ source mongo/bin/activate (mongo) $ pip install pymongo ipython ... install messages ... (mongo) $ ipython ... banner message ...
Теперь, когда мы находимся в ipython, мы продолжим и подключимся к базе данных и создадим документ.
In [1]: import pymongo In [2]: conn = pymongo.Connection('mongodb://tutorial-test:[email protected]:29187/tutorial-test') In [3]: db = conn['tutorial-test'] In [4]: db.test_collection.insert({}) Out[4]: ObjectId('4f16f5c7eb03306a92000000') In [5]: db.test_collection.find() Out[5]: <pymongo.cursor.Cursor at 0x7fbb9006f350> In [6]: list(db.test_collection.find()) Out[6]: [{u'_id': ObjectId('4f16f5c7eb03306a92000000')}]
Ну, вот и все. В этой серии я опубликую несколько последующих статей, в которых будет более подробно рассказано, как выполнять различные запросы и обновления с использованием PyMongo , драйвера питона MongoDB, а также как эффективно использовать Ming , так что следите за обновлениями!