J'essaye de pousser quelques gros fichiers (environ 4 millions d'enregistrements) dans une instance de mongo. Ce que j'essaie de faire, c'est de mettre à jour les données existantes avec celles des fichiers. L'algorithme ressemblerait à quelque chose comme:pymongo: une mise à jour plus efficace
rowHeaders = ('orderId', 'manufacturer', 'itemWeight')
for row in dataFile:
row = row.strip('\n').split('\t')
row = dict(zip(rowHeaders, row))
mongoRow = mongoCollection.find({'orderId': 12344})
if mongoRow is not None:
if mongoRow['itemWeight'] != row['itemWeight']:
row['tsUpdated'] = time.time()
else:
row['tsUpdated'] = time.time()
mongoCollection.update({'orderId': 12344}, row, upsert=True)
Donc, mettre à jour toute la ligne en plus « tsUpdated » si les poids sont les mêmes, ajouter une nouvelle ligne si la ligne n'est pas mongo ou mettre à jour toute la ligne, y compris « tsUpdated » ... c'est l'algorithme
La question est: est-ce que cela peut être fait plus rapidement, plus facilement et plus efficacement du point de vue de mongo? (Éventuellement avec une sorte d'insert en vrac)