50


25

NoSQLのベストプラクティス

NoSQLデータベース、OODB、その他の頭字語のベストプラクティスは何ですか?

たとえば、クライアント(アプリケーション)がDBドキュメント(couchDB / mongoDBの用語で)をどのように解釈するかを決定するために使用されるフィールド「タイプ」を見てきました。

該当する場合は、PHPを参照言語として使用します。 読んでください:厳密にDB構造だけでなく、クライアント側でそのようなデータを最適に処理する方法にも興味があります。 これは実際には、SQL DBの「ORM」(アクティブレコード、データマッパーなど)のようなパターンも探していることを意味します。

このようなDBとPHP 5.3の新機能がどのように連携するのが最適かについての説明をためらわないでください。

2 Answer


38


現在、NoSQLデータストアの概念全体とドキュメントデータベースの概念は非常に新しく、リレーショナルストレージを推進する確立されたアイデアとは異なるため、現在のところベストプラクティスはほとんどありません。

この時点で、CouchDB(またはその他のドキュメントデータベース)内にデータを保存するためのルールは、リレーショナルデータベースのルールとはかなり異なることがわかります。 たとえば、3NFの正規化と照準は、努力すべきものではないという事実です。 一般的な例の1つは、単純なブログの例です。

リレーショナルストアでは、「投稿」、「コメント」、および「作成者」ごとにテーブルがあります。 各著者には多くの投稿があり、各投稿には多くのコメントがあります。 これは十分に機能するモデルであり、リレーショナルDBを完全にマッピングします。 ただし、docDB内に同じデータを保存することは、おそらくかなり異なります。 Postドキュメントのコレクションのようなものがあり、各ドキュメントには独自のAuthorとコメントのコレクションが埋め込まれています。 もちろん、それはおそらくあなたがそれを行うことができる唯一の方法ではなく、それはいくらか妥協です(現在、単一の投稿のクエリは高速です-あなたは1つの操作を行い、すべてを取り戻します)が、あなたは関係を維持する方法がありません著者と投稿(すべてが投稿ドキュメントの一部になるため)。

私も「type」属性を使用する例を見てきました(CouchDBの例)。 確かに、それは実行可能なアプローチのように聞こえます。 最高ですか? 私には手がかりがありません。 確かにMongoDBでは、データベース内で個別のコレクションを使用するため、type属性はまったく意味がありません。 CouchDBでは…​ おそらくそれが最高です。 他の選択肢は? 文書の種類ごとにデータベースを分けますか? これは少しループしているように見えるので、私は自分で「タイプ」ソリューションに傾倒したいと思います。 しかし、それは私だけです。 おそらくもっと良いものがあるでしょう。

私はここでかなり多くのことをとりあえず言ったことに気付きました。 私のポイントはこれですが、私たちが持っているツールと作業しているデータを実験することは私たち次第であり、やがて良いアイデアが広がり、ベストプラクティスになる_と思います。 ゲームの少し早い段階で質問していると思います。


7


「NoSQL」は、アプリケーションを特定の構造に合わせて構築することではなく、アプリケーション要件に合わせてデータストアを構築することに関するものである必要があります。これは、従来の_SQLアプローチに似ています。

「理由」だけでリレーショナルデータベースを放棄しないでください。アプリが本当に必要な場合にのみ行ってください。