ベストアンサー
ルックアップテーブルは、使用されるほど「SQLのもの」ではありません。データベース設計で。これらは通常、国、州、都市などの名前を含むテーブルなど、比較的静的なデータのデータベースの正規化を支援するために使用されます。
データベース設計のコンテキストで「ルックアップテーブル」の正式な学術的定義があるかどうかはわかりませんが、それらについて考えるとき、私は通常、次のプロパティを持つテーブルを思い浮かべます。
- 個々のアプリケーションイベントに関連するデータとは対照的に、構成データまたは説明データが含まれています。
- イベント関連のテーブルに比べて小さいです。
- 挿入して-テーブルを読み取り、更新が行われる場合、それらはまれです。
- ほとんどの場合、結合はテーブルで開始または終了します。
- 私は、テーブルを類似したものと考えることがよくあります。 辞書圧縮アルゴリズムの「dictionary」。
ルックアップテーブルの例:
- アプリケーション構成テーブル。
- 地理的(上記のとおり)またはその他の記述テーブルベンダーやサプライヤーのリスト、Webストアの製品カタログテーブルなど。
- データセンターを管理するアプリケーションのマシン名とマシンハードウェアプロパティのリスト。
- Webサイトのユーザーリストとユーザープロファイルデータ(画像、ユーザーの説明など)。最近アクセスしたページのようなものは、ルックアップテーブルにはありません。
回答
速度は、NoSQLデータベースへの切り替えの背後にある推進要因ではありません。 SQLデータベースとNoSQLデータベースを並べて比較し、単純な更新とテーブルからの読み取りを比較すると、どちらもそのようなクエリに非常に迅速に応答するはずです。
主な違いは、NoSQLデータベースは単純なものを処理するように特別に設計されていることです。低レベルのクエリを使用すると、範囲や並べ替えなど、その他の簡単なものを取得、設定、および取得できます。大きな欠点は、そこに入力したデータをどのように使用するかを決定し、必要な形式でデータにアクセスできるようにする適切なスキーマを事前に設計する必要があることです。
一方、SQLは、入力したデータが正しく非正規化されている場合、非常に複雑なクエリを処理できます。特定のユースケースに合わせてスキーマを設計する必要はなく、基になるスキーマを変更せずに任意の形式で任意のデータを返すことができるクエリ言語の非常に高い柔軟性があります。
その理由SQLは遅いという評判があります。大きなデータセットで複雑なクエリを処理するには必然的に時間がかかりますが、NoSQLはそもそも遅い複雑なクエリを実行する機能を提供しません。
NoSQLデータベースとまったく同じ方法でSQLデータベースを使用できなかった理由。すべてのデータを大きなテーブルに入れ、最も基本的なクエリだけを使用します。そうすれば、同等のNoSQLデータベースと一緒に非常にうまく機能しますが、明らかに最も便利な機能のほとんどを無駄にします。これは実際、多くの大規模なSQLデータベースに当てはまります。非正規化が壊れ、特定のクエリを「最適化」するために柔軟性が犠牲になります。
ただし、SQLには特定の欠点があり、状況によっては、これらの欠点が問題になり、SQLが提供する柔軟性を犠牲にすることをいとわない場合があります。それらを克服してください。
まず、水平方向にうまくスケーリングしません。データを多くの小さなマシンに分割しようとすると、不可能ではありませんが、パフォーマンスに大きな影響を与える可能性があります。大規模なSQLデータベースは、適切なパフォーマンスを維持するために高出力の非常に高価なハードウェアで実行される傾向がありますが、NoSQLデータベースは、追加のコモディティハードウェアをクラスターに追加するだけで、簡単かつ安価に任意のサイズに拡張できる傾向があります。
、そして最も重要なこととして、SQLはフォールトトレラントではありません。はい、2台目のバックアップマシンでデータを複製することは可能ですが、その場合、高電力専用ハードウェアのコストが2倍になり、同期を維持するという余分な負荷を処理するには、そのハードウェアをさらに強力にする必要があります。たとえば、Cassandraクラスターと比較すると、データレプリケーションを備えた数十台の小さなマシンを実行でき、必要に応じて複数のデータセンターに分散することもできます。負荷は自動的に分散され、更新はクラスター全体にプッシュされ、エンドユーザーは1台のマシンの損失に気付くことはありません。
これら2つは、2つのテクノロジーから選択する必要がある本当の理由です。データベースが1台のマシンに収まるほど小さく、バックアップからの復元中に時折ダウンタイムが発生することが問題にならない場合は、SQLを使用すると、開発が大幅に簡素化され、ニーズの変化に柔軟に対応できます。データセットが巨大になる場合、またはSLAが厳しい場合は、NoSQLを選択してください。その間のどこでも、判断を下す必要がありますが、現在NoSQLスキルの需要が高いことを忘れないでください。経験を積むためだけにそのように行く価値があるかもしれません。