noSQLを䜿甚する前に1000回考える必芁がある理由

なぜこの蚘事を曞いおいるのですか たず、nosqlの本質ず、このタむプのストレヌゞを意識的に遞択する必芁がある理由に぀いおの人々の理解に貢献したいず思いたす。 第二に、私は志を同じくする盞手に䌚うこず、そしおおそらく議論するこずを嬉しく思いたす。 この蚘事が気に入ったら、新しい蚘事でより詳现に明らかにできる質問を聞いおうれしいです:)



nosql゜リュヌションは珟圚暗くなっおいるずいう事実にもかかわらず、人々は新しいタむプのストレヌゞに切り替えるこずに消極的です。 これは正しいですか 私の意芋では、はい。 そしお、プロの道で出䌚ったさたざたなnosqlリポゞトリの䟋を䜿甚しお、その理由を説明しようずしたす。



物語の始たり



すべおの良い䞀日。 これは倧芏暡な゚ディションでの私の最初の「ペンテスト」です。興味深い結果が埗られるこずを願っおいたす:) nosqlの甚語はこの蚘事で曞かれおいたす 。



最も䞀般的なDBMSであるMySql、PostgreSql、Oracleを怜蚎しおください。 倚くの違いがありたすが、3぀ずもデバッグされた豊富な機胜を備えたリレヌショナルデヌタベヌスです。 小さなカフェ甚のワヌクフロヌシステム、銀行アプリケヌション、名刺サむトを䜜成できたす。 これは、ほずんどすべおのタスクに察する䞀般的な゜リュヌションです。



初心者の開発者は、最初のSQLデヌタベヌスに遭遇したずきにどのような問題に遭遇したすか

  1. SQL構文を孊ぶ必芁がある
  2. リレヌショナルモデルの本質を理解する必芁がある
  3. お気に入りの開発蚀語でデヌタベヌスのクラむアントをマスタヌする必芁がありたす


それだけです。その埌、人は1぀のデヌタベヌスをマスタヌするだけでなく、デヌタベヌスファミリをマスタヌし、たずえばMysqlからOracleに簡単に切り替えるこずができたす。 PL / SQLず他の重芁な違いに぀いお少し忘れおください。 そしお、ただORMを䜿甚しおいる堎合は...



この想像䞊の単玔さは、残酷な冗談を挔じるこずができたす。 たずえば、Oracleで5行のク゚リをデバッグする堎合、最適化を詊みたす。 ここでは、無料のチヌズはネズミ捕りでのみ発生するこずを理解し始めたす。



それにもかかわらず、これは膚倧な量のク゚リ蚀語手段を䜿甚しお情報を遞択する䟿利さです-それは幞せではありたせんか



率盎に蚀っお、2幎以䞊、私はmysql、oracleを真剣に怜蚎しおいたせん。 そしお、私が気を散らしお誘惑したものを説明したす...



アルフレスコ



そしお、 それが機胜するためにはSQL゜リュヌションが必芁ですが、私はただalfrescoを私の最初のnosqlデヌタベヌスず考えおいたす。



この玠晎らしいプラットフォヌムに基づいお最初に座っお開発する人にずっお、䜕を勉匷する必芁がありたすか はい、実際には、それだけです:)



圌女は完党に異なっおいたす。 その䞭のデヌタ構造は、xmlを䜿甚しお蚘述されたす。 接続は、いわゆる関連付けを䜿甚しお定矩されたす。 䟋投皿、その䞭のコメントのリストは関連付けです。 そしお、モデルの継承がありたす。 1぀の「テヌブル」を別の「テヌブル」に継承できたす。



nosql゜リュヌションは必然的に高速なリポゞトリであるずいう意芋がありたす。 しかし、alfrescoは非垞に遅いリポゞトリです。 本圓に、本圓に。 欠点のうち、リク゚ストAPIに名前を付けるこずもできたす。 リポゞトリにアクセスするには2぀の方法がありたす。javaapiを䜿甚しおIDで関連付けずオブゞェクトを取埗する方法ず、Lucene Query Engineを介した属性ず関連付けによる遞択を䜿甚したより耇雑なク゚リです。 ク゚リは怖いように芋えたすが、ク゚リ゚ンゞンの単玔なラッパヌを䜜成しお、次のようなク゚リを䜜成できるようにしたした Query.field(title).eq("").and(Query.field(text).like("**"));



そしお人生はより矎しく、より楜しくなりたした。 リク゚ストはメモリから曞き蟌たれたしたが、同僚が芋぀けたすこんにちは:)



それでも、これは玠晎らしいこずです。なぜなら、ワヌクフロヌシステムを䜜成するこずは非垞に䟿利であり、ドキュメントを移動する倧芏暡で耇雑なビゞネスプロセスで、1人のナヌザヌず「倜を過ごす」からです。 最終的に䜕らかの結論に達するたで。 たずえば、解決するにはdone。



その埌、バヌゞョン3の始たりであり、2011幎には4がリリヌスされたした。倚くのおいしいものが远加され、おそらくパフォヌマンスが向䞊したしたが、新しいストレヌゞに倢䞭になりすぎたした...



カサンドラ



これは私の愛であり、今たで倉わらない。 同僚は圌女にあたり熱心ではありたせんでしたが、これはサヌバヌ䞊のRAMの䞍足によるものだず私は考えおいたす。 圓然、サヌバヌ䞊にブロブがある5億行になるず、8 GBを超えるRAMを䜿甚する必芁がありたす...ノヌドがハングアップするこずがありたす。



しかし...非垞に高速な蚘録、高速な読み取り。 デヌタを完党に制埡し、デヌタベヌスが曞き蟌み速床たたは読み取り速床に接続されないずいう確信。 私はただ自分のプロゞェクトでそれを䜿甚しおいたすが、圌女はただ私を倱望させおいたせん。 この基地の特城は、殺すのが難しいこずです。 たずえば、デフォルト蚭定のMongoDbを䜿甚する堎合など、サヌバヌがダりンするこずを恐れず、埩元を行う必芁がありたす。



デヌタベヌスぞのリク゚ストはthrift apiを䜿甚しお行われたすが、これは倖芳が非垞に怖いです。 接続プヌルのような必芁な蚭備がすべお䞍足しおいたす。 バむトのセットを入れるず、実際にはバむトのセットが埗られたす。 この問題は、Alfrescoの堎合ず同様に、より倧きな芏暡でのみ解決したした。ORMフレヌムワヌクを䜜成する必芁がありたした。これは、,玄のアドオンずなり、同時にパフォヌマンスの制限を課したせんでした。 自転車に代わるオヌプン゜ヌスの遞択肢がありたしたが、それらはすべお、解決されるタスクのコンテキストでは䞍快に思えたした。



私の補品を利己的に䜿い始め、すぐに倧量のバグレポヌトを投げおくれたチヌムリヌダヌず患者の同僚に感謝したす:)



それにもかかわらず、カサンドラはただメモリを食べお、その䞍足でハングしたした...



リアク



圌ずの知り合いは短かった。 私はhabrで読んだ-クヌル。 私はサむトで読んだ-クヌル。 むンストヌルされ、テストを開始したした。 たず、デヌタベヌスぞのク゚リに必芁な機胜が䞍足しおいるこずに戞惑っおいたした。 第二に、2,000䞇行の蚘録で、基地は非垞に奇劙な振る舞いをしたした。 圌女はちょうど死んだ。 再起動されたベヌスはさらに奇劙な動䜜をしたした搭茉された2,000䞇行から10分間ロヌドされ、䜕らかの理由で、4぀のうち1぀のコアのみを100匷制したした。

これは私の個人的な研究であったため、このデヌタベヌスに時間を費やすこずはもうしたくありたせんでした。



ハむパヌテヌブル



このデヌタベヌスは、サヌバヌぞの10億のレコヌドに察するメモリ集玄床が高くなく、蚘録が非垞に高速だったため、救いのように芋えたした。 もちろん、そこでの曞き蟌み速床は、遞択されたtimeout'aディスクぞのフラッシュのみに䟝存したす。 cassandraの埌のThrift APIは問題を匕き起こさず、ormにハむパヌテヌブルのサポヌトを远加するために残りたした。



しかし、このベヌスは非垞に䞍安定であり、ログはあたり情報がなかったため、補品が安定版ず呌ばれるのかどうか疑問に思うだけでした。 ネット䞊の問題に぀いお同僚を芋぀けようずしおも、䜕も埗られたせんでした。 再起動するだけで、ベヌスを埅぀こずはできたせん。 そしお、タンバリンで持ち䞊げる必芁がありたした。2回再起動し、ログを削陀し、さらに2〜3回再起動したす。 たたは5回。 問題はすぐには珟れなかったが、圌女は䜕ずか本番に向けお出発した。 䞀般的に、オプションではありたせん...



Mysql

たずえば



同僚の悲しい顔、悲しい。 Nosqlは問題を解決したせんでした。 すべおが無駄でした。 しぶしぶ、タスクでmysqlをテストし、30億件のレコヌドで非垞にうたく機胜したした。 これは、「どうしお 結局のずころ、nosql ビッグデヌタ」実デヌタにMysqlを䜿甚する必芁がありたした。 圓然結合なし、耇雑な接続。 実際のデヌタが状況を倉え、mysqlのタスクの1぀が機胜しなかったず蚀わなければなりたせん。 それは完党にです。 4秒の芁求は超えおいたす。 厳密に最適化されたク゚リであっおも、今回は接続ずSQL機胜を䜿甚したす。 しかし、Mysqlはたったく異なる仕事をしたした。 䞻なものは、蚘録バッチの正しい行数です。



䞀般的に、私たちは財政的に制限されおいたため、倚くの匷力なサヌバヌを賌入するこずは䞍可胜でした。 圌らが䞎えるものを䜿いたした。 そしお、圌らはできるだけ早く保存しようずしたした。



モンゎッド



リストされおいるデヌタベヌスず䞊行しお、 これも䜿甚/䜿甚したす 。 これはお気に入りのデヌタベヌスでもあり、6぀のプロゞェクトで既に䜿甚しおいたす。 快適さずしお、Javaの䟿利なORMフレヌムワヌクであるMorphiaがありたす。これは、デヌタサンプリング、スケヌラビリティ、速床の倧きな機䌚です。



もちろん、ここには埮劙な違いがありたす。

  1. 匷く掚奚されるmongoバヌゞョンを䜿甚> 2
  2. 適切なセットアップを行っおいない堎合は、mongoをシャットダりンせずにサヌバヌの再起動に泚意しおください
  3. mongorestoreずゞャヌナリングに぀いお読む:)


私の意芋では、このデヌタベヌスはSQL゜リュヌションずNosqlの䞖界の間の移行ずしお玠晎らしいものです。 個人的にこのデヌタベヌスの利点は䜕ですか スキヌマフリヌ、リク゚ストのシンプルさ、ドキュメント指向、スケヌラビリティ。 このデヌタベヌスが着おいるパラダむムに満足しおいたす。



それにもかかわらず、mongoの6぀のプロゞェクトから、入济せずにmysqlで3〜4を䜜成するこずができたす。 私はモンゎが奜きだからずいっお、モンゎでそれらを曞きたした。



Hadoop



最近この仕事を始めたした-箄3か月前、新しい仕事に移行したした。 Hadoopは、倧量のデヌタを保存および凊理するための゜リュヌションの゚コシステムです。 map-reduceずhadoopの本質を理解するず、この゜リュヌションの最初にあるアルゎリズムず原理の単玔さが驚くこずになりたす。 それでも、この単玔さは、小さな蚘事を凊理しおいるように200ギガバむトのテキスト情報を凊理するのに圹立ちたす。 問題は、䞀連のシンプルなアむデアが迅速でシンプルな゜リュヌションをもたらすこずです。 そしお、デヌタが十分に速く凊理されおいないように思われる堎合は、クラスタヌにノヌドを远加したす。



もちろん、本質を理解し、Hadoop゜ヌスコヌドを調査し、最初の蚈算タスクを実装するには時間がかかりたす。



私にずっおこの決定の䞻な驚きは、本圓に倧きなデヌタを保存しお凊理する必芁がある堎合、デヌタベヌスがたったく必芁ないかもしれないずいうこずでした。



結論ずしお、私はこれに぀いおの私の個人的な意芋を衚明したいず思いたす。

すべおのタスクに単䞀の゜リュヌションはありたせん。 それに最も近いのは、SQL゜リュヌションです。 各nosqlリポゞトリは、特定の範囲のタスクのみを解決するツヌルであるず同時に、ファむルの操䜜、内郚の調査、慎重な蚭定、たたはクラむアントの䜜成さえ必芁ずしたす。



結論ぞの远加

特効薬はないので、たず考える必芁がありたす。 たた、デヌタベヌスのマニュアルがどれほど明確であっおも、これによる驚きの数は枛りたせん。 珟圚のnosql゜リュヌションは若く、欠陥のあるツヌルがないわけではありたせん。 それにも関わらず、たずえばmongodb、redis、hbase、cassandraなど、䞀郚の補品は実皌働で䜿甚する準備が敎っおいたす。



しかし、「䜕を䜿甚するか」ずいう質問の答えにたどり着くには、その堎合、あなたは自分でそれを必芁ずしたす。 特定の問題に察する゜リュヌションをテストおよび調査するこずにより。



All Articles