2015-04-15 2 views
-1

Я хочу, чтобы ускорить операцию вставки,Пакетные/насыпных вставки/обновления данных modelized

Потому что у меня есть миллиарды данных для вставки,

Так что я попытался временно хранить данные в @bulk_data

и вставить его в последнем шаге model.collection.insert(@bulk_data)

Но я получил NoMethodError: undefined method 'to_bson' for,

Поскольку я использую Dynami с атрибутами, поэтому я не мог просто хранить данные в каждый хэш

LOOP BEGIN 
@bulk_data = [] 
new_data = model.capitalize.constantize.new 
new_data.title = ... 
@bulk_data << new_data 
.... 
LOOP END 

model.collection.insert(@bulk_data) 

ответ

0

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

Это не верно. У вас не должно быть проблем с генерацией ключей динамически для вашего хэша.

В любом случае, для решения проблемы с вашей ошибкой 'to_bson' вы должны просто позвонить as_document в свою модель, если вставляете ее в свой массив @bulk_data. Как так:

@bulk_data << new_data.as_document 

Как примечание стороны, для ускорения ваших вставок вы должны убедиться, что вы не имеете большой набор индексов для поддержания. И, конечно же, убедитесь, что вы не используете какой-либо тип проверки подлинности, поскольку это может привести к тому, что код будет find каждый раз, когда вы захотите insert.

Смежные вопросы