Depending on the nature of the JSON file, you might be better off with a database, as using a database means the database will worry about updates to the data and concurrent access.

Otherwise, you can circumvent most problems by updating the JSON file in an atomic fashion, by creating the new version under a temporary name and using the rename system call to move the new version in place.

You should think a bit about whether it is OK for clients to read stale/inconsistent data. If you have a quick client and a slow client, the slow client might receive data that is older than the quick client because the request for the slow client read the JSON file before the change.

If you read the data for every request, you might suffer from the Thundering Herd Problem if many clients hit your server at the same time. It might be good to read the data once and then share it across all the workers instead of re-reading it on every request. Still, even your worker processes / worker threads will read the file once each, but removing that part is likely far more work than suffices.


In reply to Re: mod_perl best practice to consume dynamic file by Corion
in thread mod_perl best practice to consume dynamic file by machtkampf91

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.