Я смотрел видео из Конференция Монго Москва .
Вот тезисы о возможностях, оставшиеся от увиденного.
Перевод был не очень, я смотрел на английском, может что-то напутал.
Постарался быть объективным, если не получилось, напишите :)
- Данные в MongoDB представляют собой список хэшей JSON с вложенными массивами и хешами.
- Документ является одним из таких хэшей.
- Именно поэтому нет ALTER TABLE — структуры записей не зависят друг от друга.
- Параметры сортировки в настоящее время поддерживаются плохо, UTF поддерживается хорошо.
- Меня поразил синтаксис в некоторых местах: в MongoDB пишут «db.schema.find( { "s", { $gt: "a" } } ) вместо "where s > "a"'.
- Никаких транзакций.
Но операции над документами гарантированно будут атомарными.
- При вызове getLastError он проверяет, произошла ли ошибка.
В безопасном режиме (во многих драйверах он стоит по умолчанию) он вызывается после каждой записи.
Можно вызывать реже — меньше накладных расходов, но в случае ошибки придется перезаписывать сразу кучу записей.
- getLastError можно ожидать не от всех серверов, а только от некоторых.
- Они предлагают создавать довольно сложные документы (например, один документ представляет собой блог с вложенными сообщениями, каждая из которых имеет вложенное дерево комментариев).
ИМХО это плохая идея - нагрузка на один элемент может стать критически большой.
- Нет ПРИСОЕДИНЯЙТЕСЬ.
Просто создайте структуру данных, чтобы она вам не требовалась.
Мыши, станьте ёжиками.
- Есть репликация, журнал репликации (не знаю, бинарный или командный).
- Если умрет мастер репликации, новый будет выбран из числа слейвов через 10-20 секунд.
- Есть осколки.
По диапазонам, а не по хешам.
Диапазоны для каждого шарда задаются в конфиге.
- Перешардинг осуществляется путем корректировки этих диапазонов.
В этом случае записи в измененные шарды блокируются на время переноса.
- Данные в сотых долях делятся на куски примерно по 200М.
- Интерфейс MapReduce существует, но он был упомянут лишь вкратце.
- Существуют пространственные индексы.
- Имеется хранилище mmaped с регулируемой частотой fsync.
- Кажется, что они хранят в памяти только индексы, но, возможно, это не так.
Я бы не хотел.
- Индексы — это некоторые деревья, похожие на B-дерево.
Лучше периодически их пересобирать, но начиная с версии 1.8 - довольно редко.
- Интересно, что в фильтрах запросов можно задать условие $where и записать условие фильтра на JS.
- Правда, индексы в этом случае использоваться не будут (конечно).
- Существуют разреженные индексы — если атрибут установлен только для небольшого количества документов, в индекс будут включены только они.
- Покрытые индексы — это IOT, т. е.
индекс также содержит другие атрибуты, поэтому запрос может возвращать результаты, используя только данные из индекса, без доступа к самим фрагментам документа.
- Одна запись в индексе составляет около 40 байт служебных данных.
- Оптимизатор эмпирических запросов, что настораживает.
- Оптимизирует коэффициент сканирования индекса в соответствии с количеством возвращаемых документов.
- В любом случае используемый индекс можно указать в подсказке.
-
Hp Dv600T: Еще Один Ноутбук Pavilion
19 Oct, 24 -
Дайджест It-Событий Августа
19 Oct, 24