Intereting Posts
ZF2 Как илиWhere () На PHP мне нужно избегать обратной косой черты? laravel не удалось открыть поток фатальной ошибки при запуске команды php artisan serve Как подключиться к MySQL с помощью php проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 1 Как отправить sms с использованием php-скрипта с ftp-сервера Запустите функцию JavaScript из оператора php if Создайте изображение с помощью Drupal imagecache перед использованием imagecache_create_path и getimagesize GeoIP и IP для страны в PHP Проблемы с OpenSSL на PHP – различное поведение для разных версий Могу ли я определить, был ли PNG-файл преобразован из многостраничного PDF-файла и разделить изображение на отдельные файлы с помощью ImageMagick? PHP simplehtmldom добавления атрибутов Пароль обновления для Laravel проходит проверку, но не обновляет запись PHP – get_headers () возвращает неверный результат, если символы не UTF находятся в URL-адресе php mysql: выбрать из базы данных и заполнить форму

MongoDB: миграция, обновление или вставка схемы

Хотя MongoDB не требует какой-либо фиксированной схемы, есть моменты, когда мы хотели бы перейти из одной структуры в другую.

Недавно я имел дело с небольшим набором данных (~ 200 КБ) и решил скомпилировать существующие данные, преобразовать модель данных и вставить в новые коллекции. Оказалось, что наши vps не были такими мощными, используя php-драйвер, я могу получить примерно до ~ 300 вставки / сек, после того как вы обеспечили следующее:

  • нет индекса перед вставкой.
  • как можно больше использовать пакетную вставку.

Интересно, просто ли я выбрал неправильный путь миграции или если есть какая-то передовая практика при изменении схемы в MongoDB?


После внесения некоторых предложений, я изменил отношение записи к 0 во время миграции, и это то, что я заметил:

  • Вставки все еще не такие быстрые, как ожидалось, макс при ~ 500 вставках / сек
  • После того, как вставка завершена, индексирование проходит очень быстро, возможно, из-за того, что ensureIndex является fire-and-forget с w=0 ?
  • Оставшееся обновление заняло некоторое время, возможно, из-за того, что операции индексирования блокируются? Затем он работает с разной скоростью (ранее он работал последовательно медленнее), опять же, возможно, индексирование происходило.
  • CPU и IO были в порядке. В большинстве случаев процессор имел около 90% свободного времени, а ожидания ввода-вывода составляли менее 10%.

Кроме того, чтобы не использовать наш PHP ORM для миграции, есть ли больше возможностей для оптимизации?

Solutions Collecting From Web of "MongoDB: миграция, обновление или вставка схемы"

Передача и сериализация всего в php-клиент и из него, вероятно, добавляет много накладных расходов. Запуск миграции из оболочки будет самым быстрым. Напишите их с обновлением или используйте курсор с функцией forEach для повторения и выполнения вызовов для сохранения .

См. Пример использования курсоров. MongoDB обновляет несколько записей массива (в нижней части).

Помните о моментальных снимках с помощью курсоров. Возможно, хотите обновить idempotent или использовать моментальный снимок, если коллекция не оштрафована.