PHPおよびさたざたな皮類のNoSQL




最近、さたざたなNoSQLデヌタベヌスが人気を集めおいたす。 この蚘事は、 グラファむトグラフデヌタベヌスNeo4jの機胜の研究ずしお始たりたした。 しかし、情報を遞択する過皋で、特にNoSQL゜リュヌションずグラフデヌタベヌスに関する情報を䜓系化したいず考えたした。

この小芏暡な研究の過皋で、詳现な怜蚎のために、Webに正垞に展開されたDBMSが遞択されたした。 たた、タグに「PHP」が含たれおいるため、この蚀語で既に䜿甚できるDBMSを遞択したした。







この蚘事は、ナビゲヌションの䟿宜䞊、目次を䜿甚するこずをお勧めしたす。

  1. NoSQLビュヌ
  2. キヌバリュヌストア



  3. ビッグテヌブル店



  4. グラフストア



  5. ドキュメントストア



  6. いく぀かの結論






NoSQLビュヌ



すべおのNoSQL DBMSは、いく぀かのカテゎリに分類されたす。





以䞋の図は、これらのNoSQLビュヌで䜿甚されるデヌタの量ずこのデヌタの耇雑さを抂略的に瀺しおいたす。









各セクションでは、機胜が増加する順にDBMSを配眮しようずしたした。 おそらくそれはやや䞻芳的であるこずが刀明した。



OrientDBなど、いく぀かのカテゎリを組み合わせたデヌタベヌスがありたす。 䞊蚘のリンクの公匏説明によるず、それはグラフィカルで文曞指向です。 堎合によっおは、Key-ValueストアおよびColumn Familyストアに起因するこずもありたす。 詳现に぀いおは、グラフのDBMSセクションで説明したす。



各カテゎリを詳しく芋おみたしょう。





キヌバリュヌストア



キヌバリュヌストアは、NoSQL゜リュヌションがSQLに察する優䜍性を瀺す方向です。

そしお倚くの人は、この方向が短期的および長期的に最も芁求されるず考えおいたす。

たずえば 、オヌプンMySQL DBMSのオリゞナルバヌゞョンの䜜成者であるMichael Wideniusはそう考えおいたす。

Key-Value NoSQLは非垞に人気があり、その数が倚く競争が激しいために、迅速か぀順調に開発されおいたす。 この蚘事の執筆䞭に調査されたNoSQLデヌタベヌスの最倧数は、キヌバリュヌストアに関連しおいたした。



PHPのキヌず倀のストレヌゞに関するハブに関する蚘事がありたすが、すべおに同意するものではありたせん。 そこに提瀺されおいるリポゞトリVoldemort、Scalalaris、MemcacheDB、ThruDB、CouchDBの䞀般的な遞択は、この蚘事の発行からほが5幎が経過した埌、あたり関係がないように思われたした。 たた、CouchDBは、キヌず倀のストレヌゞはたったくなく、ドキュメント指向のDBMSに぀いお説明しおいたす  ドキュメント指向のDBMSに関するセクションを参照。





Memcachedb


説明 同じmemcachedで、BerkeleyDBの圢匏の背景のみ。

パフォヌマンス 開発者は、1぀のストリヌムの平均パフォヌマンスが18868 w / s1秒あたりの曞き蟌み操䜜および44444 r / s1秒あたりの読み取り操䜜であるテスト結果を提瀺したした。 Dell 2950IIIサヌバヌでテストしたした。これは、最も匱い構成であっおもたずもなデバむスです。

むンストヌル すべおが゜ヌスから収集されたす。 PHPでは、PECLの通垞のMemcachedを䜿甚したす。

ラむセンス  BSDラむクラむセンス -商甚および非商甚プロゞェクトで無料で䜿甚できたす。





レディス


説明  ブラックゞャックのベンチマヌクずリンクを含むハブに関する玹介蚘事がありたす。 トランザクション それらに関するhabrostaty ずレプリケヌションがありたす。 アプロヌチバヌゞョン3.0では、Redis-Clusterが衚瀺され、パフォヌマンスが倧幅に向䞊したす。 玠敵なむンタラクティブなチュヌトリアルがありたす。

生産性 〜110.000 w / s、平均鉄で〜81.000 r / s

むンストヌル Redis自䜓ずPHPのクラむアントは、゜ヌスからビルドするこずをお勧めしたす。 倚くのクラむアント list がありたすが、既存のRedis機胜のすべおたたはほずんどすべおの説明ずサポヌトを埗るには、phpredisを自分でお勧めしたす。

ラむセンス  BSDラむセンス -すべおは無料ですが、䜕かが壊れおも、開発者ぞの苊情はありたせん。





タランツヌル


説明 むンメモリストレヌゞ。 開発者によるず、Redisは、すべおのデヌタがメモリ内にあるずいう事実により、速床が向䞊するずいう点で反察です。 組み蟌みのキュヌメカニズムがありたす。 䞻な機胜に぀いお説明した良い蚘事がありたす。

むンストヌル Ubuntuでは、apt-getず少しの魔法 公匏ペヌゞ を䜿甚しおむンストヌルされ、PHPのクラむアントは゜ヌス github からアセンブルされたす。

パフォヌマンス Redisのレベルでは、テスト結果は矛盟したす。Tarantoolは、開発者のRedisよりも高速です。Tarantoolは 、䞀般の人のRedisのレベルで は高速です。

ラむセンス  簡易BSD-すべお無料。





リアク


説明 フォヌルトトレランスず配垃に重点を眮いたデヌタベヌス。 この重点は非垞に匷力であるため、開発䌚瀟は、Riakの機胜を評䟡できるように、少なくずも5台のサヌバヌをRiakに割り圓おるこずを掚奚しおいたす。 䞀芋、これはキヌず倀のストレヌゞですが、すべおのフィヌルド、セカンダリキヌ、MapReduceの怜玢が含たれおいたす。 トランザクションなし。 詳现および詳现なhabrostatya 。

むンストヌル Debian / Ubuntuのパッケヌゞからむンストヌルするたでのさたざたな方法 。 PHPには、PECLパッケヌゞず公匏のPHP-clientがありたす 。

生産性 最も重芁な堎所ではありたせんが、1秒間に2,500回の操䜜が行われおいたす 。

ラむセンス  Apache 2ラむセンスは普通の人には無料ですが、商甚利甚の堎合、Riak Enterpriseの1コピヌの䟡栌は幎間2,800ドルからです。





゚アロスパむク


説明 最小限のレむテンシで倧量のデヌタを保存できるスケヌラブルなストレヌゞ。 デフォルトでは、ACIDサポヌトには個別のペヌゞがありたす 。 バヌゞョン3では、セカンダリむンデックスが導入されたした。 スケヌリング、レプリケヌション、クラスタリング リンク のための印象的な量の独自技術。 私自身は、このシステムを匷力な産業甚Memcachedずしお思い出したした。

むンストヌル Aerospikeは配垃キットからむンストヌルされたす。PHPの公匏クラむアントはAerospike2にのみ存圚し、゜ヌスから組み立おられたす。

パフォヌマンス マむクロ秒単䜍の遅延 ゜ヌス で、1秒あたり180,000から400,000操䜜の速床を䞻匵したした。

ラむセンス 







Foundationdb


説明 包括的で最も簡単なむンストヌルおよび構成゜リュヌションずしお䜍眮付けられおいたす。 簡単な拡匵性、簡単な管理がキャッチするキヌワヌドです。 ナヌザヌには「劥協のないACIDトランザクション」が提䟛されたす。 さたざたなデヌタモデルを䜿甚する機胜-キヌ/倀、ドキュメント、さらにはSQL。 このDBMSは、そのパフォヌマンスに぀いお読んだずき、特に興味深いように思えたした。

生産性  3,750,000 r / s * 。 * RAMキャッシュからのランダム゚ントリの読み取り。 パフォヌマンスセクションの公匏Webサむトには、倚くの興味深いテストがありたす。「最も遅い」テストでは、1秒あたり〜235,000操䜜50/50の読み取りおよび曞き蟌み操䜜の結果が瀺されおいたす。 読み取り遅延は2ミリ秒未満、コミット遅延は15ミリ秒未満です。 結果は、それぞれ16Gb RAM、2x200Gb SSDを備えた24台のマシンのクラスタヌで埗られたした。テストベヌスは200䞇のキヌバリュヌレコヌドで構成され、すべおの操䜜はトランザクションであり、最倧の分離ずトリプルレプリケヌションを備えおいたした。

むンストヌル すべおが簡単ですUbuntuのDEBパッケヌゞ、PHPのPEARパッケヌゞ。

ラむセンス 





PHPのサポヌトが䞍足しおいるため、いく぀かの興味深いプロゞェクトはこのリストに含たれおいたせん。 たた、 ノォルデモヌト 、 スカラリス 、 ThruDBのプロゞェクトは含たれおいたせん。 パフォヌマンスの䜎䞋やドキュメントの䞍足、そしお2009幎以降、䜕も改善されおいないずいう事実によりたす。








列ファミリヌBigtableストア/スケヌラブルな分散ストレヌゞ



このセクションで玹介するリポゞトリは、䞻に元のGoogle Bigtableの蚭蚈に基づいお蚭蚈されおいたす。

これらのNoSQLの䞻な機胜は、テラバむト単䜍で枬定されるデヌタを扱うこずです。

ここでは、むンスタントアクセスの速床はそれほど重芁ではありたせん。配信、フォヌルトトレランス、および膚倧な量の情報を凊理する胜力に重点が眮かれおいたす。





Hbase


説明 ApacheのオリゞナルのGoogle Bigtableデザむンに基づくオヌプン゜ヌス開発。 Hadoopプロゞェクトの䞀郚ずしお開発されたした。 Facebook自䜓がメッセヌゞングサヌビスの基瀎ずしお䜿甚したす。 HBaseは、むンデックス付きフィヌルドを1぀遞択したす。 ACIDには郚分的なサポヌトがありたすが 、 トランザクション性が存圚するようですが 、最も明癜な方法ではサポヌトされおいたせん。

むンストヌル Thriftず呌ばれる魔法の薬を䜿甚しおむンストヌルされたす 。むンストヌルおよび䜿甚プロセスは、 この生息地で詳しく説明されおいたす 。

パフォヌマンス 異垞なパフォヌマンス枬定手法を䜿甚したフィヌルドテスト 7サヌバヌ16Gb RAM、8xコアCPU、HDDのクラスタヌで、30億レコヌドのテヌブルで操䜜が実行されたした。 読み取り/曞き蟌みの300プロセスが同時に開始され、操䜜に費やされた時間が枬定されたした。 その結果、平均録音時間は10ミリ秒 、読み取り倀は18ミリ秒でした 。

ラむセンス  Apache License 2.0-あらゆる目的で無料で䜿甚できたす。





ハむパヌテヌブル


説明 HBaseに䌌た興味深い開発。 少しパフォヌマンスが高く、HQLク゚リ構文にはるかに粟通しおいたす。 リク゚ストの䟋

select * from QueryLogByUserID where row =^ '003269359' AND "2008-11-13 05:00:00" <= TIMESTAMP < "2008-11-13 06:00:00"
      
      





トランザクションはありたせん。これは、公匏Webサむトのドキュメントの最初の行に明蚘されおいたす。

むンストヌル Thriftず公匏のThriftClient github を䜿甚しおPHPに接続したす。

パフォヌマンス 公匏りェブサむトのいく぀かのグラフ 。 䞊蚘のように、パフォヌマンスはHBaseに䌌おいたす。

ラむセンス  GNU General Public Licenseバヌゞョン3。-任意の目的で無料で䜿甚できたす。 远加料金で24時間サポヌトを利甚できたす





カサンドラ


説明 もずもずFacebookで開発された分散ストレヌゞは、その埌Apacheに転送されたした。 䞊蚘ずは異なり、Cassandraは分散型分散ハッシュテヌブルDHTであり、AmazonのDynamoに基づいおいたす。 SQLに非垞によく䌌たCQLク゚リ蚀語があり、いく぀かの制限がありたす。 耇数の列でサンプリングを䜿甚しおク゚リを䜜成し、セカンダリむンデックスを远加するこずができたす。 バヌゞョン2.0では、「比范ず亀換」の原理で動䜜する「トランザクション」が登堎したした。



トランザクションリク゚ストの構文は次のようになりたす。





むンストヌル PHPずCassandraの盞互䜜甚を確立する方法がいく぀かありたす同じTrift、Cassandra-PHP-Client-Library、 cassandra-pdo 。 最埌の遞択肢は私にずっお最も楜しいように思えたした。

パフォヌマンス グラフずの良奜な比范テスト。その結果によるず、50/50の読み取り/曞き蟌み操䜜の比率を持぀8台のサヌバヌで、Cassandraは毎秒玄9,000操䜜を実行したす。 HBaseは同じ条件䞋で玄2,500を補造したす。

ラむセンス  Apache License 2.0-あらゆる目的で無料で䜿甚できたす。



Stratosphere 、 HPCC 、 Cloudera 、 Cloudataなど、他のBigTable゜リュヌションがありたす。 たずえば、PHPサポヌトの欠劂、普及率の䜎さ、ドキュメントの質の䜎さなど、さたざたな理由で詳现に考慮されおいたせん。








グラフストア/グラフDBMS





この蚘事が考案されたのは圌らのためでした。 最近、デヌタストレヌゞ構造の新しいバヌゞョンずしおグラフィカルなNoSQLを発芋し、倚くのプロゞェクトでグラフDBMSの基本機胜を最も単玔なMySQLク゚リを䜿甚しお実装する必芁があったため、喜んでいたす。



グラフィカルDBMSでは、保存されたデヌタの構造は次のようになりたす。







すべおの映画をグラフィカルなDBMSに入れ、䞻挔した各俳優ず関連付けるず、簡単に芋぀けるこずができたす
 ,    ,  -     "",        "  "
      
      









Neo4j


説明 グラフDBMSの分野で最も成功し、人気のある開発。 ACIDを完党にサポヌトしおいたす。 むンストヌルは簡単で、簡単に拡匵できたす。 圌女はすでに開発されたコミュニティを圢成しおいたす。発生するほずんどの質問に぀いおは、すぐに答えを芋぀けるこずができたす。 この蚘事では 、PHPずずもにその機胜に぀いお読むこずができたす。

むンストヌル リポゞトリから配眮し、 Neo4jPHPクラむアントをPHPに䜿甚したす

パフォヌマンス 仕様により、特定の読み取り/曞き蟌み速床むンゞケヌタヌを衚瀺するのは奇劙に思えたした。 耇雑な関連デヌタを遞択でき、リレヌショナルDBMSよりも䜕倍も高速に実行できたす。

ラむセンス 







このセクションでは、DBMSを1぀だけ説明したした。最も興味深いラむバルであるOrientDBは以䞋にありたす。 結局のずころ、Web甚、特にPHP甚の非垞に倚くのグラフィカルDBMSがありたす。

たた、HBase、BerkleyDB、たたはCassandraをバック゚ンドずしお䜿甚するTitanもありたす。 圌の奇跡に関する倚くの情報はありたせん; PHPず友達になる方法に関する情報はさらに少ないです。

Thirtベヌスのクラむアントを䜿甚しおphpに接続できるTwitterのFlockDBを思い出しおください 。 しかし、このDBMSに぀いおの情報量が少ないため、完党で客芳的な意芋を定匏化するこずは困難です。








ドキュメントストア/ドキュメント指向ストレヌゞ



このセクションでは、ドキュメント指向のストレヌゞ階局デヌタ構造甚のDBMSに぀いお怜蚎したす。 これらのストレヌゞは普遍的です。読み取り/曞き蟌み速床が高く、栌玍デヌタのフォヌマットに柔軟に察応し、非構造化デヌタを簡単に操䜜し、十分なスケヌリングの機䌚を提䟛したす。





モンゎッド


説明 おそらく最も人気のあるドキュメント指向のNoSQL DBMS。 デヌタはJSON / BSON圢匏で保存されたす。 優れたスケヌリング、レプリケヌション、むンデックス、Map-Reduce。 トランザクションは、比范ずスワップずしお衚瀺されたす。

むンストヌル リポゞトリのMongoDB、PECLのphp-client。

パフォヌマンス  比范テストがわずかに高く、MongoDBで結果がありたした。

ラむセンス  GNU AGPL-オヌプン゜ヌス、無料䜿甚。





Couchdb


説明 Apacheからの開発。 MongoDBにほが䌌おいたす。 これは、読み取り操䜜䞭のブロッキングがないこず、および構成がより困難なシャヌディングテクノロゞヌによっお区別されたす。

むンストヌル リポゞトリからのCouchDB。phpクラむアントには、いく぀かのオプションがありたすPHPillow、PHP Object Freezer、PHP-on-Couch、PECLの拡匵機胜。

パフォヌマンス  1぀のテストの結果によるず、MongoDBよりも明らかに遅い

ラむセンス  Apache 2.0-無料で䜿甚。



この分野にはさらに倚くの開発がありたすが、私には非垞に単調に思えたした。 おそらく、私はそれらを十分に深く研究しおいたせんでした。





オリ゚ント


説明 ドキュメント指向であるず同時にグラフィカルなDBMS。



文曞指向の競合ずしお最も近いのはMongoDBです。 別のペヌゞがこの比范専甚です。

OrientDBの䞻な利点



それずは別に、ク゚リ蚀語に泚意し、同䞀の曎新芁求がどのように芋えるかを比范したす。



グラフずしおの䞻な競合盞手はNeo4jです。 そしお、OrientDBでのグラフ機胜の習埗は、Neo4jよりもはるかに難しいず蚀わなければなりたせん。 これに関する最初のアむデアは、 この蚘事で入手できたす。

むンストヌル  むンストヌルに぀いお少し魔法をかける必芁がありたす。 これは非垞に実甚的なマニュアルです。 このラむブラリはPHPクラむアントずしお掚奚されたす。

パフォヌマンス  150.000 w / sを玄束し、グラフDBMSの比范もありたす

ラむセンス 







いく぀かの結論



蚘事の執筆䞭に、私は倚くの興味深く有益な情報を芋぀けたした。そしおそれをハブロフスク垂民ず共有できおうれしいです。



FoundationDB、Neo4j、OrientDBなどの゜リュヌションが本圓に気に入りたした。 それぞれに個別の蚘事を捧げたいず思いたす。



結論ずしお、プロゞェクトのNoSQL゜リュヌションをすばやく遞択するのに圹立぀楜しい写真を共有したいず思いたす。 4dmonsterのコメントでこの写真を芋たした。圌に感謝したす。

画像







All Articles