私はしばらくの間、リレーショナル データベースを扱ってきましたが、非リレーショナル データベースには他の種類のデータベースが必要であることに最近気づきました。
非リレーショナル データベースの例と、それらが現実の世界でどこでどのように使用されているかを教えてください。リレーショナル データベースではなく、非リレーショナル データベースを使用する理由は何ですか?
編集:他の2つの同様の質問が回答に記載されています:
私はしばらくの間、リレーショナル データベースを扱ってきましたが、非リレーショナル データベースには他の種類のデータベースが必要であることに最近気づきました。
非リレーショナル データベースの例と、それらが現実の世界でどこでどのように使用されているかを教えてください。リレーショナル データベースではなく、非リレーショナル データベースを使用する理由は何ですか?
編集:他の2つの同様の質問が回答に記載されています:
ここで言及したデータベースの種類に代わる、確かにわかりにくいが興味深いのは、LazySoft Technologyの Sentences などの連想データベースです。ダウンロードして自分で試すことができる無料の個人用バージョンがあります。Enterprise Edition も無料ですが、会社へのリクエストが必要です。
基本的に、連想データベースを使用すると、私たちの脳が行うのとほぼ同じ方法で情報を保存できます。つまり、物とそれらの間の関連付けとして情報を保存できます。「センテンス」という名前は、この情報を主語-動詞-目的語の構文で表現できる方法に由来しています。
文は、別の文の主語または目的語である場合があります。
したがって、すべてをエンティティとアソシエーションに要約できます。
もちろん、文にはここで表現できるものよりもはるかに多くのものがあります。詳細については、 LazySoftのホワイト ペーパーをお読みになることをお勧めします。
「The Associative Model of Data」は、Sentences の作成者の 1 人である Simon Williams による PDF 形式の本です。
私たちが注目している非リレーショナルドキュメント指向データベースは、ApacheCouchDBです。
Apache CouchDBは、RESTful HTTP / JSON APIを介してアクセスできる、分散型の障害耐性のあるスキーマフリーのドキュメント指向データベースです。他の機能の中でも、双方向の競合の検出と解決を備えた堅牢なインクリメンタルレプリケーションを提供し、JavaScriptがデフォルトのビュー定義言語として機能するテーブル指向のビューエンジンを使用してクエリとインデックスを作成できます。
私たちの関心は、Javaからプリファレンスオブジェクトをシリアル化し、XULRunnerベースのクライアントアプリケーションからJavascriptを使用してそれらに簡単にアクセスできる、形状の変更の影響を受けない分散アクセスユーザープリファレンスストアを提供することでした。
「バークレー スタイル データベース」または「キー/値」データベースであると主張するデータベースは、リレーショナルではありません。
これらのデータベースは通常、複雑なハッシュ アルゴリズムに基づいており、キーに基づいて非常に高速な O(1) ルックアップを提供しますが、関係の良さはエンド ユーザーに委ねられています。
たとえば、リレーショナル データベースでは、構造を正規化し、多くのテーブルを結合して 1 つの結果セットを作成します。
キー/値データベースでは、可能な限り非正規化してから、一意のキーを使用してデータを検索します。
2 つのソースからデータを取得する必要がある場合は、結果のセットを手動で結合する必要があります。
すべてのデータベースはもともと非リレーショナルであり、1980 年代半ばに DB2 と Oracle が登場して初めて一般的になりました。その前は、ほとんどのデータベースがフラット ファイルまたは階層型のいずれかでした。
フラット ファイルは本質的につまらないものですが、階層型データベースはそれほど退屈ではありません。特に DB2 は最初のインスタンスで階層型実装 (つまり VSAM) の上に実際に実装されていたためです。VSAM はメインフレーム システムでまだ使用されていると思いますが、かなり重要です。
DB/1 (あまり知られていないのでウィキペディアのリンクさえ見つけられない) は、IBM の DB2 の前身であるプライムタイム データベースでした (そのため、この名前が付けられました)。これは階層的でした。基本的に、任意の数または「ルート」レコードで構成されるファイルがあり、通常はキーで直接アクセスできます。各ルート レコードは、それから任意の数の子レコードを持つことができ、それぞれが独自の子を持つことができます。最終的な効果は、インデックス ファイルまたはルート レコードであり、各ルートは潜在的なツリーのような構造の最上位になります。子レコードへのアクセスは難しい場合があります。直接アクセスには制限があったため、通常はツリーをたどって必要なレコードを探していました。「データベース」には、これらのファイルをいくつでも含めることができ、通常はキーによって関連付けられます。
これには大きな欠点がありました。特に、実際に何かを行うには完全なプログラムを作成する必要がありました。基本的に、現在 SQL で実行できることを数分で実行するには、1 日の作業に相当します。しかし、実際には実行速度の点で優れていました。当時、メインフレームの処理能力は (データ I/O 用に最適化されていたとはいえ) iPhone 程度であり、貧弱な DB2 クエリでは数百万ドルのインストールが失敗する可能性がありました。これは DB/1 では決して問題ではなく、プログラマーが CPU 時間よりも安価だった世界では、これは理にかなっています。
App Engine データストアはリレーショナル データベースではありません。データストア インターフェースには従来のデータベースと同じ機能が多数ありますが、データストアの独自の特性により、データを設計および管理する方法が異なり、自動的にスケーリングする機能を活用する必要があります。
OSIsoftのPI履歴データベースは非リレーショナルです。タイムスタンプ付きのデータをアーカイブするためだけに作成されています。これは、特にこれらすべての「ダッシュボード」のバックエンドデータベースとして、業界で多く使用されています。
結合がないため、リレーショナルである必要はありません。
まだ登場していない他の 2 種類のデータベース:
コンテンツ リポジトリは、コンテンツ (ファイル、ドキュメント、画像など) 用に設計されたデータベースです。それらは通常、コンテンツをブラウズするための階層的な方法、検索、異なるフォーマット間の変換、バージョン管理、および他の多くのものなど、追加の構造を持っています。例 - Alfresco、Documentum、JackRabbit、Day、OpenText、その他多くの ECM ベンダー。
ディレクトリ、つまり Active Directory または LDAP ディレクトリ。これらは、低書き込み/高読み取りのシナリオ向けに設計されたデータベースであり、地理的に離れた場所/高レイテンシの接続に高度に分散されています。主に認証/承認に使用されますが、ユースケースが要件に一致する場合はそうする必要はありません。
非リレーショナル データベースは、Codd の要件を満たしていません。Intersystems Caché は、古い Pick オペレーティング システムのデータベースを完全に書き直し/再設計します。私が Caché について少し読んだ限りでは、うまく再設計されているように見えます。.net プログラムが SQL と同じようにデータベースにアクセスできるようにします。Caché の実行では、変更を必要とせずに Pick OS プログラムが実行されます。Pick ファイルを Caché にインポートすることで、古いグリーン スクリーン アプリケーションを引き続き実行できますが、.net を使用して新しいプログラムを作成することもできるため、既に投資してきた長年のデータ設計を放棄することなく、Windows アプリケーションに移行できます。 Pick DB モデルの背景。Pick データベースは、完全に可変長のレコードとフィールドを使用します。すべてのテーブルは、単一の一意のキーによってキー付けされ、インデックスを読み取らずにアクセスできます。Pick は、一般に最初の物理読み取りでディスクから項目を読み取るハッシュ アルゴリズムを使用するようにシステムを設計しました (システム メンテナンスが正しく実行されたと仮定します)。Pick のフィールドは型指定されていません。すべてのデータは文字列として格納され、キャストはプログラマ次第です。null は空の文字列として格納されるため、null は SQL のようにディスク領域を占有しません。外部キーは必要ありません。「リレーショナルの世界」では、DBA は Order Header テーブルと Order Line Item テーブルを作成する必要があります。「モデルの選択」には、1 つのテーブルがあります。たとえば、「注文日」は、「1967 年 12 月 13 日」(データ ピック OS が初めてオンになった日)からの日数を格納するフィールドです。Pick プログラマーには Y2k 問題はありませんでした。2 番目の列は顧客番号です。大きな違いは、製品番号の列に到達したときです。それは「Multi-Valued」(Codd Non-Conformance)になります。つまり、データベースはその列で 1 ~ 32000 個の製品番号を処理できます。Quantity Ordered などの他の列は、製品番号との制御/依存関係にあり、複数の値を持つこともあります。Quantity Shipped に到達すると、Pick は 3 番目のディメンションに移動し、Sub-Multi-Valued フィールドを持ちます。出荷番号列があり、それは明細項目ごとに複数値であり、その出荷番号のその明細行の出荷数量を含むサブ複数値です。内部結合は必要ありません。その注文のすべてのデータは、1 つのテーブルと 1 つのレコードに格納されます。孤立した行はありません! 次に、データ定義が少し異なります。ディクショナリには、この表にないデータや操作中のデータの定義が含まれている場合があります。いくつかの例は、顧客名。「顧客番号列を使用して、顧客テーブルから名前フィールドを返す」と定義されます。もう 1 つの例は、ライン アイテム エクステンションが、Quantity*Price/PricePer の計算として定義されることです。Caché のインストール数が 100,000 を超えていると主張しているどこかで読んだ気がします。
次元データベースは、非リレーショナル データベースの好例です。これらは、KPI やその他の種類の集計データまたは統計データの「ビジネス ダッシュボード」/「ビジネス インテリジェンス」に非常によく使用されます。これらは通常、リレーショナル データベースから取り込まれ、特定の状況でより優れたパフォーマンスを提供できます。
リレーショナル データベースの概念は非常に議論の余地があることに注意してください。CJ Dateなどの純粋主義者は、一般的に使用されている多くのデータベース (Oracle や SQL Server など) は、「リレーショナル」と呼ばれるリレーショナル モデルに十分に準拠していないと主張します。
Excelのフラットファイルデータベースは非リレーショナルであり、かなりの数の人が使用していると思います。
これは実際には、他のテーブルと結合できない単なるデータベーステーブルです。
オブジェクト指向データベースは、非リレーショナルデータベースの興味深いタイプの1つです。
各取引/契約はそのカテゴリの他の取引と同じように見える可能性がありますが、固有の属性もあるため、取引部門はOOデータベースを使用することがあります。それを関係的に表現することは非常に困難です。
データを含むが、そのデータ内の関係を表さないファイルまたはファイルのグループは、非リレーショナルデータベースです。
多くの答えがありますが、それらはすべて最終的に次の 2 つの主要なカテゴリのいずれかに分類されます。
ナビゲーション。ツリー/階層データベースとグラフ データベースが含まれます。
第 1 正規形 (複数の値) を破るデータベース。Pick データベースと Lotus Notes、および CouchDB のようなその子孫が含まれます。
編集: もちろん、BDB のようなキー/バリュー ストアはリレーショナルではありませんが、それは言うまでもありませんね。つまり、それらは単なるキー/値ストアです。
RRDtoolは、ログ データを保存および集約するように設計されています。サンプリング間隔を構成してデータをフィードすると、時間ベースの結果が返されます。固定サイズのストレージ用に最適化されており、しばらくすると過去の結果の集計が開始されます。たとえば、時間間隔が 5 分のラウンド ロビン データベースがあるとします。温度データを 1 秒に 1 回送信しても、結果は 5 分単位でしか保存されません。1 週間後、それらの結果を 1 時間ごとの値に平均化します。1 か月後、1 時間ごとの結果が 1 日ごとの数値に平均化されます。
RRDtool は、 CricketやMRTGなどのツールのバックエンドとして一般的に使用され、ネットワークと環境のデータを数か月から数年にわたって一気に追跡します。
グラフベースのdbmsの場合、neo4jがあります
階層的な dbms の場合、標準のファイルシステムを使用するか、「スキーマ」を使用して LDAP 実装をサポートします。
dBase. そのように販売されていましたが、要件を満たしていません。
OO データベースとしては、Intersystems Caché が思い浮かびます。一部の医療および図書館システムは、これに基づいて構築されています。
私の会社 www.smartsgroup.com には、「トランザクション ログ データベース」と呼ばれる独自のデータベース エンジンがあります。これは、一連の「イベント」または「メッセージ」をバイナリ形式で含む各ファイルに加えて、このデータのさまざまなインデックスと、証券取引所のオーダーブックの状態を再現するためのアルゴリズムを含むフラット ファイルで構築されています。順次更新および順次アクセス用に高度に最適化されています。
科学アプリケーションでは、RDBMS ではなく独自のデータベース エンジンを使用することも一般的です。私はまた、脳波記録の世界最大のデータベースを持つ会社で働いていました: www.brainresource.com . そこではフラット ファイル データベースを使用していますが、うまく機能しました。
SmartsGroup は、非リレーショナル データベース テーブルに似たテンポラル データベースも使用しますが、すべてのフィールドに対するすべての変更の履歴を保存するため、特定の日付の特定の行の状態を再現できます。
私の大学には、演繹的なデータベースを研究するグループがあります。
上記にリンクされている Dimensional Databases の Wiki ページが消えたようです。
一部のOLAPシステムは、財務分析でよく使用される多次元データベース (MOLAP) に支えられています。それらは、さまざまなレベルの集約でデータをナビゲートできるインタラクティブなクライアントを提供します。