2016-03-22 1 views
1

У меня есть конкретный прецедент для нескольких карт памяти с ключом памяти, которым требуется очень быстрое время поиска. Они устанавливаются только один раз в день, поэтому их можно считать непреложными для всех практических целей. Redis не является вариантом, поскольку он получает дросселирование процессора в случае обращения к ним нескольких потоков. Многоэкземпляры redis занимают слишком много памяти из-за репликации данных. Важно рассмотреть здесь, что скорость чтения очень высока в пакетах. Около 10 миллионов запросов в очередях из примерно 40-50 рабочих одновременно.Напишите один раз, прочитав много в хранилище значений ключа памяти

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

Итак, чтобы подвести итог, какова моя лучшая альтернатива? ТИА.

ответ

0

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

+0

Будет проверяться, хотя я не думаю, что это правильное использование для этой структуры. – Sohaib

0

Вы не указываете размер своих карт, но учитывая, что производительность настолько критическая, похоже, что вы можете захотеть сохранить копии ваших «карт памяти с множеством карт памяти» с каждым рабочим.

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

+0

Размеры карт варьируются от нескольких тысяч до примерно 20 миллионов записей на самой большой карте. Общий объем памяти в случае redis составляет около 9 ГБ. У каждого рабочего нет такой запасной памяти. Рабочие работают с искровыми рабочими местами, которые довольно интенсивно занимаются памятью. – Sohaib

+0

Нужно ли всем работникам получить доступ ко всем данным? Можете ли вы разбить набор данных таким образом, чтобы каждый рабочий имел только * куски *, необходимые? При назначении задания работнику вы можете предпочесть работникам, которые уже работали с аналогичной задачей? Можете ли вы использовать кеш в памяти для горячих данных и использовать Redis в качестве более медленного сетевого кеша, как [stackoverflow.com делает] (http://meta.stackexchange.com/questions/69164/does-stack-exchange-use -caching-and-if-so-how) –

+0

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

0

рискует столкнуться с ситуацией в штабелевой полиции самозащиты :-) eXtremeDB может быть рассмотрен. Это не схема, но ваша схема может просто определить пару ключ-значение. Он поддерживает MVCC (оптимистичный, неблокирующий) параллелизм, поэтому даже относительно редкие записи не будут мешать читателям, и вы сможете использовать все ядра ЦП.

+0

Является ли это с открытым исходным кодом? – Sohaib

+0

@Sohaib Не похоже, что это с открытым исходным кодом. – Eborbob

+0

Правильно, это не с открытым исходным кодом, хотя лицензия на исходный код является опцией. –

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