Ich bin bereit, einen Client für cassandra db zu verwenden, also muss ich es initialisieren, wie:Zustand im Controller beibehalten?
client = CQEx.Client.new!
ich zwei Routen erstellt haben, dass Punkte auf Aktionen in einem Controller zu lesen und zu schreiben.
Die Frage ist, wie würde ich den Client nur einmal initialisieren und es jedes Mal in den Aktionen des Controllers verwenden?
Soll ich einen GenServer erstellen und ihm Nachrichten von Controlleraktionen senden? damit ich den cassandra client im GenServer pflegen kann?
Soll ich den Client jedes Mal erstellen, wenn ich die Aktion ausführe ?!
Was ist der Rat hier?
GenServer vs neue Client jedes Mal hängt vollständig von Ihren Anforderungen ab, wie viele gleichzeitige Anfragen Sie behandeln möchten und wie teuer die Erstellung einer neuen Cassandra-Verbindung ist. Vielleicht möchten Sie auch einen Verbindungspool mit poolboy wie Ecto verwenden, siehe https://github.com/elixir-ecto/db_connection und https://github.com/devinus/poolboy. – Dogbert
Ich muss Tausende von gleichzeitigen Anfragen behandeln, ich denke, ich habe mich selbst beantwortet? :) Warum nicht eine 'Task' für jede Lese- oder Schreiboperation erstellen? Also wird jede Aufgabe auf einem separaten Prozess ausgeführt, ist dies ein guter Weg, dies zu tun (falls ich mich entscheide, GenServer nicht zu verwenden und jedes Mal eine Verbindung herzustellen)? – simo
Warum eine Aufgabe erstellen? Jede Anforderung ist bereits ein neuer Prozess und wird gleichzeitig mit anderen Anforderungen ausgeführt. Es sei denn, Sie möchten viele Lese-/Schreibvorgänge ausführen _per request_. Wie auch immer, @tkowal scheint recht zu haben - 'cqerl' scheint bereits einen Pool von Verbindungen zu erstellen, so dass man' Client.new! 'Direkt aufrufen kann. – Dogbert