середа, 11 липня 2012 р.

MongoDB - нереляційна база даних.

У багатьох людей згадка про "базу даних" відразу викликає асоціації з MySQL, таблицями і SQL-запитами. MySQL,  як і Oracle чи Postgresql, є реляційною СКБД (системою керування базами даних). Інформація в них зберігається у вигляді зв’язаних таблиць. Кожна таблиця має власну схему (структуру), яка включає назву таблиці та набір полів (атрибутів, колонок). Сукупність усіх схем таблиць становлять схему реляційної бази даних.
  Якщо дані у нас різнотипні, наприклад, є товари магазину,  у якому продають паперові та електронні книги. Ці типи товарів мають різні атрибути. Тому, при зберіганні інформації про них у реляційній БД потрібно або мати одну велику таблицю, яка об'єднує всі атрибути, або зберігати дані про різні товари у різних таблицях, а тоді об'єднувати їх JOIN. Чим складніша схема бази, тим складнішими стають запити на отримання інформації. Виконання складних запитів збільшує навантаження на сервер бази даних.  Наразі набирають розповсюдження бази даних, які не мають схеми - NoSQL БД.  Збереження даних у таки базах є значно менш затратним. NoSQL розшифровується як Not Only SQL.  Однією з них є MongoDB.

 MongoDB - відкрите програмне забезпечення, яке є розширюваною,  високопродуктивною, вільною від схем, документо-орієнтованою базою даних, яка написана на С++. Розробляється з жовтня 2007 року компанією 10gen. Зберігає всі ваші дані у форматі бінарного JSON (BSON). Вже має широке застосування у реальних проектах.
Основні можливості MongoDB:
  • Документо-орієнтоване сховище (проста та потужна JSON-подібна схема даних) 
  • Повна підтримка індексів
  • Підтримка відмовостійкості і масштабованості
  • Гнучка мова для формування запитів 
  • Динамічні запити 
  • Профілювання запитів 
  • Швидкі оновлення
  • Журналювання операцій, що модифікують дані в БД 
  • Підтримка MapReduce 
Нижче наведено таблицю відповідності між основним термінами MySQL та MongoDB:
MySQL termMongo term/concept
databasedatabase
tablecollection
indexindex
rowBSON document
columnBSON field
joinembedding and linking
primary key_id field
group byaggregation
Якщо у реляційних БД таблиця має вигляд:

Last NameFirst NameDate of Birth
DUMONTJean01-22-1963
PELLERINFranck09-19-1983
GANNONDustin11-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 вказує шлях, де зберігаються дані:
> 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
}

MongoDB має підтримку драйверів для різних мов програмування. Зокрема підтримується й R. Про використання MongoDB в R - пост у найближчий час. Детальніше про MongoDB та роботу з нею:
http://www.mongodb.org/
http://mongly.com/
The Little MongoDB Book
Для тих, хто звик то SQL, тут можна ознаймитись з "перекладом" з SQL у запити MongoDB.

Немає коментарів:

Дописати коментар