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 aussi garder la trace de la première fois où je les ai insérés, et de la dernière fois où je les ai vus dans une mise à jour.
- Je ne veux pas avoir de documents en double.
- Je ne veux pas supprimer un document qui a déjà été enregistré, mais qui ne figure pas dans ma mise à jour.
- 95 % (estimation) des enregistrements ne sont pas modifiés d'un jour à l'autre.
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 presque sûr qu'il y a quelque chose d'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 me conseiller sur la manière de le faire plus rapidement ?