sql >> データベース >  >> NoSQL >> CouchDB

CouchDB入門

    NoSQLは、過去2か月間で最も話題になっているトピックの1つです。このチュートリアルでは、NoSQLの実装であるCouchDBを紹介し、プラットフォームの使用を開始する方法を説明します。

    NoSQLとは何ですか?

    NoSQLはスキーマフリーです。構造を事前に決定する必要はありません。

    NoSQL[SQLだけでなく ]は、リレーショナルモデルを使用しないドキュメントストアへの動きです。基本的なパラダイムシフトは、データの保存方法にあります。たとえば、請求書に関するデータを保存する必要がある場合、RDBMSでは、この情報をテーブルに抽出し、サーバー側の言語を使用してこのデータを実際のオブジェクトに変換する必要があります。一方、NoSQLでは、請求書を保存するだけです。 NoSQLはスキーマフリーです。つまり、テーブルや構造を事前に設計する必要はありません。新しい値の格納を開始するだけです。

    請求書の例を続けると、一部の請求書にはVAT番号が含まれている場合と、含まれていない場合があります。 RDBMSでは、最初にVAT番号を受け入れ、次にそれがnullになる可能性があることをテーブルに指示する必要があります。ただし、NoSQLでは、VAT番号の有無にかかわらず請求書を保存できます。スキーマはありません。 NoSQLは特効薬ではないことに注意してください。データが本当にリレーショナルである場合は、RDBMSを使用するのが正しい選択です。

    NoSQLデータベースのクエリ

    MapReducingには、SQLクエリよりも優れた利点があります。これは、map / reduceタスクを複数のノードに分散できるためです。これは、RDBMSでは不可能なことです。

    NoSQLデータベースは、map/reduceを使用してデータベースのクエリとインデックスを作成します。 RDBMSでは、複数のテーブルを結合するクエリを実行して最初にデータのプールを作成し、次にクエリを実行してデータ全体のサブセットである結果セットを作成します。 NoSQLでは、map / reduceを使用して「ビュー」(結果セットと同様)を作成します。このビューは、データ全体のサブセットです。

    マップは基本的にデータを抽出し、データの集約を減らします。 RDBMSに精通しているほど、map/reduceを把握するのが難しくなります。 MapReducingは、SQLクエリよりも優れています。これは、map / reduceタスクを複数のノードに分散できるためです。これは、RDBMSでは不可能なことです。データベースに新しいレコードを追加しても、map/reduceタスクが完全に再実行されるとは限りません。

    CouchDBの紹介

    知っておくべきCouchDBに関するいくつかの事実:

    • CouchDBは、Erlangで記述されたJSONドキュメント指向データベースです。
    • これは、多数のデバイス間で水平方向に簡単に複製でき、フォールトトレラントになるように設計された高度な同時データベースです。
    • これは、NoSQL世代のデータベースの一部です。
    • これはオープンソースのApacheFoundationプロジェクトです。
    • アプリケーションがRESTfulインターフェースを介してJSONドキュメントを保存できるようにします。
    • map / reduceを利用して、データベースのインデックス作成とクエリを実行します。

    CouchDBの主な利点

    • JSONドキュメント -CouchDBに保存されているものはすべてJSONドキュメントに要約されます。
    • RESTfulインターフェース -作成からレプリケーション、データ挿入まで、CouchDBのすべての管理およびデータタスクはHTTP経由で実行できます。
    • Nマスターレプリケーション -無制限の数の「マスター」を利用できるため、非常に興味深いレプリケーショントポロジが作成されます。
    • オフライン用に構築 -CouchDBは、オフラインになり、デバイスがオンラインに戻ったときにデータ同期を処理できるデバイス(Androidフォンなど)に複製できます。
    • レプリケーションフィルター -さまざまなノードに複製するデータを正確にフィルタリングできます。

    すべてをまとめる

    CouchDBは、今日のインターネット上で実行するように設計されたデータベースです。

    CouchDBを使用すると、サーバー側の中間層を必要とせずにCouchと直接通信するクライアント側のアプリケーションを作成できるため、開発時間が大幅に短縮されます。 CouchDBを使用すると、レプリケーションノードを簡単に追加することで、需要を簡単に処理できます。 CouchDBを使用すると、データベースをクライアントに複製できます。フィルターを使用すると、特定のユーザーのデータを複製することもできます。

    データベースをローカルに保存するということは、クライアント側のアプリケーションをほとんど待ち時間なしで実行できることを意味します。 CouchDBがクラウドへのレプリケーションを処理します。ユーザーは、すべてオフラインのときに、携帯電話で請求書にアクセスし、目立った待ち時間なしで変更を加えることができます。接続が存在して使用可能になると、CouchDBはそれらの変更をクラウドCouchDBに自動的に複製します。

    CouchDBは、今日のデスクトップのようなアプリケーションと、インターネットにアクセスするために接続されたデバイスのために、今日のインターネット上で実行するように設計されたデータベースです。

    ステップ1-CouchDBのインストール

    システムでCouchDBを起動して実行する最も簡単な方法は、CouchOneにアクセスして、OS用のCouchDBディストリビューション(私の場合はOSX)をダウンロードすることです。 zipをダウンロードして解凍し、CouchDBXをアプリケーションフォルダーにドロップします(CouchOne上の他のOSの手順)。

    最後に、CouchDBXを開きます。

    ステップ2-布団へようこそ

    CouchDBが起動すると、CouchDBXアプリケーションにFutonコントロールパネルが表示されます。できない場合は、ブラウザから布団にアクセスできます。ログを見ると、CouchDBXは、CouchDBが http://127.0.0.1:5984/で開始されたことを示しています。 (システムによって異なる場合があります)。ブラウザを開き、 http://127.0.0.1:5984/_utils/に移動します 布団が見えるはずです。

    このチュートリアルの残りの部分では、Firefoxで布団を使用します。また、Firebugとコンソールビューを開いて、Futonが舞台裏で送信しているすべてのHTTPリクエストを確認します。これは、アプリケーションが布団が行っているすべてのことを実行できるので便利です。先に進んで、 mycouchshopというデータベースを作成しましょう。 。

    CouchDBjQueryプラグイン

    Futonは実際にjQueryプラグインを使用してCouchDBと対話しています。そのプラグインはhttp://127.0.0.1:5984/_utils/script/jquery.couch.jsで表示できます。 (ポートが異なる場合があることに注意してください)。これにより、CouchDBとの対話の優れた例が得られます。

    ステップ3-CouchDBのユーザー

    デフォルトでは、CouchDBは完全に開いており、すべてのユーザーにインスタンスとそのすべてのデータベースに対する管理者権限を付与します。これは開発には最適ですが、本番環境には明らかに悪い結果です。先に進み、管理者を設定しましょう。右下に「管理者へようこそ!全員が管理者です!これを修正してください」と表示されます。

    先に進み、これを修正をクリックします ユーザー名とパスワードを自分に入力します。これにより、管理者アカウントが作成され、匿名ユーザーはすべてのデータベースの読み取りおよび書き込み操作にアクセスできますが、構成権限はありません。

    ユーザーの詳細

    CouchDBでは、単一のスーパーユーザーを作成し、そのユーザーにすべての読み取り/書き込みを実行させるのは賢明ではありません。

    CouchDBのユーザーは、特にアプリケーション全体に対して単一のユーザーを作成し、次にユーザーテーブル(MySQLユーザーテーブルではなく)内でユーザーを自分で管理することに慣れている場合は、最初に理解するのが少し混乱する可能性があります。 CouchDBでは、単一のスーパーユーザーを作成し、そのユーザーにすべての読み取り/書き込みを行わせるのは賢明ではありません。アプリがクライアント側の場合、このスーパーユーザーの資格情報がJavaScriptソースコードにはっきりと表示されるためです。

    CouchDBには、ユーザーの作成と認証が組み込まれています。 $。couch.signup()を使用して、jQueryプラグインでユーザーを作成できます。 。これらは基本的にシステムのユーザーになります。ユーザーは他のすべてと同じようにJSONドキュメントであるため、たとえばメールなどの追加の属性を保存できます。次に、CouchDB内のグループを使用して、各ユーザーが書き込みアクセス権を持つドキュメントを制御できます。たとえば、そのユーザーが書き込み可能なデータベースを作成し、必要に応じて他のデータベースへの読み取りアクセス権を持つグループに追加することができます。

    ステップ4-製品ドキュメントの作成

    それでは、次の手順で布団を使用して最初のドキュメントを作成しましょう。

    1. mycouchshopを開きます データベース。
    2. [新しいドキュメント]をクリックします。
    3. [フィールドの追加]をクリックして、JSONドキュメントへのデータの追加を開始します。 IDが事前に入力されていることに注意してください。これは、変更しないことを強くお勧めします。キー「name」に「NettutsCouchDBTutorialOne」の値を追加します。
    4. 各属性の横にあるチェックマークをクリックして保存してください。
    5. [ドキュメントを保存]をクリックします。

    レベルを上げてデータベースに戻ると、前のIDがキーとしてリストされ、値が {rev:で始まる1つのドキュメントが表示されます。 。これは、作成したばかりのJSONドキュメントです。

    ステップ5-ドキュメントの更新

    CouchDBは追加専用データベースです。新しい更新がデータベースに追加され、古いバージョンを上書きしません。既存のIDを持つJSONドキュメントを新しく更新するたびに、新しいリビジョンが追加されます。これは、自動的に挿入されるリビジョンキーが意味するものです。以下の手順に従って、これが実際に動作することを確認してください。

    • mycouchshopのコンテンツを表示する データベースで、表示されている唯一のレコードをクリックします。
    • キー「type」と値「product」で別の属性を追加します。
    • [ドキュメントを保存]をクリックします。

    保存を押すと、番号2から始まる新しいリビジョンキーが表示されます。レベルを mycouchshopに戻します。 データベースビューでは、引き続き1つのドキュメントのみが表示されます。これは、製品ドキュメントの最新リビジョンです。

    改訂

    CouchDBは内部でリビジョンを使用しますが、あまり頼りすぎないようにしてください。リビジョンは布団で簡単に掃除でき、リビジョン管理システムとして使用するようには設計されていません。 CouchDBは、レプリケーション機能の一部としてリビジョンを使用します。

    ステップ6-cURLを使用してドキュメントを作成する

    CouchDBがRESTfulインターフェースを使用していることはすでに述べましたが、イーグルアイのリーダーは、Firebugのコンソールを介してFutonがこれを使用していることに気づいたでしょう。そうでない場合は、ターミナルからcURLを使用してドキュメントを挿入することでこれを証明しましょう。

    最初 、以下の内容でJSONドキュメントを作成し、ファイル person.jsonを呼び出してデスクトップに保存しましょう。 。

    	{
    		"forename":	"Gavin",
    		"surname":	"Cooper",
    		"type":		"person"
    	}

    次へ 、ターミナルを開き、 cd〜/ Desktop /を実行します 正しいディレクトリに配置してから、 curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @ person.json -H "Content-Type:application / json" 。 CouchDBは、以下のようなJSONドキュメントを返すはずです。

    {"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c","rev":"1-abadd48a09c270047658dbc38dc8a892"}

    挿入した文書のIDとリビジョン番号です。 CouchDBはRESTfulの規則に従うため、次のようになります。

    • 投稿 -新しいレコードを作成します
    • 取得 -レコードを読み取ります
    • PUT -レコードを更新します
    • 削除 -レコードを削除します

    ステップ7-すべてのドキュメントの表示

    mycouchshop にあるすべてのドキュメントを表示することで、挿入をさらに確認できます。 curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docsを実行してデータベース 。

    ステップ8-単純なマップ関数の作成

    すべてのドキュメントを表示することは、実際にはかなり役に立ちません。より理想的なのは、すべての製品ドキュメントを表示することです。これを実現するには、以下の手順に従ってください。

    • 布団内で、ビューのドロップダウンをクリックし、[一時的なビュー]を選択します。
    • これは、Futon内のマップリデュースエディターです。以下のコードをマップ関数にコピーします。
      			function (doc) {
      				if (doc.type === "product" && doc.name) {
      					emit(doc.name, doc);
      				}
      			}
    • [実行]をクリックすると、前に追加した単一の製品が表示されます。
    • 先に進み、このビューを保存して永続的にします。

    この単純なマップ関数を作成した後、次のコマンド curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products <を使用して、このビューをリクエストし、HTTP経由でその内容を確認できます。 / code> 。

    注意すべき小さな点は、デフォルトでドキュメントのIDとリビジョンを取得する方法です。

    ステップ9-リデュースの実行

    便利な割引を実行するために、データベースに別の商品を追加し、最初の商品に値1.75の価格属性を追加しましょう。

    	{
    		"name":		"My Product",
    		"price":	2.99,
    		"type":		"product"
    	}

    新しいビューには、マップだけでなくリデュースも含まれます。まず、以下のように定義されたマップを作成する必要があります。

    	function (doc) {
    		if (doc.type === "product" && doc.price) {
    			emit(doc.id, doc.price);
    		}
    	}

    上記のマップ機能は、入力されたドキュメントが製品であるかどうか、および価格があるかどうかを確認するだけです。これらの条件が満たされている場合、製品価格が発行されます。削減機能は以下のとおりです。

    function (keys, prices) {
    	return sum(prices);
    }

    上記の関数は価格を取得し、CouchDBに組み込まれているreduce関数の1つを使用して合計を返します。結果テーブルの右上にあるreduceオプションを必ずチェックしてください。そうしないと、reduceの結果が表示されない場合があります。削減オプションを表示するには、ページをハードリフレッシュする必要がある場合があります


    1. nodejsでMongoDBクエリ結果をストリーミングする方法は?

    2. Ubuntu Linux、R、およびRStudioで奇妙なソケット接続エラーが発生したdoRedis

    3. 挿入後にPyMongoでオブジェクトIDを取得するにはどうすればよいですか?

    4. UbuntuにMongoDBをインストールして構成する方法