Новые возможности MongoDB 2.4
Основано на презентации Элиота Хоровица (CTO, 10gen)
Изменения затронули:
1. Возможности для разработчиков
2. Изменения в работе
3. Производительность
4. Безопасность
5. Возможности для корпоративной версии
1. Изменения для разработчиков
Географические данные
Более точная сферическая модель
db.shapes.ensureIndex({shape: "2dsphere"})
Поддержка GeoJSON
http://geojson.org/
Формат обмена географическими данными на базе JSON
{ shape : { type : "Point" , coordinates : [ 40, 5 ] } }
{ shape : { type : "LineString" , coordinates : [ [ 40 , 5 ] , [ 41 , 6 ] ] } }
{ shape : { type : "Polygon" ,
coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
} }
Пересечение полигонов
db.shapes.find({
shape: {$geoIntersects: {
$geometry: { type: "Polygon",
сoordinates: [[ [0,0], [3,0], [3,3], [0,3], [0,0] ]]
}
}}
})
$geoWithin проверяет включение фигур в фигуру, заданную
условием поиска. Быстрее чем $near, так как не сортирует.
db.places.find( { shape :
{ $geoWithin :
{ $geometry :
{ type : "Polygon" ,
coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
} } } } )
Новые возможности агрегации
● Появилась в 2.2, улучшилась в 2.4
● Теперь в 3–5 раз быстрее
● Поддерживаются $near и $within в запросах к географическим
данным
● Поддерживается $concat: [ "$item.type", " ", "$item.category" ]
● Поддерживаются бинарные данные (передача дальше)
Поиск текста
(разберём отдельно)
Ограниченные по размеру массивы
(capped arrays)
$push: { quizzes: { $each: [ { id: 3, score: 8 },
{ id: 4, score: 7 },
{ id: 5, score: 6 } ],
$sort: { score: 1 },
$slice: -5
}
}
$setOnInsert
добавляет контроль над вставляемыми значениями
db.coll.update( { _id: 1 },
{ $setOnInsert: { x: 25, y: 30 } },
{ upsert: true } )
Старые операторы тоже работают: $inc, $rename, $set, $unset
2. Изменения в работе
Шардинг с хеш-ключом
Проще поддерживать, меньше перебалансировать
Лучше распределение операций чтения и записи
Можно сравнивать на равенство, нельзя на больше-меньше
Хранятся 64 бита от 128-битного MD5
Шардинг с хеш-ключом
Приводит числа с плавающей запятой
к 64-битным целым!
Шардинг с хеш-ключом
db.active.ensureIndex( { a: "hashed" } )
Анализ рабочих данных
Working set – то, что в памяти
MongoDB лучше всего себя чувствует, когда working set < ОЗУ
Теперь есть средства оценки
db.serverStatus( { workingSet: 1 } )
db.runCommand( { serverStatus: 1, workingSet: 1 } )
"workingSet" : {
"note" : "thisIsAnEstimate",
"pagesInMemory" : <num>, // Сколько страниц по 4к
"computationTimeMicros" : <num>,
"overSeconds" : num // Время оценки
},
Управление операциями
индексирования
Теперь их можно принудительно завершить :)
Индексы могут строиться в фоновом режиме одним экземпляром БД параллельно
друг с другом
Улучшена репликация
Улучшен алгоритм определения настоящих сбоев от просто глюков сети
Ускорена начальная синхронизация
3. Улучшения в
производительности
V8
Javascript быстрее везде, где он нужен: MapReduce, $where...
Лучше работает многопоточность
Агрегация быстрее в 2-5 раз
Ускорен подсчёт результатов
Ускорен $elemMatch (поиск по массиву)
3. Улучшения в безопасности
Роли
read
readWrite
dbAdmin
userAdmin
clusterAdmin
SSL
Инстансы могут (не обязательно) запрашивать сертификат,
выданный авторизованным центром
mongod --sslOnNormalPorts --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem
mongo --ssl --sslPEMKeyFile /etc/ssl/client.pem
4. Улучшения для корпоративных
клиентов
Улучшенная безопасность
Kerberos
Встроенный SSL
Мониторинг (On-Prem Monitoring)
Визуализация
Отслеживание более сотни различных событий
Возможности как у MongoDB Monitoring Service
Интеграция с внешним
мониторингом
Simple Network Management Protocol
MongoDB была протестирована и сертифицирована как стабильно
работающая на Red Hat/CentOS, Ubuntu и Amazon Linux.
http://www.meetup.com/Krasnodar-MongoDB-User-Group
Глеб Лебедев
gleb@gleblebedev.com

Новое в Mongodb 2.4