Я готов использовать клиент для Кассандры дБ, так что мне нужно, чтобы инициализировать его как:Поддерживать состояние контроллера?
client = CQEx.Client.new!
Я создал два пути, чтобы читать и писать, что указывает на действия в контроллере.
Вопрос в том, как я могу инициализировать клиента только один раз и использовать его каждый раз в действиях контроллера?
Должен ли я создать GenServer и отправлять ему сообщения из действий контроллера? так что я могу поддерживать клиент cassandra в GenServer?
Должен ли я создавать клиента каждый раз, когда выполняю действие ?!
Какой совет здесь?
GenServer vs new client каждый раз зависит полностью от ваших потребностей, например, сколько одновременных запросов вы хотите обрабатывать и как дорогое создание нового соединения Cassandra. Вы также можете посмотреть в пул соединений с использованием пула, такого как Ecto, см. Https://github.com/elixir-ecto/db_connection и https://github.com/devinus/poolboy. – Dogbert
Мне нужно обрабатывать тысячи одновременных запросов, я думаю, что я ответил сам? :) Почему бы не создать «Задачу» для каждой операции чтения или записи? поэтому каждая задача будет выполняться на отдельном процессе, это хороший способ сделать это (в случае, если я решил не использовать GenServer и создавать соединение каждый раз)? – simo
Зачем создавать задачу? Каждый запрос уже будет новым процессом и будет выполняться одновременно с другими запросами. Если вы не хотите выполнять тонны операций чтения/записи _per request_. В любом случае, @tkowal кажется правильным - 'cqerl' уже, похоже, создает пул соединений, поэтому вы можете просто называть' Client.new! 'Напрямую. – Dogbert