1. London Tech Talk
  2. DDIA Ch1&2
2023-08-26 47:06

DDIA Ch1&2

spotify apple_podcasts
00:13
スピーカー 2
よろしくお願いします。
スピーカー 1
はい、アサヒさん、よろしくお願いします。
スピーカー 2
今日はですね、前回お話ししたDDIA本の、実際に読んでみた回をやります。
スピーカー 1
なんと、自分もですね、本を早速買わせていただきまして、今回第1章、第2章を読んでみて、その内容について議論していくという感じですね。
僕が布教して買わさせた感じですよね。
スピーカー 2
確かに、宗教勧誘に、もしかしたらはめられているのかもしれないですけど。
結構、こういう風に本を読んで、実際に議論するっていうのは、大学生のゼミぶりなんで、すごい懐かしい気持ちになって、ちょっと緊張しますね。
スピーカー 1
公開読書会みたいな。
スピーカー 2
そうですね、公開読書会。ちなみに、臨読会は、けっこう、ケンさん、やられていましたか?
スピーカー 1
やってました、やってました。すごいやってました。
技術本だけじゃない。
いいけど、あ、学生の頃は技術本じゃないの、けっこう。なんか、朝みんなで集まって、あの、庭でやったりとか。
まあ、学生時代だけじゃなくて、社会人になってからも、技術本を同僚と読んだりとかしましたね。
その、前、前言ったかは分かんないけど、このD.D.I.A.本を教えてもらったのも、クックパッドの時に、他の人が開いてた臨読会の案内があって。
スピーカー 2
あ、言ってました、言ってました。はい。
スピーカー 1
そうそうそう、それで出会ったっていう感じですね。
スピーカー 2
なるほど。
いやー、いいですよね。やっぱそういう、今ちょっと実際に、僕初めてやるんですけど、やっぱり、ただ読むだけなのと、このアウトプットをするぞって思ってるのは、全然やっぱ違うなって、当たり前なんですけど。
意見を言うにも、やっぱり、自分の、なんか他に参照して、その証拠とかがないと、意見も言えないので、まあ、他のものをちょっと見てみたりみたいなのをする方が、すごいいいなっていうのは思いましたね。はい。
スピーカー 1
いやー、そうですよね。
はい。
僕も本が好きだからこそ、臨読会しなきゃいけないなと思ってて、やっぱり、本ばっか読んでると頭でっかちになってしまうんですよね。なんか自分が本で仕入れた知識が、なんか良さそうみたいな感じになっちゃうんだけど、なんか全然そんなことなくて、ちゃんとこう、クリティカルシンキングを保ってとか、他の人のね、意見を入れないと、まあ、本を読んで分かってきになっちゃうから。だから結構こういうの、いいなと思ってやってますね。
スピーカー 2
いやー、本当に、いい機会をありがとうございます。
スピーカー 1
じゃあ、公開、読書会やってきます。
スピーカー 2
はい。
読書会、早速やっていきましょうか。
スピーカー 1
うん。
スピーカー 2
はい。
で、じゃあ、そうですね。まずは、今回は第1章と、第2章ということで、第1章が、Reliable, Scalable, and Maintainable Applicationsっていうタイトルでして、一般的にデータベースを運用とかするときに、注意しなきゃいけないところ、運用とか設計ですね、3つの主な項目、Reliable、Reliability、Scalability、Maintainability、この3つについて、
03:09
スピーカー 2
まあ、語られているという、まあ、項目になります。
で、2つ目も一応紹介しておくと、2つ目は、Data Models and Queer Languagesってことで、まあ、データ、実際にどのデータモデルがあるか、まあ、SQLとか、あとは、Document Database、Graph Database、この3つがまあ、主に語られているんですけれども、まあ、その違いであるとか、どういうときにこれを使えばいいか、みたいな、えー、ところが、えー、主に述べられていますね。
はい。
スピーカー 1
そうですね。だから、まあ、第1章は本当にイントロって感じで、データベースを選択するとき、技術選定するときには、まあ、信頼性とスケール性と保守性を考えましょうね、みたいなところが軽く触れられているっていう感じですよね。
スピーカー 2
はい。軽くですね。で、まあ、第2章は結構具体例があるので、この2つを一緒に取り上げていくのが結構いいかなという感じがしました。
スピーカー 1
はい。
スピーカー 2
はい。
じゃあ、そうですね。
まず、データベースですけれども、まあ、データベースを、そうですね、この設計とかした経験って、けんさんはありますか?これを選ぼうとか、このデータベース使おうみたいな。
スピーカー 1
よく知ってましたね。
ああ、はい。
クックパッドのときは広告のサブシステムみたいなのを作ることが多かったので、僕が入ったときには、その偉大な先人が作った広告配信システムのコアはあったんですけど、
スピーカー 2
はい。
スピーカー 1
まあ、例えばそのサブシステムとして、ちょっとしたこう、まあ、ログシステム作ってみようとか、リアルタイムシステムを作ろうみたいなときに、まあ、ゼロから設計することもあったし、まあ、もともと動いてた、そのシステムのパフォーマンスのボトルネックを突破するために、データベースを、まあ、変えてみようかみたいな話のときに、まあ、議論したりだとか、ここで結構鍛えられたっていうのは1つありますね。
スピーカー 2
ああ、いいですね。楽しそう。
スピーカー 1
うん。すごい楽しかった。
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
スピーカー 2
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
スピーカー 1
はい。
スピーカー 2
はい。
スピーカー 1
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
スピーカー 1
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
はい。
スピーカー 2
はい。
スピーカー 1
はい。
はい。
はい。
はい。
スピーカー 1
はい。
スピーカー 2
はい。
スピーカー 1
はい。
はい。
スピーカー 1
そうだね。
で、その後グラフデータベースの会社にも入ってるから。
はい。
うん。
スピーカー 2
確かに。
幅広い。
スピーカー 1
で、なんかその本でも触れられてましたけども、この要件にあったデータベースは、どの要件にもデータベースは存在しないみたいな話はあったと思ってて、それぞれの要件に合わせたデータベースを実際に選んでいくみたいな必要があるということですよね。
06:09
スピーカー 1
そうなんですよね。
スピーカー 2
やっぱり、なんかこれだみたいなやつはやっぱりないんですかね、計算的にも。
スピーカー 1
うん。
なんかこう、一つのデータベースだけを覚えれば、
すべてのシステムを作れたっていう時代はもうそんな時代ではない気がしていて。
スピーカー 2
はい。
スピーカー 1
多分その、まあ多分一番歴史が長いのがRDBMSじゃないですかね。
で、まあデファクトとしてはMySQLとかPosgreとかがあって、で、そのこのRDBMSでの正規化の、なんだろうね、ベストプラクティスとかもそうだし、クエリ言語としてもSQLってかなりいい意味で枯れてるじゃないですか。
SQL。
スピーカー 2
そうですね、はい。
スピーカー 1
っていうことなんで、それで大体。
システムは作れてきたけど、まあでも、なんだろう、こう、サービスがどんどん複雑になりにつれて、RDBMSだけでは突破できないパフォーマンスのボトルネックとか、
あとはこう、複雑なジョインではこう、数秒結果がかかるので、まあ、そもそもMySQLでは対応できないみたいな要件が出てきて、
そこで、ね、ノンシークエル、ドキュメント型が出てきたりとか、
スピーカー 2
はい。
スピーカー 1
アパチカフカみたいなストリームが出てきたりとか、まあグラフデータベースが。
出てきたりとかっていうことになったんで、本当に、なんだろ、いろんな武器を覚えて、使ってくっていう感じだと思います。
まあ、特にクラウドが来てからだよね、マネージドサービスで簡単にデータベース使えるようになったじゃないですか。
昔ってこう、例えばMySQLを動かすのにも、そのオペレーションの知識も必要だった。
自分たちでVMにこう、クラスター組んで、で、そこのツールも作りながら、オープンソースに貢献しながらみたいな感じだったけど、まあ今はボタンポチポチすればね、Amazonとかね、GCPとかでね、ポッて作れちゃうから。
ほぼオペレーションのコストがいらないので、より、なんか、レゴブロックというか、ピタゴラスイッチみたいな感じで、データパイプランを作りやすくなってきた、まあいい時代といえばいい時代なのかなとは思いますかね。
スピーカー 2
確かに。昔であれば、まあDBAっていう専門の方がいて、いないとデータベースの構築ができなかったっていうところで、まあクラウドがあるからこそ、よりこういうSREとか、まあアプリケーションエンジニアもデータベースの設計により関わっていけるみたいなところはあるのかもしれませんね。
スピーカー 1
うん、そうですよね。
スピーカー 2
はい。なんかその実際にじゃあ、チャプター1では、スケーラビリティ、リライアビリティ、メンテナビリティっていう3つの項目ありましたけれども、なんかその実際にじゃあ設計をする際に、どう選定していくかみたいなところで、一番重要なところというか、これは絶対に外せないみたいな部分って研鑽的にはあったりしますか。
スピーカー 1
あー、いい質問ですね。
そうですね。なんかこう、いろいろ設計してきて、まずすごい思ってるのは、リライアビリティとスケーラビリティって頑張りすぎなくていいかなと思ってます。
09:08
スピーカー 2
はい。
スピーカー 1
システムに求められる要件ってあるじゃないですか。
例えば、このカード決済システムを作るルールだったら、リライアビリティはこれぐらいにして、でもスケーラビリティこれぐらいでみたいなときに、
それ、
そこで、
そこの最低ラインさえ超えてれば、必要以上に頑張らなくていいかなと思ってるんですよね。
例えば、そのリライアビリティとか一つとっても、エラーレートをじゃあ、3-9で担保するのか、99.9%でやるのか、それとも99.8%で担保するのか、全然こう、難しさが違ってくるんですよね。
スピーカー 2
はい。
スピーカー 1
なので、なんかこう、
例えば、要件的にじゃあ99.9%でいいよって言うんだったら、まあそこさえ、
担保すればよくて、本当に一番重要なのは、まあここの3つであえて述べるなら、メンテナビリティじゃないかなと個人的に思ってます。
っていうのも、やっぱりこう、重要なのは、後から変更できること、まあ後からそのデータベースを撤退できること、まあマイグレーション、他のデータベースに切り替えられることなので、
ロックインされしすぎてしまったりすれば、まあリライアビリティとかスケーラビリティって後から頑張ればどうにかできるけど、
メンテナビリティが壊れてしまうと、まあ、
壊れちゃうと、例えば移行するのにも、その周辺のね、ツールを移行したり実装したりするのにすごい時間かかってしまって、
本来であれば半年で終わるプロジェクトも3年になりましたみたいな感じになってしまうから、
割とメンテナビリティは重要視した方がいいかなというのが個人的な意見ですかね。
スピーカー 2
確かに一番その後から変えづらいというか、このメンテナビリティができてないと、
まあとりあえずメンテナビリティ自体が変更するしやすさとかが含まれているので、
あとあと大変なリライアンスみたいなところはありそうですね。
ちゃんとできてないと。
スピーカー 1
そうかな。
スピーカー 2
はい。
実際にじゃあこの中身というかメンテナビリティって具体的にどういうものなのかみたいなのを見ていきますと、
一つがその運用性ですかね、オペラビリティというか、
えーと、まあいかに簡単に運用できるかというと、
パイプラインとかを実際に構築して、自動化、構成の自動化をするとかそういったところになりますかね。
あとはまあ単純さであるかどうか、単純さで、えっとこれはまあなるべく複雑にしないようにする。
なるべくシンプルにしていくことが重要っていうので、その中でシンプルにしていくためにはまあ抽象化をしっかりしていくことが大事だよみたいな話もありました。
はい。
スピーカー 1
シンプルな設計ってめちゃくちゃ難しいですよね。
スピーカー 2
いやーそうですね、本当に難しいと思いますね。
12:02
スピーカー 2
あと抽象化をするっていうところもどう抽象化していくかっていう、なんか抽象化するキーの選び方みたいなのも難しいと思うんで。
スピーカー 1
データベースにどこまで任せてアプリケーションレイヤーの席もどこまで落とせるかみたいなのが一つ。
スピーカー 2
はい。
スピーカー 1
アプリケーションレイヤーをシンプルにできる判断だよね。
スピーカー 2
はい。
スピーカー 1
だから割と最近のデータベース側の発展って高機能になってきて、まあどれも似たような感じになってきて。
スピーカー 2
うん。
スピーカー 1
で、なんか最低限求められるリライアビリティとかスケーラビリティでは、まあどこのデータベースも水平にもちろんスケールできるし、垂直にスケールさせるときもダウンタイムなるべく少ないようなツールとかも開発されてるのは、まあ合格ラインというか最低ラインで。
スピーカー 2
うん。
スピーカー 1
その上で、例えばこうユーザーエクスペリエンスというか、まあデベロッパーエクスペリエンス、例えばなんだろうね、メトリックスがすごい簡単に取れて、しかも簡単にパフォーマンスチューニングできますとか、なんかより高機能なものが作っていかないと差別化できないっていう感じなのかなっていうのは、割とデータベース作る会社の中に入って思ってたことかな。
スピーカー 2
ああ、確かにそのデータベースの状態とかは簡単に知れたら嬉しい。
嬉しいですし、まあなんか異常が大きい、典型的な異常とかは、まあ簡単に検知できたら嬉しいなっていうのは確かにありますね、そういうのが。
うん。
スピーカー 1
プロがいるとは限らないし、そこを採用するのってすごい時間もコストもかかるので、なるべくこう、なんだろう、モンゴDBならではの知識が事業を回すのに必要にならない状態にしたいと。
そうすると、例えばモンゴDBとかデータベースをクラウドとかSaaSで提供する側としては、本当にそのオペレーションのところと、
あとはその、それを使うという意味ですが、いかにシンプルにできるかという意味で、どんどんどんどんこのデベロッパーエクスペリエンスのところを高めていかざるを得ない。
まあそうしないとお客が取れない。
はい。
って言って、Neo4jとかもグラフデータベースを作ってて、まあぶっちゃけグラフデータベース単体インスタンスのパフォーマンスっていう意味で言うとどこも一緒なんですよね。
スピーカー 2
うん。
スピーカー 1
なんか、まあ、なんだろう、そこら辺の業界って、業界というか技術とかって、まあ研究、リサーチされ続けてるものでは、
あるものの、だいたい実装の難易度とか考えたときのベストプラクティスってどこも一緒なんですよ。
だからまあそれを、まあ僕らはNeo4jはJavaで実装して、他の競合はC++で、まあ実装してみたいな。
15:05
スピーカー 1
まあでも、アルゴリズムとしては一緒で、みたいな感じで、単体インスタンスとしてスケールできるところはだいたい一緒。
じゃあどこで差別化するかっていうと、例えばNeo4jの場合はアナリティクスとかグラフを操作できるような、
まあ、
かなりリッチなWebUIとか、MacのOSアプリケーションとか、まあツールを使ってたりとかして、
まあそこの周辺で競合と差別化していくっていう戦略を取っていたので。
スピーカー 2
いやー、じゃあそれこそスタートアップとか、まあ初めてグラフデータベースを使う企業でも、
結構簡単にセットアップしやすいような、なんか整ってるって感じですかね、UIとかもあって。
スピーカー 1
すごいシンプルに使えた。
なんかそのドラッグ&ドロップで、
まあ、ゴリゴリなんだろうね、まあグラフデータベースっていうのは、こう、
あの、えっと、エッジとノードっていう、まあエッジっていうのがまあ、ノードという点と点をつなぐ線ですね。
を、で、表現できる、まあグラフとして表現できるデータを保存するためのデータベースですけど、
まあそれをこういう、ユーザーインターフェースでゴリゴリこう、ドラッグ&ドロップで、なんだろうね、付け加えたりとか、新しいノード入れたりとかできちゃうから。
あの、初期のそのプロットフォーム、
プロットタイピングとかにも、もってこいのツールでしたし、
まあかといって、その、まあグラフに適したデータモデルであれば、かなり垂直に、あの、スケールするっていうのも分かってるので。
うん。
スピーカー 2
いやー、そこ使ってみたいですね、そう、あと。
スピーカー 1
そう。だから、かなりフロントエンジニアとか、プロダクト作るっていう人たちを、まあ積極的に採用してたね、僕がいた頃は。
スピーカー 2
ああ、そうなんですね、なるほど。
あの、
ちょっと脱線すると、なんか、
あの、Neo4jのこともちょっと書いてあって、この本に、第2章で、グラフデータベースの話ですね。
で、その中で、えっと、Cypherっていうクエリとかを使ってやるんですよね。
それが、結構思ったよりシンプルで、グラフデータベース、僕、触ったことなかったんで、あの、結構難解なのかなと思ったんですけども、クエリ自体は、そんなに厄介じゃないのかなっていう感じがして、使ってみたいなと思いました。
スピーカー 1
うん。
そうですね。
スピーカー 2
あと、この、Cypherとか、Neo4jっていうのが、マトリックスから来てるっていうのが本に書いてあって、ちょっと、そう、知らなかった。
スピーカー 1
そう、あの、マトリックスのね、Neo、なんかこう、作った創業者は結構、そういうの好きなんですよ、サイファイとかさ。
スピーカー 2
面白いですね。
スピーカー 1
うん。
新しい社内のプロジェクトとかも、あの、なんだっけ、その、映画から来てるとかね。
スピーカー 2
はい。
スピーカー 1
ちょうど僕がいたときに、マトリックスなんだっけ、レボリューション4、なんか新しいのが出たんですよね。
はい。
スピーカー 2
はいはい。
スピーカー 1
出てましたね、最近。
うん。
そう。
会社のエクスペンスで見に行くみたいなイベントとかも発生して。
スピーカー 2
えー、そうなんですか。
そう。
スピーカー 1
会社のカルチャー作ってるから大事だよ。
18:00
スピーカー 2
確かに。
そのまま名前ついても、そう、結構珍しいですよね。
面白い。
そうそうそう。
スピーカー 1
ね。
逆に言うと、マトリックスの映画も続編どんどん頑張ってもらわないと、なんか、ジンクスっぽいですよね。
確かに。
スピーカー 2
Neo4jも。
うん。
そうですね。
新しいサービスの名がなくなっちゃう。
そう。
ですね。
スピーカー 1
えー。
で、Cypherの話が出たので、このDDIA本のチャプター1をちょっと逆に批判的に読んでみると、メンテナビリティとリライアビリティとスケーラビリティと3つ挙げてたけど、じゃあ他にトピック、他の項目もないのかなってちょっと考えてみたときに、他に大事なのって、やっぱりそのデータベースを使うアプリケーションディベロッパーがデータモデルをどう使えるか、で、どうデータベースとやり取りをするかっていうところで、
まあ、これはチャプター1の話が出たので、
チャプター2に出てくるところなんだけど、まあ、クエリ言語ってめちゃくちゃ大事だと思うんですよね。
なんかこう、かなりこう、ローレベルでデータベースとやり取りしなきゃいけないってなったら、クライアントの実装も大変だし、そこを、なんだろうね、インピーダンスミスマッチって話も出てきた、キーワードもチャプター2出てきたと思うんですけど、
例えば、アプリケーションデベロッパーが達成したい、なんかシステムの要件があると。
それを、
データベースのAPI、データモデル、まあ、SQLとか、正規化とかなんでもいいですけど、データベースで表現するときに、そこでこう、抽象化させなきゃいけないじゃないですか。
スピーカー 2
はい。
スピーカー 1
そこでかなりこう、なんだろうね、現場のこう、メンタルモデルとデータベースで表現しなきゃいけないものが全く違っていると、かなりこう、実装も大変だし、ソフトウェアバグも発生しやすいので、
なるべくこう、メンタルモデル、
のまま表現できると嬉しいんですよね。
例えば、そのNeo4jのCypherが、まあ、グラフデータベースが、そこを売りにしてたのは、
例えば、その、エンジニアが設計するとき、まず何するかっていうと、
だいたいホワイトボードの前に集まって、
なんかホワイトボードの上で、こう、なので、ここにこう、じゃあユーザーデータが、モデルがあって、
まあ、ユーザーが、じゃあ、はずめにいて、なんかこれ持っていて、みたいな、
こう、ホワイトボードを、
こう、コーディングというか、ホワイトボードでモデリングすると思うんですけど、
グラフってのは、そのまま、ホワイトボードで書いたデータモデルを、そのままNeo4jのCypherを使って、
まあ、スキーマ定義できるよっていうところで、
なんだ、なんて言い方してたかな、
まあ、インピーダンス密マッチがなかなかないですよっていうのが一つ、
グラフデータベースというか、Neo4jの売りでもありましたね。
正規化しなきゃいけないじゃないですか。
あの、RDBMSの場合。
スピーカー 2
はい。
スピーカー 1
で、テーブルに、と、あとその、関連性に、こう、一回、考え方を、マインドセット、というか、メンタルモデルを変えなきゃいけない。
21:02
スピーカー 1
だけど、まあ、それが、Neo4jの場合はないよ、みたいな話はしてたね。
まあ、それも、
スピーカー 2
その、アプリケーションの、なんですかね、オブジェクトのまま表現できる、みたいなところがあるってことですかね。
スピーカー 1
そうそうそうそうそう。
Neo4jの、内部構造としては、もちろん、
その、ディスクに保存するときに、まあ、特定の、なんだろうね、バイナリーのエンコーディングの隙間があって、みたいな感じなんだけど、
使う、データベースを、インサートするっていうところまで、アプリケーションデベロッパーの観点で言うと、
正規化のこととか考えなくていいんで、
うん。
開発速度上がるよね、っていう。
なるほど。
スピーカー 2
じゃあ、その、DB、データベースの型設計みたいな、
うん。
とか、テーブル設計みたいなところに、あんまり時間を、使わずとも、開発を進められる、みたいな、
スピーカー 1
そう、そう。
スピーカー 2
ことがあるんですかね。
そう。
ですね。
スピーカー 1
うん。
まあ、それも、逆に批判的に言うなら、まあ、とはいえ、やっぱり、システムが、
育っていくと、やっぱり、ちゃんと、隙間設計しといた方が、将来の変更、
可能性に対して、こう、レジリエントだよね、みたいな話も、もちろんあるし、
はい。
あとは、言うて、RDBMSの正規化って、もう、だいぶ、やり尽くされてるから、
うん。
できる人多いし、ベストプラクティスもあるから、そこ、そんな困んないよね、みたいな話も、あったり、しますね。
スピーカー 2
うん。
なるほど。まあ、RDBのベストプラクティスみたいなの、出回ってるんで、難しい、その、線引きみたいなの、まあ、このまま行くのか、まあ、ノーSQLでも言えることだと思うんですけれども、
スピーカー 1
うん。
スピーカー 2
実際に、まあ、ノーSQLの場合も、結構、そのまま、オブジェクトを表現しやすいっていう、まあ、話が、第2章でありまして、
うん。
まあ、そのまま、ストア、そのまま、えっと、JSONの形、
うん。
ような形で、え、データを保持できるからこそ、まあ、使い勝手がいい一方で、まあ、型とか、まあ、データ型みたいなのが付いてなかったりとか、もしくは、その、他のテーブルとのジョイングが難しかったりみたいな、まあ、そういう課題はあるっていう話なんで、まあ、その辺、どう折り合いをつけていくか、まあ、っていう、先を見越しながら作らなきゃいけないのかなっていうのは、
スピーカー 1
うん。
スピーカー 2
思いましたね。
そうですよね。
はい。
スピーカー 1
うん。
スピーカー 2
だから、
スピーカー 1
うん。
はい。
だから、そうやって考えると、一つの、例えば、Neo4jみたいなデータベースにめちゃくちゃ詳しいっていう、それはそれで価値はあると思うんだけど、
スピーカー 2
はい。
スピーカー 1
なんだろう、そこに情熱を見いだせないっていうか、逆に、なんだ、もうちょっと事業に技術を手段として貢献したいみたいなタイプのエンジニアであれば、いろんなデータベースについて詳しくなっておくっていう方が、確実に社会に対して価値を出せるんだろうなっていうのを、
うん。
思ったっていうのが、一つ。
スピーカー 2
なるほど。
まあ、この技術を深めたいというわけでなければ、幅広く知っておいた方がいいよと、
24:01
スピーカー 2
そうそうそう。
いうところですね。
そう。
まあ、確かに。
スピーカー 1
だから、まああれですよね。宮本武蔵になるか、弁慶になるかみたいな。
スピーカー 2
ちょっと、それ、例えが、僕分かんないですね。
笑。
スピーカー 1
笑。
こう、剣豪、剣豪になるか、
はい。
弁慶の七つ道具って知りません?
あー。
はい。
弁慶って、いろんな武器を持ってたんですよ。
スピーカー 2
うんうん。
スピーカー 1
そう。
あの、牛は、
そう。
牛若丸を助けた弁慶ですけど、
剣、剣をひたすら磨いて、宮本武蔵みたいな、こう、歴史に名を残す剣豪になるか、
弁慶みたいに、いろんな武器を持って、
うんうん。
こう、牛若丸を助けていくかと。
スピーカー 2
はいはい。
スピーカー 1
どっちもかっこいいですけどね。
スピーカー 2
なるほど。
はい。
すいません、脱線しました。
いや、ちょっと、この話をまたやりたいですね。
そういう、この、その、武器をどう使っていくかみたいな話ですね。
スピーカー 1
はい。
はい。
この、チャプター1だっけ、2だっけ、
なんか、
具体例として、ツイッターの話が出てきましたよね。アーキテクチャーの。
スピーカー 2
あ、はい。出てきましたね。
スピーカー 1
うん。
その、ツイッターみたいなシステムを作るんだったら、君どうします?みたいな話が出てきましたよね。
スピーカー 2
ありましたね。これは、面白かったです。
まあ、主に、ですかね、その、ツイッターのホームページのフィードをどうやって表示するか、
まあ、フォローしてるユーザーのフィードをどう表示するかみたいなところの、アーキテクチャーの説明でしたね。
スピーカー 1
そうそうそう。
はい。
スピーカー 2
これで、まあ、最初のやり方が、単純にフォローしてるユーザーのデータを取っていくにしたっけ、一個ずつ。
うん。
それを、まとめて読み込むときに取っていくみたいなやり方と、もう一つが、ツイートされたときに逆にそれをフォロワーの球に溜め込んでいくみたいなやり方の、まあ、2種類があって、
5個目で始めたけど、それだと全然スケールしないので、2つ目に移行したみたいな話がありましたね。
スピーカー 1
確かに。
そうですね。
なんかそのツイート画面を訪れた時のそのビューをどのタイミングでレンダリングするかっていう話で、
うん。
数から
どんなツイートしたかっていうのを
持ってくるのにかなりのジョインが
発生するんですよね
ジョインってRDBMS的には
基本的に遅い操作なので
それを
そこのボトルネックを外すときに
非同期で
作っとけみたいのがまず第一段階
あったけど
それはそれでまた
次のボトルネックに当たって
確か有名人とか
有名人とか
何百万人の
フォロワーがいるみたいなときだと
それはそれでそうそう
ボトルネックに当たるから
スピーカー 2
そのときは条件分けするみたいな話でしたよね
27:00
スピーカー 2
有名人の場合は
何百万人のフォロワーがいるような場合は
元の方法を
使うみたいなやつでしたっけ確か
スピーカー 1
結局
どっちも取るっていうね
現場でよくあるの
綺麗なアーキテクチャで全て解決するわけじゃなくて
落とし所を探っていくという形になりましたよね
スピーカー 2
バランスが大事というか
それぞれ解決策を
考えた上で
その境界点を作って
対応したという感じですかね
規模が大きいほど
いろんな問題に
これ以外のいろんな問題にぶち当たりそうですね
スピーカー 1
自分たちが最初に
設計したシステムが
いろんなボトルネックに当たっていくと思うんですよ
サービスが成長してくれれば
成長しないで終わっちゃうときもあるけど
当たったときに
ちゃんとボトルネックを
理解して
そこを解決するために
どういう新しい設計にしなきゃいけないのか
どういうデータフローにしなきゃいけないのか
っていうのが一つエンジニアとしては
楽しいところかなと思ってます
スピーカー 2
そういうときにも
メンテナビリティとか
しっかり考えられていれば
変更しやすい状態になっているかもしれないし
っていうところで
メンテナビリティが重要
っていうのがありそうですね
スピーカー 1
うまくつながったね
チャプター2と
スピーカー 2
つながりましたね
スピーカー 1
このツイッターの例とか
アーキテクチャインタビューで聞かれるトピックでもあるかな
実際僕も転職活動してたときに
ツイッターみたいなのを作ったら
どういうシステム設計にするとか
あとはブックマーク
どうやって表現するとか
どんなデータベース使うみたいな話を
実際によくあって
最初は
データモデルで普通に
こういう風に正規化してやろうかな
でもそれだと
書き込みのワークロードが
ボトルネックになるよね
じゃあここだけ
ダイナモDBに外出ししようかな
そしたら今度
こっちのリードがボトルネックになるよね
じゃあそこは非同期にイベントシステム
使おうかなみたいな
ちょっとずつパッチを
当てていきながら
アーキテクチャを進化させていくみたいな
割とこの
外資のアーキテクチャインタビューでも
求められるというか
実際現場で求められるからね
スピーカー 2
知識が
そういう話でもあるかな
自分の場合はこれまで
会計システムと
暗号通貨の取引所なんで
RDBしか使ったことなくて
それ以外にも多少はあるんですけども
やっぱり
そういうのも知っておいた方が
他の会社定職したい場合とかも
特に生きるし
もしくは派生的なシステムとかを
作るときに
ちゃんと提案ができると思うので
30:00
スピーカー 2
やっぱりいろんなデータベースを
知っておくっていうのは
どんな会社でも強みになるなという風に
思いました
スピーカー 1
結構大手の金融とかで
アパチカフカ使ってる話とかよく聞きますよね
RDBMSももちろん
使うけど
スピーカー 2
確かにカフカはそうですよね
スピーカー 1
ストリームとしてはね
枯れてるから
スピーカー 2
SREとして求められる技術は何かっていうところ
言ってみますか
スピーカー 1
そうですね
せっかくSREとしてDDIMを読んでるんで
このDDIMで読んだところを
自分たちの業務に落とし込むなら
っていう話で
じゃあデータベースについて
読んでますと
じゃあそれってSREとして求められる技術とは何か
みたいに絡めたときに具体的にどういうこと?
なるのかなっていうのが一つ
面白いディスカッションポイントかなと思うんですけど
スピーカー 2
それぞれの特性を知っておくっていうのは
第一ですよね
あの
まあ
NoSQLとRDBの違いとか
分からないと提案もできないし
この時はこれを使おう
まあこれは多分データベースに関わらず
どのシステムでも一緒というか
Kubernetesと普通のコンテナを使うかみたいな話ですね
まあ
それ
スピーカー 1
そう
スピーカー 2
データベースいろんな種類があって
それぞれ
まあ大まかにどれがどう違うかみたいなところは
知っていた方がいいかなっていうのは
思ったんで
まあこの本をもっと読み進めていきたいなって思いますね
スピーカー 1
そうですよね
だからSREというプラクティスをこう実行していくにあたって
例えばアプリケーション側で障害が起こって
それは実は今のデータフローの設計から来る
なんだろう
ボトルネックでしたってなった時に
スピーカー 2
はい
スピーカー 1
SRE側から
まあなんだろう
例えばこう
スロークエリを直すとか
インデックスあるみたいな
そういう簡単な話だったらいいんですけど
スピーカー 2
はいはい
スピーカー 1
そもそも今のアーキテクチャとかデータモデルにしてるから限界があるよね
でもそれって実は
まあここのRDBMSでやってるところを外出しして
別のデータシステムを使うと
まあうまく使えるよっていう提案ができてるんですけど
データベースシステムを増やすと複雑性が一般的に増えるけど
今はクラウド化が進んでるし
この会社のこのサービスを使うと
オペレーションのコストもメンテナビリティもそこまで上げずに使えるよ
みたいなことが提案できたり
はい
あとは君たちのSLOはこれぐらいだけど
ここの部分はこうやって底出しにすることによって
逆に信頼性が上がるよねとか
そういったふうに交渉材料として
武器を持っておく
でそのメリデメを理解してるっていうのがあると
かなりこうアプリケーションデベロッパーとも
リレーションビルディングができるというか
スピーカー 2
それもでもまたいきなりやるっていうのが難しい
33:04
スピーカー 2
知識があっただけだとわからないことも多いじゃないですか
それをケンさんは結構その
そうですね
最初にやったときとかってどうやって
この提案みたいのをしていったっていうか
なんですかね
やったことないところとかも
領域も出てくると思うんですけど
そういうときにちょっと話が変わってきますけど
まあどう対応して
スピーカー 1
どう交渉するかみたいな
スピーカー 2
そうですね
はい交渉というか
どう折り合いをつけていくか
自分がわからないところも含めてみたいな
スピーカー 1
うん
そうですね
なんかもちろん僕一人で世の中全てのデータベースシステムを
知ってるわけじゃなくて
なんかこう
ここってこういう限界があるんじゃないみたいな指摘すると
まあ幸いにも他のなんだろう
他のデータベースシステムに詳しい人が出てきて
ツッコミくれたりするから
まあなんだろうね
まあでも
あくまでSREだっていうポジションは崩さないようにしていて
はい
はい
スピーカー 1
はい
,
それはどういうことかっていうと
例えばその
どのカラムにインデックスを張ろうかとか
Nプラス1をどうやって特定しようかとか
もちろん会社によるとは思うんですけど
あんまりそこまでいくと
それはアプリケーションデベロッパーの仕事だと思ってるんですね
はい
だから僕らがSREが
一つ一つのクエリをチューニングし始めると
それはスケールしないと思ってるんですよ
スピーカー 1
うん
一つ一つのカラムを見て
インデックス張ったりしたらスケールしないと思ってるので
あくまでSREとしては
プラクティスを進めるというところに集中するのであれば
どうやったらNプラス1を回避できますか
どうやったらスロークエリを分かりますかっていうツールとか
そのやり方を提供するにとどめて
具体的なものはアプリケーションデベロッパーに任す
そうすると僕らには
もっと全体像を
見晴らしの良いところから
データフロー全体を見れるようになる時間があるので
その時間を使って
例えば新しくFacebookから出してきた
オープンソースのデータベースについて調べつつ
それが導入できないかなって見てみたりとか
例えば自分が好きな
Apache Kafkaとか
Neo4jだったらメジャーのバージョンアップデートは
定期的にウォッチして
新しく出てきた機能が使えないかなとか
っていうのを
定期的にやっていく感じですかね
だからあんまり
折りすぎない
その側に折りすぎないというのを意識してる
あんまり領域を
領域侵犯しないというか
スピーカー 2
自分がやるべきところに集中していくっていうのは
大事そうですね
スピーカー 1
そうだからそういう
質問の答えに
36:00
スピーカー 1
振り返ると
どういう風に
入れていくかということに関して
アプリケーションにやってほしいこと
っていうのを明確にして
移情するというか
デリゲーションするというか
でまぁあとは
あれらの視点に立って話すことですよね
例えばリダイビリティもめっちゃ上がるし
スキャラビリティもめっちゃ上がるんだよ
って言っても
そのためにアプリケーション側の
普段の開発速度が
下がったりとか
例えばクエリ言語が
なんか枯れてなくてすごい
開発速度が下がっちゃったりとか
彼らにとってデメリットがあったら
嫌じゃないですか
アプリケーション側からしても
例えばオンコールの回数が減るよね
とか
こうやってNプラス1クエリが
どんどん減っていくよね
とかっていう感じで
彼らの目線で提案していくためにも
なんだろうね
アプリケーションを使うという観点でも
オペレーションをするという観点で
双方向からデータベースを理解するように
っていうのが必要なんだろうなって
まぁそういうことをやれると
全然時間なくなってくるんですけどね
スピーカー 2
いやぁ確かに
取捨選択が難しいですね
教会はきつつも
彼らの視点を理解しなきゃいけない
っていうところは
スピーカー 1
そうそう
スピーカー 2
あると思うので
その辺は
経験を積みながら
いい感じの勘どころを
鍛え上げていくという
スピーカー 1
感じになるんですかね
まぁ一人でSREやってるわけじゃないから
そこはあんまり困ったことは
困ったことはあるんだけど
なんか他の頼れる人に
頼ったりしてるかな
はい
いいですね
じゃあSREとして求められる
技術は何かということで
1個目が
複数のデータベースの
メリデメを理解してることでしたね
はい
はい
スピーカー 2
で次が
リライアビリティとか
スケーラビリティを
上げるための設計の
提案ができること
スピーカー 1
そうっすね
チャプター1と絡めてるけど
じゃあリライアビリティを
上げるために何ができるか
何をする必要があるかって
モニタリングの設計と
導入ができることでしょうね
多分SREとしては
スピーカー 2
はい
スピーカー 1
リライアビリティの
プラクティスって何?
ってなった時に
まず見える化できないと
意味がないので
例えば
MySQLだったら
MySQLにどういう
モニタリングツールがあって
それをどういう
プロセスを入れると
スクレープできるようになって
それがどういう
例えばグラファナで
見えるようにするのか
別のツールで
見れるようにするのか
それが最終的に
アプリケーションデベロッパーの
普段の業務に
どう絡めるのかっていう
どこまでの
エンドツーエンドの
導入ができる
っていうのは
SREに求められると思いますね
個人的には
スピーカー 2
はい
とは
やっぱり自分が思うのは
あの
アップデートとか
アップデートって結構
データベースは
難しいことが多いと思ってて
まあ
データを維持しながら
バージョン上げる時に
まあ
メンテナンスウィンドウとかが
設けられてれば
いいんですけども
ダウンタイムとかを
39:00
スピーカー 2
許可できない
ような
場合に
あの
そうですね
結構
まあ当然その
分散化されていれば
できることかもしれないですけど
えっと
その辺の
いかに一つずつ
アップグレードしていくか
みたいな
設計もできてる必要が
あるのかな
という風に思うんで
まあリライビリティとしては
その
アップグレードとか
まあ変更
データ移行とかの
しやすさみたいな
ところも
重要になってくるかな
という風に思います
スピーカー 1
そうですよね
うん
まあスケーラビリティに関しては
まあ例えば
ロードテスト
負荷テストってのの
計画と実行ができることとか
スピーカー 2
はい
スピーカー 1
あとは実際にこう
そこでボトルネックに
当たった時に
そのデータベースでは
どういうツールを
使うと
垂直または水平に
スケールできるのか
っていうのを
理解すること
それが
設定できること
かな
スピーカー 2
確かに
そういうテスト環境的なものが
ちゃんと
あって
そういうテストを
しっかり
できるような
状態を
準備しておくっていうのも
大事です
っていう感じですかね
スピーカー 1
うん
そうだよね
スピーカー 2
はいはい
スピーカー 1
でまああとは
メンテナビリティですよね
今アサイさんも
ちょっと
触れてたけど
スピーカー 2
ああそうか
ここでさっき言ってた
すいません
そうですね
スピーカー 1
まあそれ多分
どっちの観点でも
あると思うんだけど
例えばじゃあ
ダウンタイムなしに
リライビリティを
担保しつつ
スピーカー 2
はい
スピーカー 1
アップグレードする
ってなった時には
リライビリティを
理解するという観点も
もちろんそうだし
そういったツールを
実装したり
あと使ったり
調査したり
移行作業自体が
できるってことも
もちろん
必要となってくるかな
スピーカー 2
そうですね
スピーカー 1
うん
まあ難しいのは
それぞれを
じゃあ
SREとして
どこまでやっていくか
っていうのは
まあ本当に
会社ごとによるかな
と思ってて
会社によっては
SREの別に
データベース
リライビリティエンジニア
みたいな
DREっていう職種が
あったりとか
なかったりとかするから
そういった別のチームとの
兼ね合いとかも
あると思うし
そうですね
スピーカー 2
まあ結構
深掘りすれば
それほど
深くなるんで
スピーカー 1
うん
スピーカー 2
大きい会社ほど
分けてそうですね
スピーカー 1
スピーカー 2
うん
スピーカー 1
逆にでも
スピーカー 2
データベースエンジニア
というか
データベース専門で
やっていきたかったら
比較的
まあ大きい会社
大きい会社に
行かないと
その専門職種みたいな
なかなか
見つけにくい
かなっていうところも
ありそうですね
そうですね
スピーカー 1
特定のデータベースとか
例えばRDMSについて
詳しくなるとかだったら
スピーカー 2
はい
スピーカー 1
うん
そんな印象かな
大きいとこ行かない
だ方が
チャンスはある気がする
スピーカー 2
はい
ということで
まあデータベース
領域で
そうですね
42:01
スピーカー 2
高みを目指していく
スピーカー 1
なんかこう
ぜひちょっと
チャプター1とチャプター2を読んだ
浅井さんに聞いてみたいものとしては
せっかく本を読んだんで
本を読んで
読んだ後の
なんか自分のアクションに何か
変わるものがあったかどうか
ああ
まあまだ全部読んでないから
ここの質問は早いかもしれないけど
もし現時点で
なんかヒントがあったら
なんか日々の業務とか
日々の勉強計画とかに
こういうの参考にしようかな
みたいな何か
果実が
もし
あれば
スピーカー 2
聞いてみたいですけど
そうですね
まあ
直接すぐにっていうものは
そんなにないんですけども
個人的に
いやすごい
読んでてよかったなあ
と思うのは
本当にそれぞれのデータベースの違いが
知れたっていうところと
あの
自分は
あの最初に
触った言語が
SQL
だったんですけども
サポートエンジニアとして
結構データをチェックしたり
みたいな
の分析とか
みたいなのをSQLでやってて
その時はそんなに
SQLのことが
好きじゃなかったっていうか
もっと
アプリケーションのコードを書きたいな
みたいなことを
思ってた
いたんですけれども
実際にこの本読んで
SQLがすごい
あの抽象化がうまくできていて
それこそ
どのデータベースでも
基本的な構文が動くみたいな
仕組みが
あるじゃないですか
まあ
それがやっぱりすごいなって
今改めて思いまして
当時のことを思えば
そんなにコードを書けない
自分であっても
触れる言語として
SQLっていうのが
あって
えー
っていう
データエンジニアとか
であっても
使えるみたいな
そういう設計ができてる
SQLってすごいなっていうふうに
僕は改めて思いまして
結構そういう
意味で
そういったSQLみたいな
抽象化をしていけたら
いいなっていう風に
個人的に思いました
スピーカー 1
クエリ言語の
素晴らしさを知ったと
はい
スピーカー 2
そうですね
スピーカー 1
いいじゃないですか
本読んで
過去の
自分の経験とか
知識を
改めて言語化できるようになる
っていうのも
一つ本を読む
理由ですしね
そうですね
スピーカー 2
はい
けんさんは
改めて
喋ってみて
何か新しい発見は
ありましたか
スピーカー 1
改めてこうやって
読んでみると
新しい発見が
確かに僕も
前回読んだのが
4、5年前で
その後ちょいちょい
チャプターごととか
セクションごとに
見直してみたけど
こうやって
改めて読んでみるのは
久しぶりなので
そうですね
でも読んだときは
スピーカー 2
僕グラフデータベースのこと
スピーカー 1
全くよく分かってなくて
読んだから
なるほど
当時は
Cypherって聞いても
何それ
おいしいのって
感じだったけど
今なら
分かる
というか
うん
今なら
グラフデータベースが
どういうとこ
こうやって
グラフデータベースが
どういうとこに
45:00
スピーカー 1
マッチして
はい
どういうとこに
マッチしないか
っていうのが
すごいよく分かるのと
あと当時は
どっちかというと
まだソフトウェア
デベロッパーの
視点だったんですよね
SREじゃなくて
うん
だからリレーアビリティ
スケーラビリティ
メンテナビリティ
と言われても
よくちょっと
分かんないくて
SQLを使って
とか
正規化とか
そこら辺で
やってた時期なので
そういう意味で言うと
SREになってから
確かに
データベースを
引用するっていうのは
こういった観点が
必要だなっていうのを
見直す機会に
なってますね
スピーカー 2
うん
自分見直して
新たな発見が
SREとしての
発見があったっていう
スピーカー 1
感じですかね
そうだね
スピーカー 2
うん
いいですね
いやー
ちょっと読めて
よかったです
まあまだまだ
スピーカー 1
チャプターに
読んだ
確かに
いっぱいあります
スピーカー 2
全然思ってなかった
はい
やっぱりその
引用とかも
すごい多いので
この辺
もうちょい
作る文献とかも
読んで
深掘りしてみたいな
とかも
思いますし
その先の
チャプターも
読み進めていきたいんで
いやそこは
時間がないですね
うん
もっと
うん
読んでいきたい
スピーカー 1
っていう感じです
次回もやる?
スピーカー 2
公開
次回も
やりますか
スピーカー 1
いいじゃん
チャプター3,4くらいで
スピーカー 2
はい
スピーカー 1
いいね
公開読書会
もしかしたら
一緒に読んでくれる
スピーカー 2
リスナーの方が
いるかもしれない
スピーカー 1
あー
はい
そういう
物好きな方がいたら
一緒にやりましょう
そうですね
ゲストとして
スピーカー 2
まだこの
こういうのを
聞いて
やってくれる方
出てきてないですよね
正直
スピーカー 1
あっ
スピーカー 2
ありました
スピーカー 1
ありました
ありましたっけ
このトピックじゃないんだけど
うん
これはじゃあ
スピーカー 2
ちょっと後で
共有します
はい
了解です
スピーカー 1
じゃあぜひ
お声掛けください
はい
スピーカー 2
今日は
こんなところかな
はい
こんなところですかね
ありがとうございました
スピーカー 1
はい
スピーカー 2
お疲れさま
お疲れさまです
47:06

コメント

スクロール