Более быстрое / массовое создание активных записей - PullRequest
1 голос
/ 26 апреля 2009

Мое приложение хранит данные о местоположении от входов GPS. При импорте файла GPX пользователь может иметь от 500 до 10000 точек данных GPS. Прямо сейчас у меня есть модель для каждого трекпоинта. Он отлично работает, но на вставке он медленный. 30+ секунд для 10000 точек данных. Есть ли лучший способ массовой вставки?

Все время тратится на сторону SQL - каждая вставка выполняется быстро, но 10 000 суммируются быстро. Каждый пользователь может иметь 100 файлов и 100 пользователей == длительное время вставки. Не все сразу, конечно.

Я был бы рад изменить архитектуру приложения, если бы это помогло, просто не уверен, какие у меня есть альтернативы. Я только использую данные GPS как единое целое. Я никогда не ищу одну запись в наборе, поэтому весь ActiveRecord излишний.

Я бы не хотел делать целую систему очередей только для того, чтобы справиться с этой глупой вставкой.

Ответы [ 2 ]

2 голосов
/ 20 января 2010

Используйте метод импорта ar-extensions, чтобы импортировать их все сразу: http://github.com/zdennis/ar-extensions/blob/master/ar-extensions/lib/ar-extensions/import.rb#L49-215

Проблема в том, что если вы импортируете каждую запись, выполнив #save, вы фактически создаете один оператор вставки на строку и вызываете все проверки вашей модели. Вместо этого вы можете создать более крупный оператор вставки SQL, который вставляет все данные сразу.

0 голосов
/ 26 апреля 2009

Подумал над этим, и мне кажется, что у меня есть два варианта: сериализовать хэш для большого двоичного объекта в БД или сохранить его в другом месте. У меня нет доступа к FS, но я могу использовать S3.

Значит, я изменил свой вопрос. Для хранения 100-килобайтных объектов, которые в значительной степени доступны только для чтения после создания, есть ли какие-либо отзывы об общих принципах хранения S3 и BLOB-объектов?

Я думаю эта тема , вероятно, охватывает то, что я сейчас ищу!

...