10 миллионов… кажется большой цифрой, верно? Как я выяснил, в мире больших данных 10 миллионов — это обычный вторник. После создания и заполнения 10 миллионов точек данных в MongoDB с помощью mongoose/faker/async/await я переключаю свое внимание на заведение — вы знаете — SQL. Почему вы можете спросить?

Чейз, твоя схема такая простая! Вам никогда не понадобятся соединения или сложные отношения!

Я знаю и в чем-то согласен. Но то, что он простой — не означает, что NoSQL быстрее SQL. Как ученым и инженерам, нам разрешено выдвигать гипотезы, но затем мы должны проверить, что лучше для нашего текущего проекта/схемы.

Первый шаг в мире SQL — с какой базой данных SQL мы должны работать? MySQL является более простой установкой и часто имеет лучшую документацию/статьи о ней, в то время как PostgreSQL является идеальным выбором для производственных баз данных, где скорость чтения и записи имеет решающее значение и первоклассная поддержка JSON, но количество удобной для пользователя документации не так легко доступен и имеет значительно более сложный период настройки.

Я решил попробовать PostgreSQL, но поставил его на 4 часа. Если бы я не смог настроить, запустить и заполнить PostgreSQL.

Оказывается, установка PostgreSQL на Mac с использованием графического интерфейса Postgres занимает около 25 минут. Оттуда я смог создать две таблицы и соединить их с помощью внешнего ключа — и все это менее чем за час. Следующим шагом было найти способ, позволяющий моему javascript подключаться к базе данных, заполнять его, а затем запрашивать.

ОБНОВЛЕНИЕ: я переключился на одну таблицу по следующим причинам:

  • PostGres может обрабатывать массивы
  • Мое отношение деталей к фотографиям "один ко многим" не улучшило скорость, а только запутало дело
  • Самое главное, мне никогда не понадобится доступ к таблице фотографий отдельно от сведений о встрече

Первый шаг, который часто предпринимает любой, кто пытается это сделать, — это обратиться к библиотеке под названием pg. Это устанавливает соединение с вашей базой данных, позволяет отправлять запросы и довольно просто настроить. В общей сложности потребовалось около 30 минут чтения, чтобы правильно настроить конфигурацию и начать заполнение моей базы данных фейкером. Именно тогда я начал видеть ограничения pg, а именно, мы могли вставлять только по одному за раз. Чтобы вставить 10 000 точек данных, потребовалось 4,3 секунды, что означает, что это займет 71 минуту. Тьфу :( Разве PostGres не должен был быть быстрым? Особенно по сравнению с MongoDB? Как мне это улучшить?

Ответ? PG-Promise — обещаю.

Библиотека pg-promise имеет множество функций, и я коснусь лишь некоторых. После обновления 4.0 у него теперь есть метод helpers.insert, который будет обрабатывать вставку многих запросов одновременно, что уменьшит количество подключений/связей с базой данных. Он также теперь полностью поддерживает новый ES7 async/await, который делает связь между сервером и базой данных более чистой и удобной для чтения/работы.

После прочтения документации по pg-promise, блогов и нескольких видео — все заработало как хорошо смазанная машина. Результат?

10 миллионов точек данных заполнены за 13,2 минуты.

По сравнению с первой попыткой мы добились сокращения времени раздачи на 81% за счет перехода на pg-promise. Сумасшедший? Нет, просто еще один день в Hack Reactor.

Просто продолжайте кодировать,

Чейз Нортон