#060 明日からドヤれるNoSQL入門
2022/7/27 ·
-
かいちくんノーSQLというものを使ったことはありますかギリギリギリギリギリ使ったことがあります何使いましたちなみに4,5年前にIoT機器の計測ログをひたすらノーSQLに突っ込むみたいなラムダを作ったことがあってラムダAWSのそうですね
-
その時にちょい触れしましたちょい触れした?はいログデータ突っ込んで取り出すっていう感じですか?なるほどねちなみにノーSQLって結構最近市民権を得てきてるというかそうなんですよね割と台頭してきていつ使うかみたいな話ぽいぽい出てきてると思うんですけどマジであれ以降触ってない触ってない?そうだよねノーSQLってさ
-
使おうって思わないと選択肢に上がってこないよねそうですね無難なサービスならいつも通りSQLでいいかってなりますもんねなるねそもそもRDBが万能すぎるっていうのはあると思うんですけど今回はですねそんなノーSQLいつ使えばいいのとかそもそもノーSQLってなんなんっていう方々に向けてお
-
ざっくりこういう時にノーSQLを検討すればいいよっていうのが分かる話をしていこうかなという回でございます具体的な回良い?めっちゃ良いありがとうございます分かりました使わせてください僕にノーSQL分かりました絶対使わせます約束しますじゃあまず一つ質問なんですけどノーSQLって何でノーSQLっていう名前なんですか
-
SQL文書かないからありがとうね台本通りに喋ってくれて台本あったかな台本ないけどくだりはねありがとうねくだりを知ってるのに言ってくれてこれはですね実はNOっていう意味じゃないんですよ
-
ノーって意味じゃないですかもしそうだとしたら他のデータベース全部YES SQLになりますよYES SQLになりますよYES SQLあのSの前にYEが入ってたんだなでもそうではありません違うんですねこれはノットオンリーSQLという意味でまあ
-
SQLだけじゃねえぜっていう意味合いなんですよSQLってあれじゃないですか要はリレーショナルデータベース今よく使うMySQLとかPosgreとかその辺のデータベースリレーショナルデータベースって言うんですけど表ですね表みたいな表がいっぱいあってテーブルがいっぱいあってそれをうまく結合したりして使っていくあのタイプのやつあのタイプなんですねはい
-
それに対していやいやいやいやそいつだけじゃねえぜっていうので出てきたのがのSQLらしいですいろんなことできそうですねそれで言うとちょっと違うかもしれない違うんですねまずそのデータベースの役割についてなんですけど8割型RDBでOKですはいはいはいはい
-
ただ残りの2割はノンSQLの方が適してるよねっていうケースが実はあるんですけどRDBってすごい汎用性高くてどんなことさせても大体できるんですけどただデータ量とかがどんどん増えてきたりとかサーバースケールしなきゃってなった時にちょっと大変なんですよっていう時にピンポイントでノンSQL使うと性能上がるよとかスケールしやすいよっていうのが
-
このNoSQLのまず基本となる検討の仕方なんですねじゃあまず扱うデータ量とか負荷とかどんだけレスポンス早い方がいいかみたいなのがポイントになるってことですねなりますざっくりなります
-
で、ノーSQLと一言に言っても実はいろんな種類がございますどういうことですか?ノーSQLはあくまでジャンルで言うとプログラミング言語みたいなそれぐらいざっくりしたジャンル分けなんですよその中に実はいくつか種類があってプログラミング言語の中にもオブジェクト思考とか関数型とか手続き型とかいろんなタイプの言語があるじゃないですか
-
流派的な流派がありますよノーSQLもいろんな流派があります今特に言われているのは4つの流派を抑えておけばカバー率100%
-
多分ねそれ以外はほとんど聞いたことないなので今回はその4つをやっていきますまずは4つじゃあパッパッパッパって言っていくよ1つはキーバリュー型と呼ばれているアドレスがあります次にドキュメント思考と呼ばれているやつがありますドキュメント型かな思考ついてたかなドキュメントなんですねもう1つカラム思考というのがありますカラム思考はい
-
最後グラフ型急にビジュアリズムだいぶ雰囲気違うし意味わかんないよねっていうこの4つがよく言われるかなこれ覚えておけば大丈夫ですねこれを1個ずつ解説していきましょうということで最初はキーバリュー型のデータベースですねわかりやすそうですねキーバリューね本当にこれそのまんまでキーとバリューです
-
ディクショナリー的なディクショナリー型的なキーがあってそこにバリューを格納していくよっていうめちゃくちゃシンプルなデータベースこれどういう時に使うのっていうか何がいいのっていう話なんですけど絶対そんなのRDBの方が便利じゃないですか便利そうなんですけどこいつはシンプルがゆえにめちゃくちゃ早いっすどんぐらいそりゃもうね
-
リニアモーターカーぐらい速いんじゃないかな結構速いですねそれは結構速いな分かんないけどねちょっと具体的な数値とかは知らないですけどデータ増えても結構劣化しにくくてすごいスピードが出やすいですよと速いって言ってるのは何がなんですか読み書きですか読み書きってことですよね特に読みが速いんじゃないかなこれは書きも速そうなぜなら
-
普通RDBって書き込むときにトランザクションっていろんな人が同時に使ったときにデータの整合性ぶっ壊れないようにロックかけるじゃないですかキーバリューとか確かそういうのないんでウィルカムなんでどんどん来いやってバシバシ書いていくみたいなそういう感じなんで早いですねなのでシンプルなデータを使うときとかはこのキーバリュー使った方がパフォーマンス良くなる傾向がありますとはい
-
よく世の中で使われてるケースで一番よくあるのはセッションセッション情報って実はめっちゃシンプルなんですよ本当にキーとバリューみたいなデータなんでそのセッションの情報を格納したりとかっていうので使われてたりしますねなんかRDBとの違いの部分なんですけどRDBも
-
言ったらキーバリューじゃないですかまあまあまあわかります?わかりますよねキーが要は主キーの何かがあってバリューがその他の値みたいな感じねそうそうそうそう最大の違いはバリューが1個しかないってこと?
-
そうじゃないあとトランザクションないのがでかいんじゃないトランザクションないのとバリューが1個しかないというか枠が1個しかないっていうことですかねだからスキーマとかもわざわざ自分で設計とかしないじゃん多分あれ設計できるようにいろんなプログラムが入ってると思うんですよそういうのもないんでやっぱ究極に速さを追求してるんじゃないですかねシンプルってことですね
-
代表的な製品はよく聞くかなこれはレディスとか聞くあとAWSのダイナモDBとかがここに当たるそうですね聞く聞くよね聞くやつこれがキーバリューですシンプルなデータを突っ込むとめっちゃ早いというわけですね続いてドキュメント型でしたドキュメント型っていうのは何かっていうと
-
これも非常にシンプルな構造ではあるんですけどまず1個主キーみたいなキーがありますよと一緒ですねキーバリューとバリューのところにJSONデータが入ってますJSONとはテキストですとまずキーバリュー型のものが入っているテキストです
-
ういいいういいいまあそうですね今あのもやっとしますよその話聞いてて今JavaScript Object Notationって言われてるやつであの要はJavaScriptのオブジェクト型ってあるんですけどあれと同じデータ形式のやつですねでなんか知らんけどこれすごい軽量で使いやすいんでどの言語でも扱えますどの言語でも扱えます大事なことなんで2回言いましょうありがとうございます
-
それをそのまま突っ込むみたいな形式ちょっとね言語で説明するのめっちゃむずいんで検索してほしいかなって気持ちはあるんですけど一応言っておくと波括弧に囲まれててキーがあってコロンでクリってバリューがあるで入れ子にもできる苦しい聞いてて苦しい苦しいよねなのでそこが形見ればこれはねこれよねってなるんで見といてくださいと
-
これ何が違うんですかキーバリューとそうだねバリューにJSONを突っ込んだら同じだよねっていうことですよねはい一応仮説はあるんですけど定かではないですね仮説はあるんですけど確かめておきたい僕の仮説はJSONが入ってたらドキュメント型
-
それ以外はキーバリューJSONをよく使うから言い方変わってる的なJSONやXMLを使えるのはドキュメント型らしいですけどねちなみに僕はドキュメント型でMongoDB使ったことあるんでその時の使い心地から勘で喋っていいですかお願いします勘で勘で喋るんでここから違うよっていうデータベースに詳しい人がいたらまさかりを僕に投げてほしいんですけどドキュメント思考のデータベースは
-
そのバリューの部分のキー使って検索できると思ううーんなので多分キーバリューほどシンプルじゃないというかキーバリューよりちょっと機能豊富だけど確かに似てるっちゃ似てるかもしれないそれは確かにありそうなので結構ドキュメント型のデータベース使い時っていうのがあってECサイトの商品とかあれとかはあのー
-
結構使うんですよドキュメント型のデータベースとかを何でかっていうと商品によってさ記載したい情報って違うじゃないですか
-
例えばさタイヤだったらさ直径とか欲しいじゃないですかでもさポテトチップスに直径いらなくないですかあーいらないっていうのでカラムが結構変わるケースがあるんですよページによって商品ジャンルとかによってかRDBってそういうのがあるとカラムめちゃめちゃ増えてめっちゃ増えたけどほとんど空じゃんみたいな状況が起きちゃうのでそういう時にドキュメント型のデータベースっていうのは向いてますよねっていうのは
-
言われてますねアプリの実装にもよりますけどDBだと下手すると直径で検索ができるってことですかどういうことタイヤの直径が1mですっていうのが入ってたとしてめちゃめちゃあるタイヤのレコードから直径100って書いてる商品を
-
検索できるってこと?ドキュメントだと?できるんじゃないかなそういうフィルタリング的な使い方もしたければドキュメント型だといいよだと思うねこれを話していて一個謎残るのはダイナモDBは一応キーバリューって言われてるんですけどあいつ多分ね検索ちょっとできるんですよ
-
ダイナモDBだからっていうこともありそうですよねそれはちょっとあるかもしれないだとしたらドキュメントに入れてくれって思うんですけど確かにまあややちょっと議論の余地ありっていうことでそうですねでもなんかね検索できるカラムの個数になんか限界あった気がするダイナモははいで
-
ドキュメント型のDBだと有名なのはですねMongoDBですねこれはね世界一使われてるノーSQLと言われてますねへーレディスよりなんだそうかデータベースランキング第4位ぐらいのやばいやつですねじゃあ絶対覚えなきゃいけないですねそうですねジャンルによってカラム変わっちゃって空白いっぱいできてるよ的なデータベースは
-
こういうドキュメント文庫とかに置き換える余地あるかなっていうそういうデータベースですよとそしてねこの後がまたむずいんだこれカラム思考データベースっていうのがあってですねもう僕の中でRDBの代わりもできちゃってる気するんですけどねキーバリューとドキュメントだけでそうなんですよそんな気しますじゃないですかするする
-
カラム型はねちょっとまた使われ時が違っててこれ何かっていうと見た目はマジでRDBですそうなんですねなんですけどRDBってなんか結構行志向って言われてて行を一個のデータとして見なしてるじゃないですかそうですね横向きのねカラムはねそうじゃなくてカラム単位で見ていくんですよ変わってますねそうなので書き込みとかそういうなんかレコード追加とかは確か遅いんですけど
-
検索爆破屋なんですよカラムに対してのなるほどなのでビッグデータとかそういう系のやつを扱う時とかに例えば本当にこの行のデータ全部欲しいみたいな時にすごい効果を発揮するんでその列で検索したいっていう時に爆破屋なんでそういうビッグデータ扱う系のところでよく使われる
-
のSQLのデータベースとなってますねなるほどデータレイクいわゆるデータレイクに使われる傾向ありってことなんですねそうそうレコードってさ多分ちょっとこれが丸々そうなのか分かんないですけどデータベースRDBってさレコード数増えれば増えるほど見つけるのむずくなるじゃないですかむずくなるただ1レコードを取得する分にはさ
-
そんなに時間かかんないじゃないですかあれと同じノリで1カラム取るのにあんまり時間かかんないとかそういう認識だと思います代表的なサービスカサンドラっていうのがありますねもう知らんカサンドラは多分1回アイコン見たら忘れられないと思いますトラウマでも植え付けられるいやなんかもうね千年アイテムみたいなほう目ついてんだペガサス
-
ミレニアムアイだミレニアムアイミレニアムアイというかちょっと印象的なアイコンで目だねリアルな目なんですよ目ですねこれはどういう意味なんだろうすっごいまつげがねぱっちりしてる目なんですよ女の人かな多分これがよく名前としては聞くかなって感じですねもともとはフェイスブックが作ったやつらしいんですけど今はオープンソースだったはずカサンドラカサンドラ
-
これはちょっとこの辺から使用用途は限定的になるかもしれないデータリークとかね触んないからなそうだよねでかい規模のサービスじゃないとちょっと触んないかもしれないないですねマーケティングデータとかなんでしょうねきっとねそうそうビジネスインテリジェンスツールみたいな連動してグラフ作ったりとかねそういうのやっていくんじゃないですかねこれがカラム型のデータベースですとはい
-
ラスト1個グラフ型データベースとどういうことですかそれはこれはね本当につかみどころないと思うないよめっちゃむずい個人的にはこれどういうものかっていうとどういうものでしょうね検索が早いんですよメリットとしてねどういう検索早いかっていうとあの
-
例えばSNSってさ一人のユーザーが何百人とかと繋がってるじゃないですかそういう繋がりを表すときって実はデータベースRDBでやるとめっちゃ大変なんですよどうなるんでしょうねえ、すごいいっぱいジョインしなきゃいけないんじゃないってことかしかもデータ量も多分増えてだけど実際そんななんか
-
検索結果見たら本当にこんな結合する必要あったのってぐらい複雑なデータになっちゃうと思うんですよそういうのを簡単に検索できるのがこの
-
グラフ型のデータベースって呼ばれていてこれもビジュアル見ないと分かりづらいんですけど本当に丸と丸があって線で繋がってるみたいなビジュアルしてるんですよ点と点があってあ、そうそう、あれですね星座スタイルみたいなで、このAっていう星はBと繋がってますよCと繋がってますよっていうのを線で繋げてると
-
なのでそれぞれの関係性のつながりみたいなのを簡単に取り出せるっていうのが簡単にというか素早く取り出せるっていうのがこのグラフ型データベースですよとだから本当にSNSとかあとこれは本当かどうかわからない聞いた話なんであやふやですけど路線図とかはこれで検索すると早いらしいですね
-
道案内とかで交差点ごとにそういう点があってどことどこの経路をつなぐみたいなことを思ったときに交差点間の時間が大水気で関係付けされててはいはいはいで
-
経路みたいなのを検索するのに使ってるのかもしれないですねありうるありそうですよねありうるはまあその辺はちょっとわかんないけどわかんないけどでもなんか活用の方法ありそうな気がするねグラフ型っていうのはいわゆる表グラフとか円グラフとかじゃなくてグラフ理論のグラフですね点点点と線があるのが星座スタイルのあれですねグラフ理論俺もちょっとあんま詳しく知らないけど多分用語も同じだと思うノードとエッジって言って
-
ノードが一個一個の点ですねグラフの線が一個一個エッジとかって言われてるんですけど多分用語もその辺同じだと思いますねっていうのがグラフ型データベースですよとこいつ色違いますね全然こいつ色違うなんか今まで表表を思い浮かべてたのがこいつだけ急に点と線になりやがったんでそうだね確かに他のやつは全部表で表せるねうん
-
グラフ型DBなんかさっきちょっと代表的なサービスでNeo4Jっていうのがあるんですけどそれのなんかドキュメント見たらGUIとかもねなんかグラフになってたね本当に丸と矢印で繋がってましたねそうそうそうそう
-
取得結果グラフで表示されるんだってちょっと思いましたああ確かにそうじゃないと多分人間には分かんねえんだろうなきっとそうだよね表で出されてもねへーってなるへーってなりますよねっていうじゃああれなんですねOSQLは最初言ってた大量レコードは使うとか検索性能がいいみたいなところの特化した4
-
流派って感じなんですねなのでそれぞれ得意分野があってその得意分野においてはRDBに勝てるんですけど得意じゃない分野で無理やり使うとRDBの方が優れてるじゃんってなっちゃうんで8割型RDBでいいんですよなんですけどそういうケースがあったらこれも選択肢に入ってくるよねっていうところでそれぞれの特徴とどういう時に使うのかっていうのを知っておくとちょっとどうやれますね良い
-
ここの設計このレディス使った方がいいと思うんですけどこういったらなんかこいつ勉強してそうだなって雰囲気出るんで出ますねおすすめですねレディスだけで言うと大量レコードが入るっていうよりはシンプルだからっていう感じですねセッション管理で言うと大量レコードっていうよりはシンプルだからっていうものでそれ以外の話で言うと割とレコード数が多い時に使うといいよ
-
キーバリューそれで言うとあれかもあんまり消えちゃダメなデータを入れちゃダメだったはずセッションとかって言うと消えてもさもう一回ログインし直して作ればいいじゃんっていう感じのあんまり大事じゃないデータである必要もあった気がする取っとけいやぐらいの
-
ログとかもそっちの方がいいんじゃないかなSQLとかそんなに必要かですよね多分DBに入れたら重くなるんですよねテキストデータよりは別に検索もテキストでできると思うので溜め込む分にあるそっちのキーバリューに溜め込んでおいて増えてきたらちょっとファイルに書き出してみたいなわざわざそこまでする必要もないのかそこまでしなくてもいいと思いました
-
後でマーケティングデータとかユーザーが楽天にログインした後どういう回線を通ってどういう動線を通って何したとかそういうのを分析したいとかだったらDBに入れるんでしょうけどそうじゃないならいらないんじゃないそう考えるとあるかもね分析したいってなるなら今度はカラム型に入れたくなるのかもねそうそうそうそうそう確かにそうそうそううんうん
-
じゃないですかね確かに僕はまだ使ったことないので自分が設計したシステムでこれ使ったことないので使えるようになりたいそうねこれねドッカー触れる人はドッカー使って簡単にこれ系のサービスコンテナ作れると思うんでそこで触ってみるといいかもしれないですね触るのが一番分かりますよ結局ねそれな
-
結構衝撃だったのがさダイナモDBあるじゃないですかあれこの前使って実装したんですけどあれもコンテナ用意されててオフィシャルからだからAWSのサービスなんですけどコンテナ使って試したりとかできるっていう感じなのでそれなんかローカルで試すってことですよねそうそうそうローカルで試したやつをなんかにあげるんですか
-
アップロードしてデプロイするときは普通にDynamoDBでマイグレーションみたいなそうだねマイグレーションファイルその時Laravel使ってたんですけどマイグレーションファイルにデータベース作るコード書いてローカルで動かして本番でも試したら動いたんでやったーってAWSその辺優しいですよね優しいこれだってコンテナそのまま動かしたら
-
一応Docker内で同じようなサービス使えるじゃんって思いながらさすがにクラウドフォーメーションでデプロイはしてくれないんですかねでもしてくれそうじゃないですかうわーあるのかなわかんないですけどあるかもありそうですよねだったらもうかっこいいですよね最高に確かにねそこまでやったらローカルで開発しているララベルのアプリすらデプロイできますから多分確かにクラウドフォーメーションですごいそれできたらもうちょっと
-
DevOpsとして活躍できますねできるまず第一歩でNoSQLについてすごく勉強になりましたNoSQL結構僕ふわっと認識してたのでこれなんか四流派あるとかなんならグラフ型DBとかも初めて見たわグラフ型ねこれマジでいつ使うんだろうとは思いながら説明してたよ言うて言うてそうでも使うんでしょうねSNSとかねSNS作る会社って多分そもそもレアじゃんレアね
-
レアだね強いところが強すぎてさ新規参入しようって気持ちにならないよねうん
-
レコメンドとかも使うって言いますけどこの商品に近い商品を出すって言うんですかあーはいはいそうかこいつコップ見とるわって言って他の人はこれも見とるでっていうレコメンドを出す時に使うって書いてたりしましたけどおーなるほどねそれ果たしてグラフ型DBでやるのかAIでやるのかって思うんで僕は確かにこれもちょっとAIの方が先に出てきちゃうなそれ系は
-
AIは精度を上げるの大変だから平方TVも使うのかもしれないですけど別の選択肢あるならねって思っちゃうんでなるほどね勉強になりましたでもというわけでありがとうございます今はまだ使ってないよでもノンSQL知りたかったっていう人のための回でした今日はありがとうございます順編に届くといいですねこれを元に
-
いざ自分がなんか設計するってなった時に選択肢に上がるといいなと思ってるんで絶対思い出すこれはこんな聞いたから思い出してくれありがとうございますはい今回は以上でございますそれでは皆さんレコードをいっぱい扱うシステム作れるようになりましょうですねー絞り出してるはいではまた次回バイバイイマジンプラグラマーではメールを募集していますトークテーマ悩み要望などなど何でも募集中です
-
宛先はそれではまた次回
#060 明日からドヤれるNoSQL入門