Поздно к игре здесь, но у вас были хорошие успехи с описанными здесь объемными операциями (http://api.mongodb.com/python/current/examples/bulk.html). Метод insert_many()
уже выполняет необходимое разделение под капотом. Мой рабочий процесс включал одну большую «объемную вставку», а затем многие последующие полные обновления коллекции. Использование процесса массового обновления было во много раз быстрее, чем зацикленное однократное обновление. Однако увеличение скорости% варьировалась в зависимости от размера входа (10, 100, 1000, 1
def unordered_bulk_write():
bulk_op = collection.initialize_unordered_bulk_op()
for primary_key in primary_key_list:
bulk_op.find({'fubar_key': primary_key}).update({'$set': {'dopeness_factor': 'unlimited'}})
try:
bulk_op.execute()
except Exception as e:
print e, e.details
def single_update_write():
for primary_key in primary_key_list:
collection.update_one({'fubar_key': primary_key}, {'$set':
{'dopeness_factor': 'unlimited'}})
Эти методы работают в МПГ ноутбук с %%timing
магии и я получил следующие характеристики. Методы были называется в карте в течение определенного фрагмента случайным образом выбранных первичных ключей с увеличением размеров порций.
WITH CHUNK_SIZE = 10
UNORDERED BULK WRITE = 1000 loops, best of 3: 871 µs per loop
SINGLE UPDATE ONE = 100 loops, best of 3: 2.47 ms per loop
WITH CHUNK_SIZE = 100
UNORDERED BULK WRITE = 100 loops, best of 3: 4.57 ms per loop
SINGLE UPDATE ONE = 10 loops, best of 3: 26.2 ms per loop
WITH CHUNK_SIZE = 1000
UNORDERED BULK WRITE = 10 loops, best of 3: 39 ms per loop
SINGLE UPDATE ONE = 1 loops, best of 3: 246 ms per loop
WITH CHUNK_SIZE = 10000
UNORDERED BULK WRITE = 1 loops, best of 3: 399 ms per loop
SINGLE UPDATE ONE = 1 loops, best of 3: 2.58 s per loop
WITH CHUNK_SIZE = 100000
UNORDERED BULK WRITE = 1 loops, best of 3: 4.34 s per loop
SINGLE UPDATE ONE = 1 loops, best of 3: 24.8 s per loop
Это возможно сделать [объемные вставки] (http://api.mongodb.org/python/current/tutorial.html#bulk-inserts) с PyMongo. Сообщение об ошибке предполагает, что у вас может не быть синтаксиса совершенно правильно. Можете ли вы поделиться своим кодом вставки? Кроме того, какую версию PyMongo и Python вы используете? – Stennie
Python 2.6, Pymongo 2.6.3 – blackmamba
Если синтаксис неверен, тогда он не должен вставлять какой-либо документ, не так ли? – blackmamba