7. Динамические базы и коллекции
1. Не надо знать, существует ли база;
2. Не надо знать структуру базы;
3. Не надо знать имя коллекции
(таблицы);
4. У каждого документа (строки)
может быть своя структура.
7
8. Динамические базы и коллекции
$mongo = new Mongo;
$mongo->database->collection->insert(array(
“id” => 1,
“name” => “user”,
“pass” => “pass”
));
$mongo->database->collection->insert(array(
“id” => 1,
“action” => “control”,
“desc” => “description”
));
8
9. Динамические базы и коллекции
$mongo->database->collection->find(array(“id”:1));
array(
“id” => 1,
“name” => “user”,
“pass” => “pass”
);
array(
“id” => 1,
“action” => “control”,
“desc” => “description”
);
9
10. JSON-style and JavaScript
• Весь синтаксис запросов построен на основе
JSON-объектов:
> use database
> db.collection
.find({ id: {$ne: 1}}, { name: 1})
.sort(, ‘group.id’:-1, id:-1})
.limit(10);
• Для внутреннего хранения используется
BSON – бинарное представление JSON.
10
13. 2 таблицы = одна коллекция
MySQL MongoDB
TABLE USER {
id INT (10) AUTO_INCREMENT id : 1,
group_id INT (10) NOT NULL username: user,
username VARCHAR (255) NOT NULL password: somepass,
password VARCHAR (32) NOT NULL group: {
id : 1,
TABLE GROUP name: administrator
id INT (10) AUTO_INCREMENT }
name VARCHAR (255) NOT NULL }
13
24. Оптимизация и масштабирование
• Capped collections /
Round-robin Database:
При заполнении
всего отведенного
места, записи
удаляются по
принципу FIFO
24
28. 1. Все возвращаемые объекты в PHP по умолчанию
являются ассоциативными массивами;
28
29. 2. Индексы должны помещаться в память
db.collection.totalIndexSize();
3. Чем больше объект, тем ниже скорость
записи (экпоненциально)
db.collection.batchInsert(*,…-, ,…-,..+);
1’000 записей
x
=
1Kb документ
1Mb пакет
29
30. 4. Чем больше подключений, тем больше
памяти расходуется (линейно);
5. Очень медленно работает REMOVE.
После каждого атомарного удаления
перестраивается индекс?
db.collection.dropIndexes();
db.collection.remove({id:{$lte:100}});
db.collection.ensureIndex({id:1});
Используйте DROP;
db.collection.drop();
6. Для обновления используйте Safe Mode.
30
31. Вывод
• MongoDB – быстрая и легко
масштабируемая база данных;
• Понятный синтаксис
(JSON/JavaScript);
• Адаптирована для
высоконагруженных систем;
• Избыточна, без “foreign keys”.
31