Erlang: распределенная работа над массивом

Я работаю над проектом, в котором у нас есть массив атомов, который действует как хэш. Всякий раз, когда пользователь подключается к серверу, определенное значение хэшируется, и этот хэш используется в качестве индекса для поиска элемента в массиве и возврата этого элемента. «Внешние силы» (которые обрабатываются продолжительным gen_server) могут изменить этот массив, поэтому я не могу просто жестко его кодировать. Моя проблема в том, как «разместить» этот массив.

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

Моя текущая реализация имеет центральный gen_server, который обрабатывает состояние этого массива, и дочерние элементы, которые обрабатывают фактические запросы. Когда состояние изменяется, центральный gen_server обновляет дочерние элементы. Когда процесс хочет найти свой результат хеширования, он отправляет свой индексный номер в центральный сервер gen_server, который направляет запрос одному из дочерних элементов. Потомок пересекает свой «локальный» список и отправляет полученный атом обратно в исходный процесс.

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

У кого-нибудь есть идеи по лучшему решению моей проблемы?

РЕДАКТИРОВАТЬ:% s / массив / список / г

Ответы на вопрос(2)

Ваш ответ на вопрос