2012-02-09 3 views
0

, которое с открытым исходным кодом вы использовали бы (не совместимый с java, linux) для кэширования 100 миллионов объектов вокруг 100 КБ, которые получили разное время для истечения срока действия (TTL). Я делал это раньше в файлах (ужасно), mysql (все еще не очень хорошо), redis (немного лучше), mongodb (ok, but ...)Кэш-сервер - хранить 100 миллионов объектов 100kb

Спасибо.

ответ

2

10 000 000 000 килобайт = 9 536,74316 гигабайты (если я не ошибаюсь - перепроверить сами)

Вы говорите, «кэш», так что я предполагаю, что вы хотите быстро, в кэш памяти.

В первую очередь вам нужна оперативная память, достаточная для ее кэширования, или несколько машин, которые суммируются с таким объемом ОЗУ, а затем обводятся между ними.

Тогда это зависит от природы кеширования. Для очень простого кеширования ключевого значения вы можете пойти с Memcache. Если вам нужно больше операций, например наборов, отсортированных наборов, хеширования объектов и т. Д., То Redis может быть очень хорошим выбором (см. data types и commands Redis). Но не забудьте отключить постоянство в Redis, чтобы он вел себя как непостоянный кеш.

Один из них, на который нужно обратить внимание - если вы используете одну программу для кэширования этих 9 ГБ данных, это должен быть 64-разрядный процесс. Это означает, что 64-разрядные служебные данные указателя могут потребовать значительных дополнительных гигабайт для хранения ваших данных. Если легко отделить ваши ключи от осколков, например. основанный на хэшировании и модульной операции (например, если ваши ключи будут естественно распределены с использованием этого или другого алгоритма осколков), тогда ваш лучший способ - использовать несколько 32-битных экземпляров (вы можете запускать 32-разрядные программы даже на 64-битных машины) для хранения данных (либо на одной машине, если ОЗУ достаточно большая, либо разделена на несколько машин). В настоящее время выполняется работа над кластером Redis, и я уверен, что для memcached должны быть также инструменты, которые это делают. Или вы можете опечатать прямо в своем клиенте.

Также следует отметить, что если эти кэшированные данные могут фактически служить вашими основными данными, тогда вам может не потребоваться две копии из них: одна в БД и одна в кеше, поскольку вы можете использовать которые предлагает Redis (только файл журнала и моментальный снимок), и вы можете использовать Redis в качестве основной базы данных.

+1

Я думаю, что ваш расчет «9 536,74316 ГБ» правильный, что сделало бы размер более 9 ТБ, а не 9 ГБ ..., который представляет собой аппаратную проблему по сегодняшним стандартам памяти. –

+0

, как вы можете видеть, 9ТБ - задача иметь в ОЗУ. Я имел в виду файловый кеш, вы знаете что-нибудь другое redis или mongo? Благодарю. – 2ge

+0

@TimMedora: спасибо, я прочитал, что неправильно после себя, 9TB это :) – youurayy

Смежные вопросы