видеозаписи с конференции Mongo Moscow.
Вот тезисы о возможностях, оставшиеся от просмотренного.
Перевод был не ахти, смотрел на английском, мог что-нибудь напутать.
Старался быть объективным, если не получилось — пишите :)
Вот тезисы о возможностях, оставшиеся от просмотренного.
Перевод был не ахти, смотрел на английском, мог что-нибудь напутать.
Старался быть объективным, если не получилось — пишите :)
- Данные в MongoDB — список хешей JSON, со вложенными массивами и хешами.
- Документ — это один такой хеш.
- Поэтому и нет ALTER TABLE — структуры записей не зависят друг от друга.
- Collations сейчас поддерживаются плохо, UTF — хорошо.
- Поразил синтаксис местами: В MongoDB пишут 'db.schema.find ( { «s», { $gt: «a» } } )' вместо 'where s > «a»'.
- Нет транзакций. Зато операции над документами гарантированно атомарны.
- При вызове getLastError проверяется, не возникла ли ошибка. В safe mode (во многих драйверах стоит по умолчанию) вызывается после каждой записи. Можно вызывать реже — меньше оверхед, но в случае ошибки придется перезаписать сразу пачку записей.
- getLastError можно ожидать не от всех серверов, а только от нескольких.
- Документы они предлагают создавать достаточно сложными (например, один документ — это блог с вложенными постами, каждый — со вложенным деревом комментов). Это имхо хреновая идея — нагрузка на один элемент может стать критически большой.
- Нет JOIN. Просто создавайте структуру данных так, чтобы он вам не понадобился. Мыши, станьте ежиками.
- Есть репликация, репликационный лог (не знаю, бинарный или командный).
- Если мастер репликации умер, среди слейвов через 10-20 с будет выбран новый.
- Есть шарды. По диапазонам, а не по хешам. Диапазоны для каждого шарда задаются в конфиге.
- Решардинг ведется корректировкой этих диапазонов. При этом записи на изменяемые шарды блокируются на время переноса.
- Данные в сторадже разбиваются по чанкам примерно по 200М.
- Есть MapReduce интерфейс, но про него только мельком упомянули.
- Есть spatial индексы.
- Есть mmapped storage с настраиваемой частотой fsync.
- Создалось впечатление, что индексы они держат только в памяти, но, возможно, это и не так. Не хотелось бы.
- Индексы — некие деревья, похожие на B-tree. Их лучше периодически перестраивать, но с версии 1.8 — достаточно редко.
- Интересно — в фильтрах запроса можно задавать условие $where и в нем писать условие фильтра на JS.
- Правда, индексы при этом использоваться не будут (еще бы).
- Есть sparse индексы — если атрибут задан только у малого числа документов, в индекс попадут только они.
- Covered indexes — это IOT, т.е. индекс содержит и другие атрибуты, для того, чтобы запрос мог вернуть результаты, пользуясь только данными из индекса, без доступа к самим чанкам с документами.
- Одна запись в индексе — около 40 байт оверхеда.
- Empirical query optimizer, что настораживает.
- Оптимизирует отношение index scan к числу возвращаемых документов.
- В любом случае, используемый индекс можно задать в хинте.
Комментариев нет:
Отправить комментарий