MySQLのinnoDBテーブルには、マイクロブログの投稿とそれに関連する投票/顔文字があります。2種類のページの要件があります。
(A)1ページ(たとえば25)の投票数/顔文字数とともに多くのマイクロブログを含むリストページ。
例えば
素晴らしい面白い投稿
面白い投稿を意図した、それほど面白いコンテンツではありません。Lorem ipsum dolorは、amet、consecteturadipiscingelitに座ります。Phaselluseuismodはpellentesqueを意味します。.....続きを読む....
(3)いいね、(5)退屈、(7)笑顔
。+同じページにさらに24件の投稿。
(B)詳細な投票+投票数/絵文字を含む単一のマイクロブログを含むパーマリンクページ。
素晴らしい面白い投稿
面白い投稿を意図した、それほど面白いコンテンツではありません。Lorem ipsum dolorは、amet、consecteturadipiscingelitに座ります。Phaselluseuismodはpellentesqueを意味します。Quisque viverraadipiscingauctor。Mauris ut diam risus、fermentumelitで。Aliquam urna lectus、egestas sit amet cursus et、auctorutelit。Nulla tempus suscipit nisi、nec condimentum duifermentumnon。eget lacus miでは、utplaceratnisi。
(あなた、ダープともう1人はこのように)、(5)退屈、(7)微笑んだ
最初のアプローチ:
表1:
post_id | post_content | post_title | creation_time
投票、いいね、絵文字を保存するための表#2:
action_id | post_id | action_type | action_creator | creation_time
投稿のページ、または単一の投稿を表示します。最初のテーブルは投稿を取得するためにクエリされ、2番目のテーブルは投稿に関連するすべてのアクションを取得するためにクエリされます。投票などが行われるたびに、テーブルに挿入が行われpost_actions
ます。
2番目のアプローチ:
表1:
post_id | post_content | post_title | creation_time | action_data
どこaction_data
にあるのか{ "likes" : 3,"smiles":4 ...}
表#2:
action_id | post_id | action_type | action_creator | creation_time
投稿のページを表示するには、最初のテーブルのみをクエリして投稿とアクションデータを取得し、個々の投稿を詳細なアクションとともに表示するには、2番目のテーブルをクエリして投稿に関連するすべてのアクションを取得します。投票などが行われるたびに、テーブルに挿入が行われ、post_actions
テーブル#1のaction_dataフィールドが更新されて、更新されたカウントが格納されます。
10万件の投稿があり、10倍のアクション、つまり100万以上のアクションが作成されたと仮定します。アプローチ#2にはメリットがありますか?JSON情報を読み取り、変更し、更新する必要があること以外に、それの欠点はありますか?とにかく、アプローチ#2に従い、さらに改善できる方法はありますか?
フィードバックに基づいてさらに情報を追加する:
- Pythonスクリプトは、データの読み取りと書き込みを行います。
- MySQLDBサーバーはWebサーバーとは異なります。
- 投稿作成による書き込みは、1日あたり10000と低くなっています。ただし、アクションによるものはもっと高くなる可能性があります。投票、いいね、絵文字などのアクションにより、1秒あたり最大50回の書き込みを想定します。
- 私の懸念は、2番目のアプローチの両方と落とし穴の読み取り/書き込みパフォーマンスの比較と、将来的に不足する可能性がある場所についてです。