1

私の観点からは、データベースは常にボトルネックです。CPUパワーを必要な値にスケーリングできるため。クラスタリングまたはレプリケーションを使用しても、db リソースは制限されます。ここで間違っているかもしれませんが、これらはクラウド ソフトウェアに関するこれまでの私の経験です。

だから私は、リレーションをデータベースから切り離すことで、データベースのリソースを節約できると思いませんか?

たとえば、users テーブルと user_friends テーブルがあるとします。user_friends の外部キーは、users テーブルの主キーです。したがって、users テーブルに ON DELETE のような関係がある場合 -> DELETE FROM user_friends... データベースは魔法のように一貫性を保ち、必要なすべてのクエリを実行します。私のソフトウェアが DELETE FROM users WHERE user_id... と DELETE FROM user_friends WHERE friend_id... の 2 つの単純なクエリを実行する場合、より高速ではありませんか?

もちろん、ダウンフォールは矛盾する可能性がありますが、これはDBの負荷をまったく軽減しませんか?

4

1 に答える 1

0

私の意見では、リレーションではなく独立したオブジェクト(行)を使用する必要があるため、複雑なクエリを使用する必要はありません。それに加えて、クエリのキャッシュがはるかに簡単になります(サーバー側とデータベース側の両方)。

不整合を防ぐために、次を使用する必要があります。

  • トランザクションなので、すべての「関連する」データオブジェクトが更新されます。
  • シャーディングなので、データベースを垂直方向にスケーリングする必要はありません。水平方向の方がはるかに簡単です(ほとんどの場合)。
  • レプリケーション。サーバーがダウンしても、アプリに一貫性が失われることはありません。

したがって、基本的にはコーディングが難しいかもしれませんが、信じられないほどのパフォーマンスを持ち、非常にスケーラブルな、より優れたデータベース設計が得られます。

ところで。リレーションを使用しないことを検討している場合は、no-SQL-dbを使用することをお勧めします。SQLデータベースは(SQLデータベースなしと比較して)スケーリングが非常に難しく、リレーションを使用しない場合(SQLデータベースなしと比較して)、かなりのオーバーヘッドが発生します。

于 2011-07-27T14:40:34.710 に答える