title: Using JSON instead of normalized data, is this approach correct?
body: <p>There are microblogging posts, and votes/emoticons associated with them, both in MySQL innoDB tables.
  There is a requirement for two types of pages:</p>
  <p>(A) Listing page containing many microblogs along with their votes counts/emoticons counts on single page ( say 25 ).</p>
  <p>E.g.</p>
  <blockquote>
  <h1>THE GREAT FUNNY POST</h1>
  <p><em>Not so funny content in a meant to be funny post. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus euismod consequat pellentesque. .....READ MORE....</em></p>
  <p>(3) likes, (5) bored, (7) smiled</p>
  </blockquote>
  <p>. + 24 More posts on same page.</p>
  <p>(B) Permalink page containing a single microblog with detailed vote+vote counts/ emoticons.</p>
  <blockquote>
  <h1>THE GREAT FUNNY POST</h1>
  <p><em>Not so funny content in a meant to be funny post. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus euismod consequat pellentesque. Quisque viverra adipiscing auctor. Mauris ut diam risus, in fermentum elit. Aliquam urna lectus, egestas sit amet cursus et, auctor ut elit. Nulla tempus suscipit nisi, nec condimentum dui fermentum non. In eget lacus mi, ut placerat nisi.</em></p>
  <p>(You, Derp and <strong>1 more</strong> like this), <strong>(5) bored</strong>, <strong>(7) smiled</strong></p>
  </blockquote>
  <p>1st approach:</p>
  <p>Table#1:</p>
  <pre><code>post_id | post_content | post_title | creation_time 
  </code></pre>
  <p>Table#2 for storing votes, likes, emoticons:</p>
  <pre><code>action_id | post_id | action_type | action_creator | creation_time
  </code></pre>
  <p>To display a page of posts, or a single post. First table is queried to get the posts,
  second is queried to get all the actions related to the posts. Whenever a vote etc is done, an insert is made into the <code>post_actions</code> table.</p>
  <p>2nd approach:</p>
  <p>Table#1:</p>
  <pre><code>post_id | post_content | post_title | creation_time | action_data 
  </code></pre>
  <p>Where <code>action_data</code> can be something like <code>{ &quot;likes&quot; : 3,&quot;smiles&quot;:4 ...}</code></p>
  <p>Table#2:</p>
  <pre><code>action_id | post_id | action_type | action_creator | creation_time
  </code></pre>
  <p>To display a page of posts, <strong>only first table</strong> is queried to get the posts &amp; action data,
  to display individual post with detailed actions, second table is queried to get all the actions related to the posts. Whenever a vote etc is done, an insert is made into the <code>post_actions</code> table, and action_data
  field of table#1 is updated to store updated count.</p>
  <p>Assuming there are 100K posts, and 10x actions I.e. 1 million or more actions created.
  Does approach#2 provide a benefit? Any downsides of it apart from having to read, modify and update JSON information?
  Is there anyway in which approach#2 can be followed and further improved?</p>
  <p>Adding more information based on feedback:</p>
  <ol>
  <li>Python scripts will be reading, writing data.</li>
  <li>MySQL DB servers will be different from web servers.</li>
  <li>Writes due to post creation are low I.e. 10000 per day. But those due to actions can be higher, assume maximum 50 writes per second due to actions like voting, liking, emoticon.</li>
  <li>My concern is about read/write performance comparison of both and gotchas of the second approach, and where it may fall short in future.</li>
  </ol>