Я пишу инвертированный индекс для поисковой машины по набору документов. Прямо сейчас я храню индекс как словарь словарей. Таким образом, каждое ключевое слово сопоставляется со словарем docIDs-> позиций вхождения.
Модель данных выглядит примерно так: {word: {doc_name: [location_list]}}
Построение индекса в памяти работает нормально, но при попытке сериализации на диск возникает ошибка MemoryError. Вот мой код:
# Write the index out to disk
serializedIndex = open(sys.argv[3], 'wb')
cPickle.dump(index, serializedIndex, cPickle.HIGHEST_PROTOCOL)
Непосредственно перед сериализацией моя программа использует около 50% памяти (1,6 ГБ). Как только я вызываю cPickle, мое использование памяти резко возрастает до 80% перед сбоем.
Почему cPickle использует так много памяти для сериализации? Есть ли лучший способ решить эту проблему?