Лучшие практики Memcached - маленькие объекты и много ключей или большие объекты и немногих ключей?

s = r'abc123d, hello 3.1415926, this is my book'
print re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s)

Вам не нужно escape дважды, когда вы используете raw mode.

Выход: ['123', '3.1415926']

Также тип возврата будет списком strings .Если вы хотите, чтобы возвращаемый тип, как integers и floats, использовал map

import re,ast
s = r'abc123d, hello 3.1415926, this is my book'
print map(ast.literal_eval,re.findall(r'-?[0-9]+(?:\.[0-9]*)?|-?\.[0-9]+',s))

Выход: [123, 3.1415926]

23
задан jb. 13 January 2009 в 02:25
поделиться

5 ответов

Я сказал бы много небольших ключей. Таким образом, можно получить точный результат, который Вы хотите в 1 вызове с минимальным усилием по сериализации.

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

10
ответ дан Alex 29 November 2019 в 02:56
поделиться

Это зависит от Вашего приложения. В то время как memcached очень быстр, действительно требуется некоторое время поиска передачи и памяти запроса на запрос. Те числа увеличиваются в зависимости от того, является ли сервер на локальной машине (localhost) в локальной сети, или через широкую область. Размер Вашего кэша обычно не влияет на скорость поиска.

Так, если Ваше приложение использует МНОГО объектов на блок обработки (на запрос, метод или what-have-you), то обычно лучше определить Ваш кэш способом, который понижает общее количество хитов к кэшу, одновременно пытаясь не копировать данные кэша. Как все остальное, это - баланс.

т.е. Если у Вас есть веб-запрос, который вытягивает список сообщений в блоге, это было бы более выгодно для кэширования всего списка объектов как одного memcached ключа, а не (и это - несколько плохой пример, очевидно), кэширование массива ключей кэша для того списка, которые касаются индивидуально memcached объектов.

2
ответ дан Nate 29 November 2019 в 02:56
поделиться

Чем меньше обработок из кэшированных значений, тем лучше. Так почему бы не просто сбросить их в кеш по отдельности?

1
ответ дан jrockway 29 November 2019 в 02:56
поделиться

Это зависит от того, что это за цифры. Если бы вы могли, например, сгруппировать их по диапазонам, то вы могли бы оптимизировать хранилище. Если бы вы могли их хешировать в карту или в хеш-таблицу и хранить эту карту, сериализованную в memcached, было бы хорошо.

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

0
ответ дан santiagobasulto 29 November 2019 в 02:56
поделиться

Я написал довольно большой анализ на http://dammit.lt/2008/12/25/memcached -for-small-objects / - в нем рассказывается, как оптимизировать memcached для хранения небольших объектов - это может пролить некоторый свет на проблему.

7
ответ дан 29 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: