There is also a third possibility to solve your problem.

It is very easy to just move the part of your code that reads the YAML file to a BEGIN {} block. Then the overhead only occurs on the first execution of your mod_perl program within each httpd process.

The only disadvantage is that all processes will share the same file, but it looks like this is fine, since you have hardcoded the YAML file name anyway!

I use this trick to read files > 100MB into memory to enable fast searches of the data.

If you make a module that does this, you can also load this module in your Apache startup, and then all the Apache daemons can share the same memory.

If the YAML file needs to be dynamic, just have the mod_perl program check the date on the file before using the data. If the file is newer than when you last read it, reread it.

Update I noticed that you are actually reading many YAML files in different directories. It's still easy, just make a hash of YAML file objects, using the directory path as the key of the hash. Then check for the hash to see if the key exists, and only read the YAML file if you need to.

It should work perfectly the first time! - toma

In reply to Re: Big config file reading, or cross-process caching mechanism by toma
in thread Big config file reading, or cross-process caching mechanism by dd-b

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.