Поддерживать большой словарь в памяти для Django-Python?

У меня есть большой дамп пары « key-value , который мне нужен для поиска моего django-Python webapp.

Итак, у меня есть следующие варианты:

  • Сохраните его как json dump и загрузите его как питон-диктофон.
  • Сохраните его в dump.py и импортируйте dict из него.
  • Используйте некоторые целевые системы для этой проблемы: [Они действительно предназначены для этой утилиты? ]
    • Мем-кэш
    • Redis
    • Любой другой вариант?

Который сверху – правильный путь?

Как вы будете сравнивать memcache и redis?

Обновить:

  • Мой словарь имеет размер около 5 МБ и со временем будет расти.
  • Использование Redis / Memcache добавляет накладные расходы на поражение сокета каждый раз, так что dump.py будет лучше, так как потребуется время, чтобы загрузить его в память, но после этого он будет выполнять поиск только в памяти.

  • Мой словарь нужно обновлять каждый день, учитывая, что dump.py будет проблемой, так как мы должны перезапустить django-сервер для перезагрузки, где, как я думаю, он будет отображаться на лету в redis и memcache .

  • Один использует такую ​​систему, как redis, только когда у вас большой объем данных, и вам приходится искать очень часто, в этом случае сокет дает накладные расходы, и как мы достигаем этого преимущества?

Пожалуйста, поделитесь своими впечатлениями об этом!

4 Solutions collect form web for “Поддерживать большой словарь в памяти для Django-Python?”

Для выбора Memcache или REDIS они могут обрабатывать десятки тысяч запросов в секунду на аппаратном уровне низкого уровня (например, 80 000 req / s для REDIS на C2D Q8300 ). С задержками значительно ниже 1 мс. Вы говорите, что вы делаете что-то по порядку 20 запросов в секунду, так что производительность мудрая, это действительно не проблема.

Если вы выберете опцию dump.py , вам не нужно перезапускать Django для перезагрузки. Вы можете сделать свой собственный простой перезагрузчик:

dump.py:

 [ dict code...] mtime = 0 

Код djago:

 import dump #this does nothing if it's already loaded stat = os.stat(dump_filename) if(stat.mtime > dump.mtime): reload(dump) dump.mtime = stat.mtime 

Memcached, хотя и отличный продукт, превзойден Redis в моей книге. Он предлагает множество вещей, которые не memcached, как настойчивость.

Он также предлагает более сложные структуры данных, такие как хэш. Каков ваш конкретный дамп данных? Насколько это велико, и насколько велики / какие значения?

В прошлом для аналогичной проблемы я использовал идею dump.py. Я думаю, что для всех других структур данных потребуется слой для преобразования объектов одного вида в объекты python. Однако я все же думаю, что это будет зависеть от размера данных и объема данных, которые вы обрабатываете. Memcache и redis должны иметь лучшую индексацию и искать, когда дело доходит до действительно больших наборов данных и таких вещей, как поиск на основе регулярных выражений. Поэтому моя рекомендация

json – если вы обслуживаете данные через http для какого-либо другого файла python службы – если структура данных не слишком велика и вам не нужен какой-либо особый вид поиска

memcache и redis – если данные становятся действительно большими

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

Связь сокета сама по себе не представляет большой части накладных расходов. Возможно, вы, возможно, немного попробуете его, используя сокет домена unix. В любом случае, если вы не храните свои данные в процессе, вам придется поговорить о какой-то трубе.

  • Сельдерей пытается связаться с неправильным брокером
  • Как настроить сельдерей-redis в проекте django на microsoft azure?
  • Что такое хорошая стратегия группировки похожих слов?
  • redis: сбросить счетчик каждый день
  • Почему я должен использовать Redis, когда у меня есть PostgreSQL в качестве моей базы данных для Django?
  • Как я могу управлять статусом / цветка сельдерея без опции -A?
  • Уровень абстракции NoSQL для Python
  • Сохранить unicode в redis, но ошибка выборки
  • Redis: как разобрать результат списка
  • Использование Celery для реального времени, синхронный внешний API-запрос с Gevent
  • Неудовлетворительная производительность работы с Python RQ
  • Python - лучший язык программирования в мире.