Бази данни: Кратка история Текстови файлове (като CSV) Key-value stores (BerkleyDB, Redis, shelve) Обектни бази данни Релационни бази данни (MySQL, SQLite, PostgreSQL, Oracle) Документни бази данни (MongoDB, CouchDB)
Видове схеми (schema) (Схема - структурата на една база данни) Фиксирана схема Силна, добре обмислена структура Базата гарантира валидността на данните Нормализация (данните не се повтарят) Опит, стабилност и традиции Но... Промените по схемата са тромави до невъзможни Денормализация
Видове схеми 2 Динамична схема Key-value и документни бази данни Структурата е по конвенция Бързо разработка и лесни промени Гъвкави типове данни Но... Няма стандарт и портабилност По-малко помощни технологии Сами гарантирате интегритета на данните Кодът ви трябва да е очаква много повече специални случаи
Защо релационни бази данни? Доказан вариант Интегритет ACID: Atomicity, Consistency, Isolation, Durability Всеки програмист може да работи с тях Ако не ни кефи релационният модел имаме ORM
Но... Лесно се ползват, трудно се ползват правилно Data Definition Language е сложен Data Modification Language е още по-сложен LEFT INNER JOIN? RIGHT OUTER JOIN? Нормализация (1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, 6NF) Индекси Транзакции Нива на изолации Triggers ORM...
Документни бази данни Като key-value store, но със структурирани стойности. Стойностите са JSON (ама не баш) документи. Отделните полета могат да съдържат сложни обекти (няма нужда от релации). Може да се търси и индексира по отделни полета в документа. Могат да се променят отделни полета в документа.
Влиза Mongo mongodb.org Клиент/сървър документна база данни Бърза разработка Стабилна - ползва се в големи сайтове Удобен език за търсене и редактиране Репликация и многосървърна работа, търсене, записване на файлове, MapReduce, и т.н. Memory-mapped files GridFS Feature-rich
Как се казват нещата в Mongo Наименовани бази (пр. "myapp") ...съдържат наименовани колекции (пр. "users") ...съдържат записи с ключ и документ в BSON (пр. ключ "25")
Операции collection.insert(value) collection.find_one({conditions}) collection.find({conditions}) collection.update({conditions}, {changes}) collection.save({document})
Ключове и стойности Стойноста на всеки Mongo запис е JSON-подобен обект Ключът на всеки запис е или случайно избран, или стойноста на полето _id в обекта Случайно избраните ключове изглеждат така: 4c2209f9f3924d31102bd84a и са тип ObjectId