リレーションは、大きくて非効率的なテーブルよりも遅いですか?


8

私の仕事では、「コンピューターの処理能力のために」最初の正規形(列全体でグループを繰り返す、空/ null値を使用)に何度も違反するように依頼されました。簡単に言えば、「学生」テーブルには、私の提案ではなく、少なくとも8つの空のフィールド(たとえば、telephones:telephone1、telephone2、telephone3 ...)が必要です。電話番号(およびその他のメタデータ)を保持する「telephone」テーブル外部キーは学生ID番号です。私の上司は、リレーションを使用する代わりに、「CPUサイクルが少なく、それがWebプラットフォームで問題になる」ため、それらをそのように保存する方が良いと述べています。最悪の場合、それはごくわずかです。

その例では、リレーションの使用(テーブルが中規模のWebアプリケーションの多くのレコードで満たされていると想定)は、そのようなテーブルスキーマを使用するよりも著しく遅いですか?


上司が言うように、実際にはそれよりも速くなると思いますが、更新の異常を確実に取得しないようにするのは、おそらく大変な仕事です。ただし、テーブルに共通のデータを変更する必要がある場合は、CPUの負荷が大幅に増える可能性があります(すべての電話番号の市外局番を変更するなど)
Patrick

3
最近のハードウェアでは、特にWebサーバーの反対側では、余分なCPUが測定可能であることを外部キーにインデックス付けした場合、私は真剣に疑っています。私のサイトでは、正規化されたテーブルがあり、50,000ヒット/秒をはるかに超えて、汗をかくことなくサービスを提供しています。上司にゴルフに専念し、技術的な決定はあなたに任せてください!
Gaius

1
@パトリックかなり速いと思いますか、それともわずかに速いと思いますか?そして、私は@Gaiusと同じように思います-最新のハードウェアでは、「より高速」であっても、ハードウェアの速度と耐久性の向上は無視できます。
AeroCross 2011年

1
速度の向上は重要ではないと思います。大規模なデータセットがあり、ばかげた結合を行っている場合にのみ、パフォーマンスに顕著な違いが見られます。
Patrick

回答:


10

裏付けとなるいくつかの実際の事実がなければ、誰もどのようにそのような発言をすることができるのかわかりません。クエリがCPUバウンドの場合は、そのボトルネックを軽減する方法を探す必要があります。

非正規化されたデータベースのパフォーマンスが最も良いと上司が感じているように聞こえますが、それが正しいかどうかを判断するためにアプリケーションについて十分に知りません。このテーブルの予想される削除、更新、挿入の数はいくつですか?

このような非正規化された設計により、CPU時間を削減できると思いますが、ディスクI / Oが増えると思います。また、ディスクからの物理的な読み取りは、CPUサイクルよりもはるかにコストがかかるため、上司は非常に具体的な測定基準(CPU)を持っており、その結果、非常に具体的な設計が必要ですか?もしそうなら、私は単に要求されたものを構築し、実行されているクエリのCPUコストに関するメトリックを保持します。時間の増加が見られる場合は、設計の変更を提案することをお勧めします。

実際、上司が見たいすべてのメトリックのリストを取得し、それらを時間の経過とともに追跡することは、おそらく良い考えです。


問題は、彼が古い学校であることです-彼の提案どおり、彼の時代(20年間?)ではおそらくWASが重要でしたが、今日のハードウェアとソフトウェアははるかに強力であり、設計上、その方が高速です。ただし、このような人物に対処するのは難しいです。なぜなら、彼にはより多くの力があり、経験的(しかし時代遅れ)の「事実」であり、より高速であり、そのように考える必要があるためです。
AeroCross 2011年

1
理解した。彼が測定したいメトリック(CPU、ディスクI?O)、および彼が許容できると見なしているものをリストに表示してもらいます。その後、単にそれらの項目を測定し、物事がうまくいかない場合、いくつかの代替案を提供できます。そうすることで、より良いデザインを簡単に展開できます。彼のデザインに時間をかけて証明させてください。それは実際には双方に有利です。
SQLRockstar 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.