21

NOSQL データベースのデータが非正規化されて格納されていることを何度も読みました。たとえば、チェスの戦績を考えてみましょう。チェス ゲームに参加するプレイヤー ID だけでなく、そのプレイヤーの姓名も含まれる場合があります。NOSQL では結合ができないため、これが行われたと思われます。そのため、データを複製するだけでも、アプリケーション レベルでデータを手動で処理しなくても、必要なすべてのデータを 1 回の呼び出しで取得できます。

私が理解できないのは、チェス プレーヤーの名前を更新する場合、そのプレーヤーが参加しているチェス ゲーム レコードとそのプレーヤーのプレーヤー レコードの両方を更新するクエリを作成する必要があるということです。データベースはそのプレーヤーが参加するすべてのゲームを検索し、それらの各レコードを更新する必要があるため、これはパフォーマンスのオーバーヘッドが非常に大きくなるようです。

私の例のように、データが非正規化されて保存されることが多いというのは本当ですか?

4

2 に答える 2

2

ひとつの見方をすると、ユーザーが自分の名前を変更する回数は非常にまれです。しかし、ボード データが読み取られて変更される回数は膨大です。

したがって、ごくまれにしか発生しないケースよりも、はるかに多く発生するケースに合わせて最適化することは理にかなっています。

注意すべきもう 1 つのポイントは、その名前データをボード データの下に複製しないことで、読み取りのパフォーマンス オーバーヘッドが実際に増加していることです。ボード データを取得するたびに、もう 1 歩先に進み、すべてのユーザー データも取得する必要があります (本当に必要なのは名前と姓だけだったとしても)。

ボード データに名と姓を表示する理由は、おそらく、ボード データが表示される画面で、ユーザーの名前も表示されることが多いからです。

これらの理由により、NoSQL DB で重複データを保持する必要はありません。(これは SQL DB でも実行できますが、気にしないでください。眉をひそめるでしょう)。NoSQL の世界での重複はかなり一般的であり、促進されています。

于 2020-08-03T16:52:31.707 に答える