nhpip

nhpip

Hi,

I have a long running GenServer that makes frequent calls using Ecto.

Now I know you can use Repo.checkout/2 to checkout a connection for the lifetime of a function, but can I do the same for my GenServer process? It seems inefficient to keep re-creating a connection that I know it’s going to be used frequently by a single process.

Or am I missing something?

Thanks

Showing Posts 1 to 4

dimitarvp

dimitarvp

Inefficient according to which criteria?

Your GenServer probably accesses the DB in response to messages send to it. How do you know these messages will be sent back-to-back in a quick succession, forever? IMO you don’t know that so it is much safer to have Repo.checkout wrap the part of the DB-accessing code inside your handle_call function body.

Ecto’s underlying pool manager poolboy is quite fast and efficient and can quickly check-out / check-in the underlying resource (in this case DB connections). Don’t concern yourself with that.

Finally, if you expect bursty workloads where you wouldn’t need GenServer but more likely just directly spawn a Task and such then yes, I’d give unfettered access to that if I expect it will end in the next, say, 3 to 15 seconds (those values depend on your pool config e.g. queue_target and the various timeouts).

LostKobrakai

LostKobrakai

Checkout doesn’t create a connection. It checks out one from a pool, which keeps a fixed amount of connections active all the time.

Ecto doesn’t use poolboy anymore. DBConnection implements its own pooling: db_connection/lib/db_connection/connection_pool.ex at master · elixir-ecto/db_connection · GitHub

dimitarvp

dimitarvp

Ah, I stand corrected then. Been a while since I was checking the source.

nhpip

nhpip OP

Thanks, that makes sense

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
widianto
I think I’ve found a small improvement I could contribute to <%= web_namespace %>.CoreComponents (installer/templates/phx_web/compo...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
webofbits
Aludel - LLM Evaluation Workbench Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews