最終的に何百万人ものユーザーを持つシステムを開発しています。システムの各ユーザーは、システム内のさまざまな「タブ」にアクセスできます。usertabs というテーブルでこれを追跡しています。これを処理するには 2 つの方法があります。
方法 1: ユーザー ID と tab1-tab10 を int 列として含む各ユーザーの単一行。
このシステムの利点は、ユーザー ID で単一の行を取得するクエリが非常に高速であることですが、欠点は「空の」列がスペースを占有することです。別の欠点は、新しいタブを追加する必要があるときに、テーブル全体を再編成する必要があることです。これは、何百万ものレコードがある場合、面倒な作業になる可能性があります。しかし、これはあまり頻繁には起こりません。
方法 2: 1 つの行に userid と tabid が含まれているだけです。ユーザーごとに最大 10 行あります。
このシステムの利点は、最適化されたストレージと無駄なスペースがないための簡単なシャーディングまたはその他のメカニズムです。行は必要な場合にのみ存在します。欠点は、レコードにアクセスするたびに最大 10 行を読み取る必要があることです。これらの行が散らばっている場合、保存方法によっては、アクセスが遅くなったり、速くなったりする可能性がありますか?
私のプログラマー側は方法 1 に傾いていますが、ビッグデータ側は方法 2 に傾いています。
あなたならどちらを選びますか?なんで?