Asimov

Asimov

Config file: global variables vs "config getcher" function

Hi all,

This is a general programming question, not specific to Elixir. I do my fare share of scripting in LUA. Specifically I code IVR on freeswitch / Asterisk. So a common scenario I have is that there is a bunch of configurations parameters that I have to load in memory every time I run a script (e.g. every time a call hits the IVR). I am coding a project now where the number of configuration parameters is quite large (about 200) - please do not focus on the why of this, that is not the aim of the question.

So, what I usually do is to have a config.lua somehere where I define all these parameters as global variables:

__parameter001__ = value01
__parameter001__ = value02
__parameter_N__ = value_N

Not elegant but it does the job. So, I was thinking, would it be more efficient to have a “config getcher” fuction? Something like this :

function  get_parameter(parameter)
   if(parameter == '__parameter001__')then return value01; 
     elseif(parameter == '__parameter002__')then return value02;
     elseif(parameter == '__parameter_N__')then return value_N; 
     else return 'no_value_set';
    end;
end

In my code I would simply call this function everytime I need a parameter value:

my_parameter = get_parameter('__parameter001__');

So, instead of loading a lot of global variables I would be calling a function every time to get the value of a parameter.

My question is: is this something sensible to do? Should I just simply keep loading the parameters in memory?

I know this is not an Elixir question and my example is LUA based but I believe this is language independent discussion. Also, this forum is much more professional than any LUA forum out there (that I know of), so I’d love to know your opinion.

Thank you!

Most Liked

dimitarvp

dimitarvp

I don’t see why not. Can’t comment on Lua in particular but in Elixir I’d just load these into a Map and then store it and use it like so:

defmodule MyConfig do
  @config_key :my_config

  def load(file_path) do
    # load your configuration parameters into an Elixir map.
    # ...your code here...

    # then, assuming your map with the loaded config is called `cfg`:
    :persistent_term.put(@config_key, cfg)
  end

  def get(param), do: :persistent_term.get(@config_key) |> Map.get(param)
end

That way, you are putting that 200+ keyed map in an in-memory cache that does not get copied when accessed and you have a hyper-fast config map.

(This approach assumes that you’d change that config map rather rarely, by the way.)

dimitarvp

dimitarvp

I’d advise you to do a quick read on Erlang’s :persistent_term module. It’s absolutely perfect for rarely (or never) changing data.

Glad to help.

Last Post!

Asimov

Asimov

I ended up doing just this but on LUA: an object constructor loads a map with config parameters.Thanks @dimitarvp!

Where Next?

Popular in Chat/Questions Top

AstonJ
It’s been a while since we asked this - I’m sure others (especially newcomers to the language) will be interested to hear how you’ve all ...
New
asfand
Hi Everyone, I am a student and know basics of web development, used some php and ruby, but I am not an expert in any. I want to learn E...
New
rafaellcustodio
Hi sasajuric, any chance of a fresh promo code? :sunglasses:
New
dogweather
Can anyone recommend books/courses/videos that use real-world Elixir? E.g.: Idiomatic error handling design, whether it’s {ok/error, .....
New
Twfo326
As a novice dev I’m trying to keep the curriculum as lean as possible. My requirements are modest: build simple CRUD apps with Phoenix...
New
marciol
Hey, I have very restricted resources and time so I’m trying to understand the best way to learn Liveview in terms of cost/time. The Pra...
New
ca1989
Hi all, is there any up to date resource out there (blog, talk, video, book…) about deploying elixir applications using releases? In pa...
New

Other popular topics Top

Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New

We're in Beta

About us Mission Statement