今日のCouchDB





あなたにずっおCouchDBずは䜕ですか おそらく、人気のあるNoSQLテヌマに少しでも興味がある人ならだれでも䞀般的な詳现を知っおいるでしょう。これは、JavaScriptで蚘述されたmap / reduceリク゚ストを備えたずおもいいおもちゃです。あなたはそれがフォヌルトトレラントだず聞いた、あなたはたったく壊れたせん。 通垞、これはこれを超えるこずはありたせん。その結果、CouchDBはあらゆる皮類のMongoDB、Cassandra、Hadoopなどずずもにdeliciousに送信されたす。



最近たで、珟圚のプロゞェクトのアヌキテクチャを再考しリレヌショナルデヌタベヌスに額を眮いお、マップ/瞮小できるドキュメントデヌタベヌスに移行する緊急の必芁が生じるたで、ほが同じ意芋でした。 CouchDBを詳しく調べおみたずころ、このクラスで他に類を芋ないものであり、蚀及された補品ず同等にすべきではないこずに気付きたした。 CouchDBに組み蟌たれおいるアむデアは非垞に抂念的であるため、Webアプリケヌション開発のアむデアを根本的に倉えるこずができたす。



私はカットの䞋で私がずおも感銘を受けたものに぀いお話そうずしたす。



すぐにCouchDBを䜿甚した経隓がある堎合は、自分が「口ひげを生やしおいる」可胜性が高く、この蚘事はあなたには向いおいないず思いたす。 しかし、残りに぀いおは、読んだ埌、Couchの開発者が掚奚するように、そのような赀い゜ファに暪たわっおリラックスする欲求ず機䌚が衚瀺される堎合がありたす。



CouchDBの呚りの誇倧広告は最近たでやや萜ち着いおいるず蚀わなければなりたせんが、このデヌタベヌスの蚀及はハブ䞊でめったにスリップしたせんが、TwitterはCouchDB 1.0のリリヌスずCloudantがクロヌズドベヌタテストフェヌズを離れるずいうニュヌスで文字通り爆発したしたこれに぀いおはお話したす詳现は以䞋をご芧ください。 怜玢では、このむベントは実際にはハブでカバヌされおいなかったが、MongoDB 1.6の出力は別の投皿ずしお泚目されたず述べおいたす。 この䞍正を修正する必芁がありたす。CouchDBの挿入が遅く、メモリずプロセッサの消費が非垞に倚い生のアルファずしお蚘憶しおいる堎合、これはすべお過去のものであるこずを忘れるからです。 今日では、手頃な䟡栌の商甚サポヌトず、たずえばBBCなどの䌁業による生産での実際の䜿甚を備えた生産準備の敎ったシステムです。







必芁に応じおプロゞェクトのWebサむトで参照できる䞻な機胜に぀いおは詳しく説明したせん。 この補品を詳しく調べるこずに決めたたで、私には明らかではなかったこずに぀いお話そうずしたす。その結果、この補品に十分な泚意を払わなかった䞀方で、倚くの時間ず神経现胞を節玄できたした。



マップ/削枛



誰かに䜕かを驚かせるこずは難しいようです。 倚くのNoSQLデヌタベヌスは、厳密に定矩されたスキヌムを持たないデヌタぞのアクセスのこの特定のパラダむムを䜿甚したす。 加えお、JavaScriptを䜿甚しおmap / reduce関数を蚘述するこずも驚くべきこずです。 最初の印象は、デヌタベヌス内の各ドキュメントに察しお少なくずもmap()



実行する必芁があるため、ゆっくりず怖がるべきだずいうこずです。 さらに、SpiderMonkey゚ンゞンの速床はV8ずはかけ離れおいたす。 キャッチは䜕ですか



鋭い目で芋るず、実際には、CouchDBはその玔粋な圢匏でmap / reduceではなく、いわゆる 増分マップ/削枛。 党䜓的な考え方は、CouchDBはそのビュヌいわゆるビュヌmap()



やreduce()



などの関数を実行した結果を毎回蚈算しないずいうこずです。 これは、新しいビュヌに最初にアクセスしたずきにのみ行われたす。その埌、結果は穏やかにむンデックス付けされ、ドキュメントIDはノヌドの远加情報および䞭間曎新の結果で必芁なキヌのB +ツリヌに萜ち着きたす。 その埌、すべおが簡単です。新しいドキュメントがデヌタベヌスに远加されるずたたは叀いドキュメントが倉曎されるず、 map()



が1回呌び出され、その埌むンデックスツリヌに配眮されたす。 ぀たり むンデックス党䜓を再蚈算する必芁はありたせん。ツリヌは単玔に増分的に完成したす。



結果が必芁な堎合、Couchは事前に蚈算枈みのものを提䟛するだけで、 map()



実行しおドキュメントを再クロヌルする必芁はありたせん。 ほずんどのデヌタベヌスが行うように、怜玢を高速化するために耇数の個別の列にむンデックスを付けるのずは察照的に、すべおのク゚リ結果を䞀気にむンデックス付けしたした。 ク゚リを「実行」する必芁がないMySQLを想像しおください。単䞀のむンデックスからすべおの結果をすぐに取埗できたす。



頭に浮かぶ唯䞀の類䌌物は、Oracleのような「倧芏暡な」RDBMSからのマテリアラむズドビュヌですが、はるかに軜量です。 結果のむンデックスのみが保存され、必芁な倀のみが保存されるこずを忘れないでください-マップ/リデュヌス結果のみがむンデックス化されるため、冗長性は倚くのむンデックスを持぀通垞のデヌタベヌスず比べおそれほど倧きくありたせん-このク゚リのコンテキストで必芁なデヌタは、すべおの列。 はい、珟圚、この方法が玄束する可胜性に比べお、ネゞは安䟡です。



もっず力が必芁©



map()



が基本的に新芏/倉曎された各ノヌドに察しお䞀床だけ実行されるずいう事実は非垞に興味深いです。 これにより、䞀床行ったずにかく、新しいドキュメントに察しお非垞に重い操䜜を実行できたす。 たた、組み蟌みのJavaScriptむンタヌフェヌスでオヌバヌクロックされおいないように芋える堎合、CouchDBの別の興味深い機胜がポップアップしたす。実際、特定の蚀語に関連付けられおおらず、Viewサヌバヌの圢匏で抜象化を䜿甚しおいたす。 ぀たり 奜みのプログラミング蚀語のビュヌサヌバヌを接続し、Pythonでmap()



およびreduce()



を曞き蟌むだけで、たずえばその豊富な暙準ラむブラリを䜿甚したす。



抂しお、倖郚サヌビスGoogle Maps APIなどを䜿甚しおデヌタベヌスに远加されたクラむアントのアドレスをゞオコヌディングし、別の倖郚ラむブラリずしおゞオむンデックスを蚈算するために、 map()



から新しいドキュメントを盎接远加する際に煩わされるこずはありたせん。 たたは、Sphinxでドキュメントを取埗しおむンデックスを䜜成し、デヌタベヌスの超高速フルテキストむンデックスを取埗したすApache Luceneずの統合が十分でない堎合。 䞀般的に、創造性の範囲は想像力によっおのみ制限されたす。



さらに速床が必芁な堎合は、ビュヌサヌバヌむンタヌフェむスがシャベルのように単玔であり、CouchDBのビュヌがたったく同じドキュメントであるか、特別なIDを持぀デザむンドキュメントであるずいう事実を利甚しお、すべおのビュヌ関数をCで曞き換えるこずができたす。 したがっお、関数コヌドを盎接含める必芁はありたせん。ビュヌサヌバヌが理解できる識別子を含めお、そこに眮くこずができたす。 䞀般に、デヌタずこのデヌタをたったく同じデヌタの圢で凊理するための呜什のこのむデオロギヌ的統䞀は、Lispのむデオロギヌに䌌おいるこずは泚目に倀したす。



map / reduceパラダむムはSQLク゚リなどの機胜を提䟛したせんが、実際には、カテゎリヌでそれを考える方法を孊ぶ必芁があるず圌らに蚀わせおください。 したがっお、たずえば、SQLなしではJOINを実行できないずいう゚ラヌは、 結合はスケヌリングされたせん。 これはすべお意味がありたせんが、文は䞀般的すぎたす。 たず、ドキュメントにはキヌず倀のペアだけでなく、コレクション、その他のオブゞェクト、およびJSONを䜿甚しお蚘述できるすべおのものを含めるこずができたす。次に、基本的なパタヌンを知っお、さらに耇雑な結合を実装できたす。 CouchDBは非垞に匷力であるず同時に、理解可胜で論理的です。



そのたたのりェブ



ほずんどの遞択肢ずは異なり、CouchDBは䞻にWebアプリケヌションのニヌズに察応するデヌタベヌスずしお蚭蚈されたした。 したがっお、RESTむンタヌフェヌスを介したデヌタベヌスぞのアクセスなど、重芁な゜リュヌションのルヌツです。 はい、最も玔粋な圢匏のHTTPにはオヌバヌヘッドがありたすが、この゜リュヌションがいかに゚レガントであるかによっお完党に盞殺されたす。 たず、お奜みのプログラミング蚀語のドラむバヌを探す必芁はありたせん-どのHTTPクラむアントでもそれを凊理できたすすべおの䟋は、ほずんどの堎合、コマンドラむンから盎接カヌルしたす。 さらに、そのようなクラむアントはWebブラりザである堎合がありたす。 サヌバヌ䞊のミドルりェアを䜿甚せずにWebアプリケヌションを䜜成できたす。Ajaxを介しおJavaScriptを䜿甚しおデヌタベヌスを操䜜できたすたずえば、 CouchAppはCouchDBの䜜成者によるjQueryベヌスのフレヌムワヌクです。







開始埌、Couchは通垞のHTTPサヌバヌのように動䜜したす。ブラりザヌを䜿甚しおCouchにアクセスし、ブラりザヌのアドレスバヌを䜿甚しお単玔にGETリク゚ストを実行し、結果ずしおJSONを受け取りたす。 CouchDBむンスタンスの管理むンタヌフェヌスであるFutonもすぐに利甚可胜になりたす。 ちなみに、サヌバヌミドルりェアなしでJavaScriptで完党に実装されおおり、拡匵性があり、そのシンプルさにもかかわらず倚くの興味深いこずができたす。



HTTPプロトコルが正しく実装され、キャッシュがサポヌトされ、Couchが304を提䟛するタむミングを知っおいるず蚀うこずはほずんど意味がありたせん。同様に、ドキュメントにはバむナリ添付ファむルattachments-BLOBに盞圓を含めるこずができたす。 。 デザむンドキュメントにはshow()



およびlist()



含めるこずもできたす。これにより、返された結果を必芁に応じお、たずえばHTMLペヌゞに倉換し、ブラりザに盎接枡すこずができたす。 たた、以前に、オンラむンストアの商品からのナヌザヌアバタヌず写真を盎接[リレヌショナル]デヌタベヌスに保存するのが悪いずいう意芋があった堎合、CouchDBではすべおが異なりたす-堎合によっおは、厳栌なスキヌムのないデヌタでもより構造化されるこずがありたすそしお党䜓。



ご存知のように、すべおの独創的なこずは簡単です。 CouchDBには、なんらかの方法で凊理する必芁がある抜象的なデヌタではなく、Webアプリケヌション専甚に行われたこのような単玔なこずがたくさんありたす。 最終的には、すべおが䞀貫しおいるように芋えるため、どのように異なる方法で実行できるかさえ明確ではありたせん。



スケヌリング



CouchDBは、スケヌルしないず蚀われおいたした。 確かに、それほど前ではありたせんでしたが、半分だけでした。 たず最初に。



CouchDBの重芁で最も興味深い機胜の1぀は、その耇補です。 読者は、レプリケヌションが原則ずしおどのように興味深いものになるのか疑問に思うかもしれたせん。 Kauchではすべおが間違っおいたす;その耇補はもずもずデヌタベヌスの䜜成時に蚭蚈されたした。 たず、マスタヌツヌマスタヌを䜿甚できたす。これにより、むンスタンスをマスタヌ/スレヌブに分割するのではなく、すべおのむンスタンスを同等に機胜させるこずができたす。 「通垞の」デヌタベヌスでのこのようなレプリケヌションの問題は、朜圚的な競合です。 したがっお、CouchMVCC機胜を䜿甚は、競合が発生するず、競合するすべおのバヌゞョンを保存し、構成されたルヌルに埓っおこれらの競合を解決する方法を認識したすたたはこの問題をアプリケヌションに委ねたす-䜿甚方法は想像力に䟝存したす。 レプリケヌション自䜓は、CouchDB REST APIからURLをプルするこずになりたすたたはFutonを䜿甚するず、別のデヌタベヌスのURLを入力しおボタンをクリックするだけです。これはすべお耇雑です。



茞送䞭に食べお、Nexus OneでTwitterに䜕かを曞いおCouchDBはAndroidの携垯電話でもMaemo / MeeGoでも完党に機胜するずは蚀いたせんでした、トンネルに入りたす-接続倱われたす。 アプリケヌションを安党に䜿甚し続けるこずができたす。これにより、接続が戻ったずきに、自転車を発明するこずなく、新しいメッセヌゞをマヌゞしお、1぀のAPI呌び出しで蚘述した内容を入力できたす。 たずえば、Ubuntu Oneを䜿甚する堎合、すでにこの方法でCouchDBを䜿甚しおいたす。







しかし、トピックから気を散らさないようにしたしょう。 このようなレプリケヌションは確かに優れおいたす特にCouchDB HTTPの性質を考慮するず、通垞のバランサヌをKauchyクラスタヌの前に眮くこずができ、心配する必芁はありたせんが、これは「実際の」スケヌリングではありたせん。 レプリケヌションずリレヌショナルデヌタベヌスはそれほど゚レガントではありたせんが拡匵できたすが、シャヌディングはどうですか 結局、誰もがクラスタヌ䞊のデヌタを汚し、ノヌドを远加するだけで、速床を萜ずすこずなく、䜿甚可胜なディスク容量、最倧負荷、ピヌクナヌザヌ数などを増やすだけです。 CouchDBは、すぐにこれを行う方法を知りたせん。 たたね しかし、これは時間の問題です。



しかし、 Cloudantはできたす。 Cloudantは、数日前にベヌタテストを完了した新しいサヌビスであり、珟圚ではすべおの人が利甚できたす。 これは、CouchDBがデヌタベヌスだけでなくミドルりェアにも察応できるこずを考えるず、CouchDBデヌタベヌスAmazonのクラりド䞊、さらにはアプリケヌション党䜓のホスティングです。 みんなはCouchDBに甚意された可胜性を利甚し、フォヌクすぐにトランクの䞀郚になるチャンスがありたすを開発したした。ノヌドの1぀が脱萜した堎合の異なるノヌド。 さらに、暙準APIの完党なサポヌトに加えお、Cloudantでは、別のmap / reduceの結果に応じおmap / reduceを実装でき、さらに倚くの興味深い機胜がありたす。







すべおのコヌドが開いおいるため、プラむベヌトクラりドでCloudantを遞択しお䜿甚できたす。 たた、 無料のアカりントドキュメントの叀いリビゞョンを考慮せずに最倧250メガバむトのディスク領域を登録し、CouchDBをラむブで詊すこずができたす。 垃団。



きょう



7月のCouchDBはバヌゞョン1.0に成長したした。開発者は、CouchDBがその安定性ず本番甚の準備を匷調しおいたす。 Cloudantは、CouchDBコミュニティ党䜓にずっお画期的なリリヌスでもありたす。 Couchを詊しおいない堎合は、時間を30分費やしおください。最終的にはより倚くの時間を節玄できたすが、これはもちろん特定のプロゞェクトの詳现に䟝存したす。 補品は䜜成されたずおりに機胜したすが、それ以䞊は機胜したせん。 したがっお、奇跡を期埅しないでください。しかし、読んだ埌、開発者が掚奚するように、誰かがリラックスするこずを願っおいたす特に赀い゜ファがある堎合。



All Articles