Существует ли стандартный сторонний класс кэширования Python? - PullRequest
5 голосов
/ 31 марта 2009

Я работаю над клиентским классом, который должен загружать данные из сетевой базы данных. Предполагается, что добавление стандартной службы кэширования к клиенту может улучшить его производительность.

Мне бы очень хотелось, чтобы мне не пришлось создавать свой собственный класс кеширования - хорошо известно, что они дают общие точки отказа. Было бы намного лучше использовать класс, который разработал кто-то другой, чем тратить огромное количество моего собственного времени на отладку самодельной системы кэширования.

Разработчики Java имеют это: http://ehcache.sourceforge.net/

Это высокопроизводительный класс кэширования общего назначения, который может поддерживать все виды хранилищ. У него есть опции для истечения времени и другие методы для сбора мусора. Это выглядит действительно хорошо. К сожалению, я не могу найти ничего хорошего для Python.

Итак, кто-нибудь может предложить класс кеша, который я готов использовать. Мой список пожеланий:

  • Возможность ограничения количества объектов в кеше.
  • Возможность ограничения максимального возраста объектов в кеше.
  • Срок действия объекта LRU
  • Возможность выбора нескольких форм хранения (например, память, диск)
  • Хорошо отлажено, в хорошем состоянии, используется по крайней мере одним известным приложением.
  • Хорошая производительность.

Итак, есть предложения?

ОБНОВЛЕНИЕ: я ищу МЕСТНОЕ кэширование объектов. Сервер, к которому я подключаюсь, уже сильно кэширован. Memcached не подходит, потому что он требует дополнительного сетевого трафика между клиентом Windows и сервером.

1 Ответ

4 голосов
/ 31 марта 2009

Я бы рекомендовал использовать memcached и использовать cmemcache для доступа к нему. Вы не можете обязательно ограничивать количество объектов в кеше, но вы можете установить срок действия и ограничить объем используемой памяти. И memcached используется многими громкими именами. На самом деле, я бы назвал это своего рода отраслевым стандартом.

UPDATE

Я ищу МЕСТНОЕ кеширование объектов.

Вы можете запустить memcached локально и получить к нему доступ через localhost. Я делал это несколько раз.

Кроме этого, единственное решение, о котором я могу подумать, - это система кэширования django . Он предлагает несколько бэкэндов и некоторые другие параметры конфигурации. Но это может быть немного тяжеловесно, если вы не используете django.

ОБНОВЛЕНИЕ 2: Полагаю, в качестве крайней меры вы также можете использовать jython и получить доступ к системе кэширования Java. Это может быть немного сложно сделать, если у вас уже есть клиенты, использующие CPython.

ОБНОВЛЕНИЕ 3: Возможно, вам будет немного поздно, но мой предыдущий работодатель использовал ZODB для такого рода вещей. Это реальная база данных, но скорость ее чтения достаточно высока, чтобы ее можно было использовать для кэширования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...