質問

は、仕事では、我々は最近のCouchDB(ドキュメント指向データベース)を使用してプロジェクトを開始しました。私はつらい時私のリレーショナルDBの知識のすべてをアンラーニングを持ってきます。

あなたのいくつかは、この障害を克服する方法

私は思っていましたか?どのようにリレーショナル思考を停止し、(私はその言葉を作ることをお詫び申し上げます)documentallyだと思い始めました。

任意の提案ですか?役立つヒント?

の編集の:それはどんな違いをした場合、我々はデータベースに接続するためにルビー&CouchPotatoを使用している

の編集2 の:SOの答えを受け入れるように私を悩まされました。私は私が私が思うに、ほとんどを学ぶ助けたものを選びました。しかし、本当の「正しい」答えはありません、私は考えます。

役に立ちましたか?

解決

私が思うに、このテーマに関するページのカップルにおよそ熟読した後に、それはすべてあなたが扱っているデータの種類によって異なります。

のRDBMSを使用すると、データベースの設計者は、データベース内に存在するすべてのデータの構造を主張するトップダウンアプローチを表します。あなたはRDBMSを使用してこれを強制することができますなど、人には、姓、ミドルネームとホームアドレスを持っていることを定義します。あなたは人のHomePlanet、地球とは異なるHomePlanetを持っているタフな運たい被者の列を持っていない場合。あなたは後日に列を追加する必要がありますまたはデータがRDBMSに格納することはできません。ほとんどのプログラマはとにかく自分のアプリでこのような仮定を行うので、これは仮定し、施行するダムものではありません。物事を定義することは良いことができます。あなたが将来的に追加の属性をログに記録する必要がある場合しかし、あなたがそれらを追加する必要があります。関係モデルは、データの属性はあまり変化しないことを前提としています。

MapReduceのようなものを使用して、

「クラウド」型データベースは、あなたのケースのCouchDBには、上記の仮定をしないと、代わりにボトムアップからのデータを見てください。データは、様々な任意の数の属性を持つことができ、文書に入力されています。それはあなたのデータは、その非常に定義によって、それが持っている可能性があり、属性の種類が多様であることを前提としています。それはEternium 『との姓「主よニブラ『私はちょうど私がのHomePlanet属性持つデータベースの人で、このドキュメント持っていることを知っている』、と言う』しかし、誰姓を。」このモデルは、ウェブページをフィット:すべてのウェブページは文書ですが、文書の実際の内容/タグ/キーを使用すると、DBMSが高い時にからpontificates剛性構造にそれらに合うことができないことを洙大きく異なります。 Googleのデータセットは、それから曖昧さのためで構築する必要があるので、多様であるため、Googleは、MapReduceのモデルroxorsのsoxorsを考えている理由はここにあり得る-行く、とによる大規模なデータセットへ(MapReduceのは些細なります)並列処理を利用することができます。ドキュメント・データベースモデルは、データの属性は、/ロットを変更したり、「ギャップ」と、データがリレーショナルデータベースに格納されていた場合は、1つが見つけるかもしれない過疎の列の多くが付いている非常に多様になることを前提としています。あなたはこのようなデータを格納するためにRDBMSを使用することができますが、それは本当に速い醜いなるだろう。

そして、あなたの質問に答えるために:MapReduceのパラダイムを使用するデータベースを見たとき、あなたはすべての「関係的」と考えることはできません。それは実際に強制関係を持っていない、ので。それはあなただけで乗り越える必要があります概念的なこぶだ。

<時間>

私はそれに走った良い記事を比較し、対照をなす2つのデータベースをかなりよく<のhref =「http://www.databasecolumn.com/2008/01/mapreduce-a-major-step-back.html」でありますREL =「noreferrer」>のMapReduce:MapReduceのパラダイムデータベースは後方技術のステップであり、のRDBMSに劣っていると主張している主なステップバックを、。私は、著者の論文に反対しており、データベース設計者は、単に彼/彼女の事情のために右のいずれかを選択しなければならないことを提出する。

他のヒント

これは、すべてのデータについてです。あなたはリレーショナル最も理にかなっているデータがある場合は、文書ストアは役に立たないかもしれません。典型的なドキュメントベースのシステムは、あなたが巨大なデータセットを持っており、特定のアイテム/ドキュメントを検索する検索サーバで、文書は、静的、またはバージョン管理されます。

アーカイブタイプの状況では、文書は文字通り変更し、非常に柔軟な構造を持っていない文書、かもしれません。彼らはすべての非常に異なっているので、それは非常に少数の文書はこれらのタグを共有することがありそう、リレーショナルデータベースでのメタデータを格納しても意味がありません。ドキュメントベースのシステムではnull値を格納しないでください。

非正規化時に

非リレーショナル/ドキュメントなどのデータは、理にかなっています。それはあまり変化しないか、一貫性について多くを気にしない。

あなたのユースケースがよくリレーショナルモデルをフィットする場合は、

それはおそらく、ドキュメントモデルにそれを絞る価値はありません。

ここで非リレーショナルデータベースについての良い記事だのます。

それについて考えてのもう一つの方法は、文書が行である、です。文書についてのすべては、その行であり、それは、その文書に固有のものです。行は、上分割しやすいので、スケーリングが容易になります。

CouchDBのでは、Lotus Notesのように、あなたが本当に行に類似しているとしてドキュメントを考えるべきではありません。

その代わりに、文書は、関連(テーブル)である。

各文書は、行の数持っている - フィールド値を

ValueID(PK)  Document ID(FK)   Field Name        Field Value
========================================================
92834756293  MyDocument        First Name        Richard
92834756294  MyDocument        States Lived In   TX
92834756295  MyDocument        States Lived In   KY

各ビューは、大規模なUNIONを越え、すべてのドキュメントのすべてのを選択したクロス集計クエリです。

だから、それはではなく、最も直感的な意味ではなく、最も重要な意味では、まだ関係だ:良いデータ管理の実践

ドキュメント指向のデータベースは関係の概念を拒否していない、彼らは時にはリンク(CouchDBの)または間接参照するアプリケーションは、文書(MongoDBの)間の関係を直接サポートしてみましょう。何より重要なのはDODBsは、スキーマレスであるということです。テーブル・ベースのストレージでは、このプロパティには、かなりのオーバーヘッド(richardtallentによって答えを参照)を用いて達成することができるが、ここでは、より効率的に行われます。どのようなRDBMSから切り替えたときに私たちは本当にDODBに学ぶべきことは、テーブルを忘れるために、データを考え始めることです。それはsheepsimulatorは「ボトムアップ」アプローチと呼んでいるものです。それは進化し続けるスキーマ、事前に定義されていないProcrusteanベッドです。もちろん、これはスキーマが完全にいかなる形で放棄されるべきであることを意味するものではありません。アプリケーションは、何らかの形でその形態を制約、データを解釈しなければならない - これは、検証方法でモデルを作ることによって、コレクションに文書を整理することによって行うことができる - これはこれで、アプリケーションの仕事です。

あなたがこれを読むべきかもしれ http://books.couchdb.org/relax/getting-startedする

私自身はそれを聞いて、それは面白いですが、実際のアプリケーションであることを実装する方法はわかりません。)

あなたがFirefoxや放火魔のコピーを取得し、JavaScriptでのマップは、削減の機能で遊んで試みることができる一つのこと。彼らは実際には非常にクールで楽しいです、と物事はCouchDBの中で成し遂げる方法の基礎のように見える。

ここにあるテーマに関するジョエルの小さな記事:のhttp://www.joelonsoftware .COM /アイテム/ 2006/08 / 01.htmlする

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