У багатьох людей згадка про "базу даних" відразу викликає асоціації з MySQL, таблицями і SQL-запитами. MySQL, як і Oracle чи Postgresql, є реляційною СКБД (системою керування базами даних). Інформація в них зберігається у вигляді зв’язаних таблиць. Кожна таблиця має власну схему (структуру), яка включає назву таблиці та набір полів (атрибутів, колонок). Сукупність усіх схем таблиць становлять схему реляційної бази даних.
Якщо дані у нас різнотипні, наприклад, є товари магазину, у якому продають паперові та електронні книги. Ці типи товарів мають різні атрибути. Тому, при зберіганні інформації про них у реляційній БД потрібно або мати одну велику таблицю, яка об'єднує всі атрибути, або зберігати дані про різні товари у різних таблицях, а тоді об'єднувати їх JOIN. Чим складніша схема бази, тим складнішими стають запити на отримання інформації. Виконання складних запитів збільшує навантаження на сервер бази даних. Наразі набирають розповсюдження бази даних, які не мають схеми - NoSQL БД. Збереження даних у таки базах є значно менш затратним. NoSQL розшифровується як Not Only SQL. Однією з них є MongoDB.
MongoDB - відкрите програмне забезпечення, яке є розширюваною, високопродуктивною, вільною від схем, документо-орієнтованою базою даних, яка написана на С++. Розробляється з жовтня 2007 року компанією 10gen. Зберігає всі ваші дані у форматі бінарного JSON (BSON). Вже має широке застосування у реальних проектах.
MongoDB - відкрите програмне забезпечення, яке є розширюваною, високопродуктивною, вільною від схем, документо-орієнтованою базою даних, яка написана на С++. Розробляється з жовтня 2007 року компанією 10gen. Зберігає всі ваші дані у форматі бінарного JSON (BSON). Вже має широке застосування у реальних проектах.
Основні можливості MongoDB:
- Документо-орієнтоване сховище (проста та потужна JSON-подібна схема даних)
- Повна підтримка індексів
- Підтримка відмовостійкості і масштабованості
- Гнучка мова для формування запитів
- Динамічні запити
- Профілювання запитів
- Швидкі оновлення
- Журналювання операцій, що модифікують дані в БД
- Підтримка MapReduce
Нижче наведено таблицю відповідності між основним термінами MySQL та MongoDB:
MySQL term | Mongo term/concept |
---|---|
database | database |
table | collection |
index | index |
row | BSON document |
column | BSON field |
join | embedding and linking |
primary key | _id field |
group by | aggregation |
Якщо у реляційних БД таблиця має вигляд:
то колекція документів у MongoDB виглядає абсолютно інакше:
Last Name | First Name | Date of Birth |
---|---|---|
DUMONT | Jean | 01-22-1963 |
PELLERIN | Franck | 09-19-1983 |
GANNON | Dustin | 11-12-1982 |
то колекція документів у MongoDB виглядає абсолютно інакше:
{
"_id": ObjectId("4efa8d2b7d284dad101e4bc9"),
"Last Name": "DUMONT",
"First Name": "Jean",
"Date of Birth": "01-22-1963"
},
{
"_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
"Last Name": "PELLERIN",
"First Name": "Franck",
"Date of Birth": "09-19-1983",
"Address": "1 chemin des Loges",
"City": "VERSAILLES"
}
Кожне поле документа може містити складну підструктуру довільної глибини вкладеності:
{
"_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
"Last Name": "PELLERIN",
"First Name": "Franck",
"Date of Birth": "09-19-1983",
"Address": {
"Street": "1 chemin des Loges",
"City": "VERSAILLES"
}
}
За рахунок такої структури запити є простішим та логічнішими. Виконання операцій на великих об'ємах даних займає не більше (а, зазвичай, значно менше) часу. Про порівняння швидкодії MySQL та MongoDB можна почитати тут: http://habrahabr.ru/post/87620/
Встановлюється в ubuntu традиційно apt-get'ом.
Далі стартуємо сервер, опція -dbpath вказує шлях, де зберігаються дані:
MongoDB має підтримку драйверів для різних мов програмування. Зокрема підтримується й R. Про використання MongoDB в R - пост у найближчий час.
Детальніше про MongoDB та роботу з нею:
Встановлюється в ubuntu традиційно apt-get'ом.
Далі стартуємо сервер, опція -dbpath вказує шлях, де зберігаються дані:
> mongod --dbpath /var/lib/mongodb/
Тоді під'єднуємось клієнтом:> mongo
Надіслати запит серверу можна аналогічно як і в клієнті MySQL:> show dbs
company (empty)
crunch 0.999755859375GB
local (empty)
mongo (empty)
> db.version()
2.0.4
> db.stats()
{
"db" : "test",
"collections" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"numExtents" : 0,
"indexes" : 0,
"indexSize" : 0,
"fileSize" : 0,
"nsSizeMB" : 0,
"ok" : 1
}
http://www.mongodb.org/
http://mongly.com/
The Little MongoDB Book
Для тих, хто звик то SQL, тут можна ознаймитись з "перекладом" з SQL у запити MongoDB.
Немає коментарів:
Дописати коментар