のためのデザイン、私は4つのテーブルがあります:users
、posts
、categories
、categories_map
データベース
posts
がcategory_id
categories_map
が私の目標は、キューを作ることですuser_id
とcategory_id
が含まれ、id
、text
を持っていますユーザーはプレビューできます。また、ユーザーは一部の投稿をスキップしたり、その中のテキストを編集することができます。ユーザーが投稿をスキップした場合、投稿には表示されません。ただし、cronはスクリプトを実行するため、ユーザーはシーケンスを変更できません。
私が考える最初のアプローチは user_id
、post_id
、text_modified
、is_skipped
、last_posted
が含まれていますテーブルを作成することです。だから、cronジョブが実行されるとタイムスタンプが残ってしまい、次回はこの投稿は取得されず、ユーザーはこの投稿のテキストを簡単に変更することができます。
2番目の方法は、ユーザuser_id
、post_id
、category_id
、text_modified
のキューが生成される別のテーブルを作成することです。だから、cronの仕事は簡単にこのテーブルに従って行を終えた後に行を削除することができます。しかし、このアプローチでは、30人のユーザーがいて、平均で3つのカテゴリにそれぞれ5000のポストが含まれていると、私のテーブルにはすでに450000の行があります。はい、それが正しくインデックスされていれば、それはすべて良いものでなければなりません。しかし、100〜200人のユーザーがいる場合はスケーラビリティがありますか?
私はどちらの方法をとるべきですか、それとも他の解決策がありますか?
1.ユーザーは互いに対話しません。2.この投稿をスキップした後。それはもはや彼らのために表示されません3.テキストの変更は、彼らの "壁"(ページ)4にのみ表示されます。彼らは彼らのために掲示されたものだけをチェックしています。 |キューを維持する必要がない場合は、どのように私は投稿を引っ張っているでしょうか? – user256968
この場合、あなたの質問は典型的なタイムライン/ニュースフィードの問題です。警告では、ユーザーは壁紙を編集する必要があります(グローバル投稿とは別に)。上記の私の提案に従うことができます。 dbをシャーディングするのは簡単なはずです。 –
私は自分の質問を正しくしなかったと思います。私はタイムライン/ニュースフィードを気にしない。私はcronのためだけにこのキューが必要です。このキューはユーザーにとって何も反映されません。例として、ユーザーは3つのカテゴリをチェックしました。合計で、それはキュー内の100の投稿か何でもあります。 Cronが最初に選択して、別のAPIにいくつかの呼び出しを行います。だからそれはちょうどキューに残って99となります。うまくいけば、私はそれをより明確にした – user256968