#python #dictionary #caching #sparse-matrix
Вопрос:
Я использую большой Дикт в качестве кэша. Структура { string : float }
Это очень редкий диктант, т. е. большинство записей с плавающей точкой равно нулю.
Я ищу методику «консолидации» каким-то образом нулевого кв для экономии памяти, но скорость доступа должна оставаться примерно одинаковой /в противном случае я бы использовал redis или db/.
Попадание в кэш ~40нс экономит мне вызов функции ~100-200 мс.
я уже использую sys.intern()
Любой трюк или техника, которые могли бы сработать.
может быть, это сработает : https://github.com/KeyviDev/keyvi
Хранилище KV, использующее FSM для сжатия ключей с аналогичными значениями
Комментарии:
1. Можете ли вы предположить, что любая строка, не содержащаяся в dict, имеет значение с плавающей точкой 0, или вам также нужно отслеживать, какие строки находятся в dict, а какие нет? Потому что я бы просто сделал
cache.get('string', 0.0)
, если бы вы могли предположить, что все, что не указано в диктанте, равно 0.2. нет.. именно по этой причине я добавляю их в кэш.. возможные строковые ключи почти бесконечны
3. Тогда нет — это уже наиболее эффективно (интерпретатор python в любом случае будет просто повторно использовать один и тот же неизменяемый
0.0
файл, он не должен хранить миллионы из них в памяти). На самом деле, когда я пишу это, я не уверен, что это работает для поплавков; может быть, просто сохраните их как целочисленные 0, а не как плавающие 0,0 с.