Chaque jour, je reçois un stock de documents (une mise à jour). Ce que je veux faire, c'est insérer chaque élément qui n'existe pas déjà.
- Je veux également garder une trace de la première fois que je les ai insérés et de la dernière fois que je les ai vus dans une mise à jour.
- Je ne veux pas avoir de documents en double.
- Je ne souhaite pas supprimer un document qui a déjà été enregistré, mais qui ne figure pas dans ma mise à jour.
- 95% (estimé) des enregistrements ne sont pas modifiés au jour le jour.
J'utilise le pilote Python (pymongo).
Ce que je fais actuellement est (pseudo-code):
for each document in update:
existing_document = collection.find_one(document)
if not existing_document:
document['insertion_date'] = now
else:
document = existing_document
document['last_update_date'] = now
my_collection.save(document)
Mon problème est qu'il est très lent (40 minutes pour moins de 100 000 enregistrements, et j'en ai des millions dans la mise à jour). Je suis sûr qu'il y a quelque chose de intégré pour faire cela, mais le document pour update () est mmmhhh .... un peu laconique .... ( http://www.mongodb.org/display/DOCS/Updating )
Quelqu'un peut-il conseiller comment le faire plus rapidement?