Codziennie otrzymuję zapas dokumentów (aktualizacja). Chcę wstawić każdy element, który jeszcze nie istnieje.
- Chcę również śledzić, kiedy wstawiłem je po raz pierwszy i kiedy ostatnio widziałem je w aktualizacji.
- Nie chcę mieć zduplikowanych dokumentów.
- Nie chcę usuwać dokumentu, który został wcześniej zapisany, ale nie ma go w mojej aktualizacji.
- 95% (szacunkowo) zapisów jest niezmienionych z dnia na dzień.
Używam sterownika Python (pymongo).
To, co obecnie robię, to (pseudokod):
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)
Mój problem polega na tym, że jest bardzo wolny (40 minut dla mniej niż 100 000 rekordów, a mam ich miliony w aktualizacji). Jestem prawie pewien, że jest coś wbudowanego, aby to zrobić, ale dokument do update () jest mmmhhh .... trochę lakoniczny .... ( http://www.mongodb.org/display/DOCS/Updating )
Czy ktoś może doradzić, jak to zrobić szybciej?