Application design help needed (how to make use of genservers and ErlangVM processes)

Hello,
I’m making a demo app for bidding. It is a POC for channels and now I decided to try to persist data using Mnesia. First thing is that I’m struggling with decision whether to use Amnesia wrapper or Mnesia directly… (but thats off-topic)
The main thing is that before the idea of persisting data I designed the app so that each item that yet to be/is auctioned should rest in dedicated GenServer and users (via websockets) will place_bids from channels by issuing message to dedicated GenServer for given auction item. I thought this solution might be a good idea to leverage the parallelism of ErlangVM. But now with Mnesia I feel like I dont need individual GenServers because I can directly access Mnesia data… Am I correct? I also thought of preserving the idea of individual GenServers that would keep the state of the auction item but would periodically/by debounce “flush” the state to Mnesia… (but that would probably open space for potential loss of unsaved data) Is that dumb idea?
Or would any other approach fit here better?

Thanks in advance!

Parallelism of ERTS is accidental, not main concept of the Erlang. Concurrency is the main concept, and these two are quite different.

You are correct.

From my viewpoint - yes. What will happen if the process go down between the debounce period? You will lose some bids.

My approach to that would be as a stream of events - you place bid, it is saved right away, and then when someone overbids you then you will get a message. Additionally I wouldn’t use Mnesia there (unless that is requirement). While this DB is built in, its maintenance isn’t quite obvious and can be confusing for developers that aren’t familiar with Erlang and its quirks. I would go for PostgreSQL (or SQLite if it is meant to be super simple and hosted on one machine only), as it is more familiar for most of the people.

So in general, I wouldn’t use GenServer there, as in this application it doesn’t really makes much sense (unless I am missing something important there).

4 Likes

Hi, thanks for the reply.

Oh yes, concurrency is what I meant… sorry.

As for using different storing mechanism - The mnesia was just for the demo purposes as I thought using it would be quite fast as it is already baked into the system… (silly me :slight_smile: ) so yeah, I would also prefer PostgreSQL for data store… Maybe some day in the future we will adopt mnesia to improve performance… but now the querying is somewhat creepy to me… :slight_smile:

Thanks for assuring me with the useless genservers…