Key-Value データ ストアを使用する場合と使用する場合より伝統的なリレーショナル DB でしょうか?

StackOverflow https://stackoverflow.com/questions/1500611

質問

リレーショナル DB ではなくキーバリュー データ ストアを選択するのはどのような場合でしょうか?どちらかを決定する際にはどのような考慮事項が考慮されますか?両方を組み合わせるのが最適なルートはいつですか?可能であれば例を挙げてください。

役に立ちましたか?

解決

私の経験では、伝統的な実践と難解な実践のどちらを使用するかという質問さえするのであれば、伝統的な実践を選択してください。難解な実践は魅力的で、やりがいがあり、楽しいものですが、アプリケーションの 99.999% には従来のアプローチが必要です。

リレーショナルと KV に関して、次のような質問があります。 すべき 尋ねるべきことは次のとおりです:

なぜ私は ない このシナリオではリレーショナル モデルを使用したいと考えています。...

シナリオを説明していないため、なぜそれを使用すべきではないのかを誰にも説明することはできません。KV の「すべてを網羅する」理由はスケーラビリティにありますが、それは今のところ問題ではありません。最適化の法則を知っていますか?

  1. やめてください。
  2. (専門家のみ) 今はやめてください。

KVは、 非常に アプリケーションにはまったく必要ない可能性が高いスケーラビリティに対する最適化されたソリューション。

他のヒント

キーと値、階層的、マップ-減らす、またはグラフデータベース・システムが実装戦略に非常に近い、それらは重く、物理的表現に結び付けられています。そこに説得力のあるパフォーマンスの引数であり、それは非常に密接にあなたのデータ処理戦略に合った場合は、これらのいずれかを選択する主な理由です。アドホッククエリは、通常、これらのシステムのための実用的ではない、とあなたは事前にクエリを決定する方がいいでしょう、注意します。

リレーショナルデータベースシステムは、基礎となる物理表現と処理戦略から論理的、ビジネス指向のモデルを分離してみてください。この分離は不完全で、まだかなり良いです。リレーショナル・システムは、事実を処理し、事実のコレクションから信頼できる情報を抽出するための素晴らしいです。リレーショナル・システムは、他のシステムがで悪名高い悪いアドホッククエリ、で素晴らしいです。それは、ビジネスの世界で偉大なフィット感と他の多くの場所です。リレーショナル・システムは非常に普及している理由です。

それは、ビジネスアプリケーションの場合は、リレーショナルシステムは、ほとんど常に答えです。他のシステムでは、それはおそらくその答えです。あなたが起こるために必要なもののいくつかのパイプラインのように、データ処理の問題の多くを持っていて、大量のデータを持っている、とあなたは、フロントアップクエリのすべてを知っている場合は、別のシステムがあなたのために正しいかもしれない。

あなたのデータは、単純なもののリストであり、あなたが各項目に一意の識別子を導き出すことができた場合は、

、その後、KVSは良い試合です。彼らは、私たちが新入生のコンピュータ科学で学んだ簡単なデータ構造の近くに実装しているとの複雑な関係のために許可されていません。

簡単なテスト:あなたは、リンクされたリストやハッシュテーブルとしてデータとその関係の全てを表すことができますか?そうならば、KVSが動作する可能性があります。いいえ場合は、RDBを必要とします。

あなたはまだあなたの環境で動作するKVSを見つける必要があります。 KVSesのサポート、でも主要なものは、どこにもそれは、PostgreSQLとMySQL / MariaDB、たとえば、何のためにあるのか近くではありません。

従来のリレーショナル データベースには、ある点を超えて拡張する際に問題があります。そのポイントがどこにあるのかは、何をしようとしているかによって少し異なります。

クラウド コンピューティングのサプライヤーのすべて (ほとんど?) は、キーと値のデータ ストアを提供しています。

ただし、複雑なデータ構造を持つ適切なサイズのアプリケーションがある場合は、リレーショナル データベースを使用することでサポートが得られるため、開発コストを削減できます。

基礎となるデータは、非構造化予測できない、または頻繁に変更されたときに

IMO、キーと値のペア(例えばのNoSQLデータベース)が最も適しています。あなたが構造化されたデータを持っていない場合は、リレーショナルデータベースを使用すると、スキーマの変更をたくさん作り、および/または構造にデータを適合するようにフープを介してジャンプする必要がありますので、その価値はより多くのトラブルになるだろう。

データ構造への変更が完全にデータモデルをリファクタリングする必要はありませんので、

KVP / JSON / NoSQLのは素晴らしいです。あなたのデータオブジェクトにフィールドを追加すると、単にデータにそれを追加するだけです。コインの反対側には、あなたのデータは厄介かもしれませんので、リレーショナルデータベースよりKVP / NOSQLデータベースにおける制約が少ないと検証チェックがあります。

リレーショナルデータモデルのパフォーマンスと省スペース化のメリットがあります。テーブルキーの関係とあなたを助けるために制約があるため、正規化されたリレーショナルデータは、理解を作成し、簡単にデータを検証することができます。

私が見てきた最悪のパターンの一つは、それを両方の方法を持ってしようとしています。リレーショナルデータベースにキーと値のペアを入れしようとすると、多くの場合、災害のためのレシピです。私は何よりもあなたのデータに合った技術を使用することをお勧めします。

あなたは(1)の値の検索キーに基づいて、Oをしたい場合は、

、あなたはKV店をしたいです。フォームのk1={foo}, k2={bar}のデータなどを持っている場合の値は、あなたがKV店をしたい、ネストされた/より大きな構造であり、かつ高速な検索をしたい場合でも、意味。 でも、適切なインデックスと、あなたは、任意のキーのリレーショナルDBでO(1)ルックアップを達成することはできません。時には、これは「ランダムルックアップ」と呼ばれています。

あなたがする場合のみ、これまでに残りのデータを取得するために、1列、「主キー」で照会する場合は、

Alliterativelyはその後の値として、鍵空間とデータの残りの部分として、その列を使用して、と述べましたKVストアは、検索を行うための最も効率的な方法です。

あなたは、多くの場合、複数の列のいずれかによってデータを照会する場合は、

これとは対照的に、別名あなたはデータのためのより豊かなクエリーAPIをサポートして、あなたは、リレーショナルデータベースをしたいことがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top