私は医療ソフトウェアに取り組んでおり、私の目標はデータベースに多くのカスタム アクションを保存することです。誰が何をしたかを追跡することは非常に重要であるため、ユーザーが何か意味のあることを行うたびにアクションが生成されます (コメントを書く、医療情報を追加するなど)。ここでの問題は、時間の経過とともに多くのアクションが発生することです。たとえば、患者ごとに 10000 としましょう。50000 人の患者がいると、合計で 5 億 (またはそれ以上) のアクションが発生する可能性があります。
現在、データベース モデルは次のようになっています。
[Patient] 1 -- 1 [ActionBlob]
したがって、すべての患者は、すべてのアクションを大きなシリアル化されたバイト配列として含む 1 つの大きなブロブを持っているだけです。もちろん、データベースとクライアントの間で常にバイト配列全体をやり取りする必要があるため、テーブルが大きくなるとこれは機能しません。
私の次のアイデアは、個別にシリアル化されたアクションのリストを (大きなチャンクとしてではなく) 持つことでした。
[Patient] 1 -- * [Action]
しかし、これが良いアプローチかどうか疑問に思い始めました。新しいアクションを追加するときに、他のすべてのアクションをシリアル化してデータベースに転送する必要はありませんが、1 つのアクションをシリアル化して Actions テーブルに追加するだけです。しかし、データのロードについてはどうですか? 1 つのテーブルに 5 億行ある可能性があるため、超低速になるでしょうか?
したがって、基本的に質問は次のとおりです。
- SQL Server は、5 億行のテーブルから 10000 行の読み込みを処理できますか? (これらの数値はさらに大きくなる可能性があります)
- エンティティ フレームワークは、非常に遅くならずに 10000 個のエンティティの実体化を処理できますか?