В нашем настольном приложении мы реализовали простую поисковую систему, использующую инвертированный индекс .
К сожалению, некоторые из наборов данных наших пользователей могут стать очень большими, например, занимает ~ 1 ГБ памяти до создания инвертированного индекса. Инвертированный индекс сам по себе занимает много памяти, почти столько же, сколько индексируемые данные (еще 1 ГБ ОЗУ).
Очевидно, что это создает проблемы с ошибками нехватки памяти, так как 32-битный предел Windows в 2 ГБ памяти на приложение достигнут, или пользователи с менее мощными компьютерами пытаются справиться с требованием памяти.
Наш инвертированный индекс хранится как:
Dictionary<string, List<ApplicationObject>>
И это создается во время загрузки данных, когда каждый объект обрабатывается таким образом, что строка ключа applicationObject и слова описания сохраняются в инвертированном индексе.
Итак, мой вопрос: возможно ли более эффективно хранить индекс поиска в пространстве? Возможно, нужно использовать другую структуру или стратегию? В качестве альтернативы возможно ли создать вид CompressedDictionary? Поскольку он хранит много строк, я ожидал бы, что он будет очень сжимаемым.