まず第一に、私はデータベースの専門家ではなく、請負業者です。私は (優秀な) プログラマーを雇いましたが、私たちが経験したいくつかの問題と私が読んでいるすべての情報のために、データベース設計の特定の部分について疑問を持っています. はじめましょう。
パーサーを使用してすべてのデータを処理し、ms-sql データベースに格納するハウジング サイトを構築します。毎日、フィードには約 70,000 件のレコードが含まれており、そのほとんどに写真 (平均 3 件) が添付されています。写真のサイズは 30kb から 400kb までさまざまです。データベースにはほぼ同じ量のレコードがあります。約 400 個の新しいオブジェクトが処理されます。これは、データが変更されたかどうか、オブジェクトが削除されたかどうか、または新しいオブジェクトであるため挿入する必要があるかどうかを確認するために、データベース内のすべてのレコードを毎日入力する必要があることを意味します。写真はデータベースに保存されます。フィードは、32 GB のメモリと SSA ディスクを備えたデュアル クアッドコア マシンで処理されます。データベースのサイズは現在 600GB です。
現在、1 日に約 3000 人のユーザーが 6 軒の家を見て、1 ユーザーあたり平均 10 枚の画像を閲覧しています。
これが私たちが経験したことです: - 解析の全プロセスには約 13 時間かかります。- ログに多くのタイムアウト エラーが記録される - いくつかのデッドロック エラーが発生する - Google はタイムアウト エラーについて不平を言い、その結果、多くのページがインデックスに登録されない。- 一部のディレクトリの読み込みに 10 秒以上かかるため、Google はサイトを遅いと評価しています。
個人的には、データベース内の写真といくつかの悪いクエリに関係があると思います。しかし、プログラマーに不平を言う前に、これについてあなたの意見を聞きたいと思います。お時間をいただきありがとうございます。
プログラマーからの更新: テーブルの構造に関する情報を次に示します。画像には 2 つのテーブルがあり、1 つは画像のクエリ (たとえば、imageid と content-type のリストの取得など) に使用される imageinfo と呼ばれ、画像の id と BLOB を含む画像テーブルです。imageinfo テーブルには、イメージ テーブルと同じ ID (1:1 の関係) があり、イメージの名前、タイプ、ハッシュなどの追加情報があります。そのハッシュはパーサー プロセスで使用され、画像が変更されたかどうかが判断されます。したがって、画像テーブルが変更されるのは、パーサーから挿入/更新/削除が行われ、サイトが画像にアクセスするときだけです。1 つの画像にアクセスしてダウンロードするのにかかる時間は、約 350 ミリ秒です。