1. London Tech Talk
  2. DDIA Ch3&4
2023-09-02 46:39

DDIA Ch3&4

spotify apple_podcasts
00:16
スピーカー 1
アサヒさん、今日も宜しくお願いします。
スピーカー 2
宜しくお願いします。
スピーカー 1
今日は、DDIA本の公開、
臨読会シリーズ、Ch3&4編ということで、やっていきたいと思います。
ついこの前、DDIAの初回というか、
DDIA本のすすめみたいなタイトルで、
収録を公開したんですけど、
めちゃくちゃ反響があったんですよね。
スピーカー 2
すごかったですね。
DDIA本のおすすめをしてくれた方でしたっけ?
リツイートしてくれたりして、
スピーカー 1
いろんな人から反響がきましたね。
サブスクライブしてくれる方も、
10人以上増えたし、
僕らも技術の話をしているのが、
楽しいという感じなので、
僕らが出せるコンテンツとしては、
技術なのかなということで、
今日もやっていきたいと思います。
今日は、Ch3&4、読みました?
スピーカー 2
読みました。
なんか、レベルが一気に上がった感じがするんですけど、
インデックスとか、話が3は主になると思うんですけど、
かなり難しくて、読むのに時間がかかりましたね、今回は。
スピーカー 1
1とかは本当に、
Ch1はイントロみたいな感じで、
そこで読者こけさせたら困るから、
割とふわっと書いててね。
で、Ch2で盛り上げて、
からの3でドカーンみたいな感じですね。
スピーカー 2
そうですね、きましたね。
スピーカー 1
結構、B3とか、RSM3とか、
実装の詳細にも入ってるし、
ストレージエンジンの実装とは何かみたいなのを、
今まで知らなかったり、
意識しなかったりすると、
いきなり新しいキーコンセプトばっかり入ってきて、
ちょっと迷子になっちゃいがちなショーが、
Ch3の印象ですね。
うん。
スピーカー 2
はい。
でも結構、
最初のインデックスの歴史というか、
そういったところから始まっていくので、
その辺は何ていうか、
少しずつ進んでいくような感じもあって、
それを読みやすいように思いましたね。
特に最初のデータベースの、
どういうふうに始まるのかというか、
一番シンプルなデータベースの例みたいなのも、
あったりしたんで、
その辺は、
入りとしては入りやすかったかなという気はしました。
スピーカー 1
そうですよね。
Ch3、深掘る前に軽くCh4も触れとくと、
Ch4はどうでした?
スピーカー 2
Ch4は、
03:02
スピーカー 2
結構、このショー好きでしたね。
なんていうか、
あんまりバイナリーエンコーディングを、
私自身は意識したことなかったんですけれども、
だからこそ、
こういうことなのねっていう、
聞いたことある、
プロトコルバッファーとかアブラとか、
そういうのが、
どういう思想のもとに、
作られてきたのかみたいな、
っていうのが分かって、
僕はすごい面白かったですね。
スピーカー 1
多分、技術的な難易度はそんなにないでしょうで、
多分、
普通のデベロッパーとして、
アプリケーションコード書いてると、
なんかよく分かんないけど、
技術基盤チームとか、
プラットフォームチームに言われて、
プロトコルバッファー入れてみたりとか、
アブロスキーマ書いてみたりとかしてて、
スキーマ定義できるのが便利だよね、
みたいなノリで書いてたけど、
なんであんなにデータ基盤が、
こんなにこの、
スキーマを押してくるのかとか、
バイナリーエンコーディングを押してくるのか、
っていうのを、
ショーメモリとか、
パフォーマンスを上げるとか、
そういった観点で、
ちょっと分かった気になれる、
そこに入れる、
別の視点でね、
今までアプリケーションディグロッパーであれば、
なんかそういう、
新しい視点を得られるショーなのかな、
と思うし、
多分ここで挙げられてる、
バイナリーエンコーディングは、
メッセージ、
フルエントDでも使われてる、
メッセージパックと、
アブロと、
プロトコルバッファーと、
って感じでしたよね。
あと何だったっけな、
ちょっと忘れちゃった。
スピーカー 2
スリフトみたいな、
Facebookだっけな。
Twitterとか、
スピーカー 1
Facebookとか使ってる印象ですね、
あそこら辺はね。
Airbnbとか、
Airbnbも使ってたかな、
前なんか、
GraphQLのカンファレンス行った時に、
スピーカー 2
出てて、
スピーカー 1
そこら辺、
スキーマを、
スキーマってこう、
データベースを使う側の観点としては、
割と避けて通れない、
ところなんで、
ここも、
かなり実用的なショーでしたよね。
スピーカー 2
そうでしたね。
結構、
Web開発とかする方、
でも、
すごい、
生きることが多いんじゃないかな、
と思いましたね。
スピーカー 1
ね。
うん。
逆に、
チャプター5からは、
ストレージの話に入ってるから、
チャプター4までで、
サクッと、
データベース、
インスタンスとか、
使う側についてとか、
触れましたね。
ということで、
じゃあ、
どうしようか、
チャプター3を深掘って、
最後に、
ディスカッショントピックを、
話すって感じにしますか。
スピーカー 2
はい。
そうしましょう。
スピーカー 1
ほい。
はい。
じゃあ、
また戻って、
チャプター3。
チャプター3は、
どうかな、
なんか、
基本的に、
大きなテーマとして、
あるのは、
ストレージエンジン、
そもそも、
第3章の始まりが、
結構、
印象的じゃなかったですか。
覚えてますか。
あの、
スピーカー 2
はい。
スピーカー 1
最初のデータベースとは、
何か、
みたいな感じで、
スピーカー 2
あ、はい。
スピーカー 1
あの、
ね、
Linuxの、
あの、
パイプを使って、
あの、
テキスト、
すごい簡単な、
テキストファイルを使って、
06:00
スピーカー 1
これがデータベースだ、
みたいな感じで、
始まってるんですよね。
すっごい雑な、
テキストファイル。
スピーカー 2
うん。
めっちゃ、
分かりやすかったですね。
スピーカー 1
うん。
スピーカー 2
なんていうか、
はい。
スピーカー 1
印象的でした。
ね。
要するに、
テキストファイル作って、
それに、
ゲットとセットができれば、
データベースだよね、
みたいなのを、
超簡単な、
シェルコマンドで、
表現してて、
これがデータベースです、
みたいな。
以上、
スピーカー 2
終わり、
みたいな感じで、
まず始まってて。
スピーカー 1
うん。
そんな風に、
できるんだ、
っていう感じでしたね。
うん。
まあ、
もちろん、
そうですよね。
こう、
わからんプロセスが、
動いてるって感じなんですけど、
まあ、
裏側ではね、
基本的に、
独自の、
最適化された、
フォーマットで、
まあ、
バイナリが動いてて、
裏でディスクに書き込んでるって、
だけっちゃ、
だけなので、
まあ、
この入り、
上手いなと、
僕は、
最初読んだとき、
結構、
まあ、
さすが、
マーティン先生、
という感じですが、
うん。
おお。
ね。
で、
ここの話の広げ方が、
じゃあ、
リードするには、
問題があるよね、
っていうことで、
話を広げていくんですよね。
じゃあ、
何が問題があるかっていうと、
まあ、
まず、
基本的にアプリケーションが、
データを読むときに、
まあ、
リードとライト、
それぞれのワークロードが、
あるじゃないですか。
で、
これ、
リードするとき、
どれぐらいパフォーマンス出るの、
ライトしたときに、
こう、
ボトルネックにならない、
みたいな感じで、
まあ、
これは圧倒的に、
単なる一つの、
テキストファイルだと、
まあ、
これ、
どうしたらいいでしょうか、
ってことで、
まあ、
インデックスの話とかに、
繋がっていくと。
この話の繋げ方が、
上手いな。
うん。
スピーカー 2
いや、
いいですね。
スピーカー 1
うん。
で、
紹介されてるのが、
まあ、
まずは、
そもそも、
インデックスは何か、
っていうことで、
まあ、
インデックスを作ることによって、
リードのワークロードを、
上げていきましょう、
ということで、
まあ、
まずは、
ハッシュインデックス。
すごい、
まあ、
基本的には、
要するに、
実際のデータベースの例として、
うん。
あ、
スピーカー 2
どうぞ。
はい。
あ、
すいません。
いや、
キーをメモリに持っておいて、
ってやつですね。
持っておいて、
実際のデータを、
ディスクに置いてあげて、
読み込みを早くする、
スピーカー 1
っていう、
言い方ですね。
スピーカー 2
うん。
そうそう。
実際のデータベースで言うと、
例えば、
スピーカー 1
レディストとかですか?
ビットキャスクの例、
スピーカー 2
とかが出てたかな。
スピーカー 1
あ、
スピーカー 2
はい。
スピーカー 1
うん。
あ、
そっか、
ビットキャスクか。
そう。
まあ、
基本的に、
プログラミング言語を使ってたら、
Rubyでも、
Pythonでも、
まあ、
ハッシュという、
オプションとか、
ディクショナリーとか、
出てくるんで、
はい。
理解はそんな難しくない、
セクションだったかな、
と思いますが、
うん。
なんか、
こう、
ピックアップしたいキーワードとか、
よく分かんなかったところとか、
ありました?
スピーカー 2
ハッシュインデックス。
いや、
ここは、
スピーカー 1
すごい分かりやすかったですね。
09:00
スピーカー 1
うん。
スピーカー 2
うん。
で、
そっからさらに、
次に、
まあ、
コンパクトしていくみたいな、
うん。
話に繋がっていくんですよね。
そうそう。
スピーカー 1
それからまあ、
ハッシュの状態で、
こう、
ディスクに、
データを持っていった、
ディスクとか、
メモリデータを持っていったときに、
どういう問題が起こるか、
っていうことで、
まあ、
セグメンテーション、
ってのは、
まあ、
要するに、
こう、
データを読み書きしたり、
デリートしたりすると、
まあ、
欲しいところのデータが、
こう、
まあ、
セグメン、
なんていうか、
断片化というか、
さあ、
日本語では、
スピーカー 2
断片化で合ってる気がします。
はい。
スピーカー 1
浅井さん、
日本語で読んでるんだっけ?
スピーカー 2
いや、
英語で読んでます。
スピーカー 1
あ、
そっかそっか。
じゃあ、
ちょっと、
時々、
日本語で訳が、
二人とも間違うかもしれない。
ありがとう。
じゃあ、
断片化して、
それを、
まあ、
コンパクションすることによって、
あの、
必要なデータを、
まあ、
領域上、
近くにまとめておいて、
2回目以降の、
なんだろうね、
あの、
リードのパフォーマンスを、
アップデートするから、
コンパクトな方が、
やっぱ、
パフォーマンスが上がるんだけど、
その、
コンパクションの、
いつ、
どこでするかってのが、
多分、
まあ、
これ、
スピーカー 2
どのストレージエンジンを、
スピーカー 1
実装してても、
結構、
なんだろうね、
肝になってくるか、
スピーカー 2
ところだと思うんですよね。
スピーカー 1
はい。
うん。
結局、
その、
データに対して、
あの、
データファイルに対して、
あの、
ロックを取って、
アップデートしなきゃいけないから、
まあ、
基本的に、
まあ、
ロックを取ってやるんだけど、
まあ、
なんだろうね、
その、
アプリケーションの、
ワークロードとして、
書き込み自体が多いと、
まあ、
そこと、
デッドロックが発生してしまったりするから、
まあ、
割とこのコンパクション自体も、
こう、
チューナブルにしてるデータベースも多いかな、
という印象ですが、
まあ、
まあ、
多分、
なんでセグメンテーションが必要か、
あと、
コンパクションが必要か、
みたいなところは、
まあ、
サクッと入っていけるんじゃないかな、
と思います。
うん。
スピーカー 2
やっぱり、
その、
最初のシンプルなデータベースの、
例だと、
まあ、
更新をしたときに、
まあ、
削除を、
その実際に削除されるわけじゃないから、
まあ、
その古い更新前のデータたちを、
実際に消していくために、
まあ、
コンパクションをしていく、
っていう、
ところですよね。
うん。
そうそう。
スピーカー 1
それは、
スピーカー 2
すごい、
わかりやすかったです。
スピーカー 1
ね。
まあ、
だから、
ここぐらいまでだったら、
例えば、
読んで、
なんか、
その、
プログラミングのネタの、
一つとして、
超簡単な、
メモキャッシュD、
みたいな、
メモキャッシュドとか、
キーバリューストアを、
作ってみるとか、
ハッシュインデックスを、
スピーカー 2
もどきを、
スピーカー 1
実装してみる、
みたいなのは、
まあ、
割と、
とっつきやすい、
週末プログラミングの、
課題かな、
と思ったりしますね。
まあ、
そうですね。
スピーカー 2
うん。
スピーカー 1
まあ、
まず、
まずは、
すごい、
なんだろう、
ワンプロセスで、
作って、
それを、
作ったら、
12:00
スピーカー 1
インターフェースも、
定義して、
で、
この後の章を読む、
につれて、
ちょっと、
分散、
システムらしい、
機能とか、
メカニズムを入れてって、
みたいな、
こう、
この後で、
盛り上げていく、
みたいな感じで、
まあまあ、
そんなに、
難しい、
スピーカー 2
セクションじゃなかったかな。
うん。
一章ごとに、
ちゃんと作ったら、
すごい、
勉強になりそうですね。
そんな感じで、
スピーカー 1
それぞれの学びを。
1年じゃ、
スピーカー 2
終わんないでしょうね。
確かに。
うん。
スピーカー 1
データベース。
データベースは、
大変ですよ。
大変そうですよね。
スピーカー 2
はい。
スピーカー 1
そうね。
大変さが、
分かるって意味でも、
この、
いいよね。
DDIへの。
スピーカー 2
そうですね。
スピーカー 1
うん。
スピーカー 2
積み重ねられた、
歴史が、
あっての、
データベースですよね。
ね。
スピーカー 1
この、
インデックスの話に、
そうだけど、
まあ、
要するに、
その、
実装方法によって、
メリデミが、
違うじゃないですか。
リードとライトの、
トレードオフが、
どれぐらいか、
実装の難易度とか、
あとは、
セグメンテーションとか、
コンパクションに対する、
こう、
戦略とか、
まあ、
なんで、
なんか、
シルバーバレットみたいな、
こう、
パーフェクトな、
データベースは、
存在せずに、
いろんな人が、
自分の、
ビジネス要件に合わせて、
データベースを作る、
っていうのが、
まあ、
なんでかな、
っていうのが、
スピーカー 2
分かるというか。
確かに。
なんで、
こんなに種類があるのか、
っていうのは、
本当に、
一つの解決策が、
スピーカー 1
まあ、
その次に出てくる、
インデックスの例としてが、
まあ、
Sorted String Tableと、
まあ、
LSMのところですね。
はい。
はい。
ここのセクションは、
どうでした?
多分、
初めてですか?
知った、
スピーカー 2
名前とか、
初めてですね。
はい。
初めて聞きました。
LSMも、
SS Tableも、
スピーカー 1
はい。
スピーカー 2
まあ、
この、
ソートするのが、
結構大事なんだな、
っていうのは、
やっぱり、
まあ、
ソートすることで、
まあ、
どこにデータがあるのか、
まあ、
すぐに見つけることができるというか、
キーがどこにあるのか、
っていうのが、
まあ、
分かりやすくなるっていうのが、
この、
Sorted String Tableの、
あの、
メイトだと思うんですけども、
スピーカー 1
はい。
スピーカー 2
なるほどね。
それを、
徐々にディスクに、
書き込んでいくというか、
まあ、
メモリ上で、
ソートすることで、
効率的に、
えー、
ソートも、
できるし、
っていうのが、
効率良さそうだな、
っていう風に思いました。
スピーカー 1
そうですね。
やっぱり、
この発想の転換というか、
ソートさせておくことによって、
メリットが、
いろいろあるんですけど、
まあ、
例えば、
こう、
バラバラになった、
こう、
バラバラにしてた、
データブロックを、
マージしていくときに、
まあ、
まず、
マージソートが使えるんですよね。
あの、
ソートしてあるから。
うん。
はい。
で、
まあ、
効率的に、
その、
データブロックを、
マージしていくことも、
スピーカー 2
できるし、
スピーカー 1
まあ、
スピーカー 2
あとは、
15:00
スピーカー 1
その、
素血合の素だけどさ、
こう、
レンスの反対、
あの、
たくさん、
こう、
データが詰まってるのの、
反対ですよね。
スピーカー 2
はい。
スピーカー 1
過疎の素ですね。
過疎の素ですね。
過疎。
スピーカー 2
過疎ってる。
スピーカー 1
ちょっと、
なんか、
一人ぐらい、
日本語で読んでくれてる人、
次から、
いた方がいいかもしれない。
うん。
っていうことで、
そうです。
うん。
なんか、
もともとが、
たぶん、
Googleの、
ビッグテーブルの、
ペーパーで、
どうに、
こう、
提案されたというか、
世に出されたアイデア、
って書いてあった気がします。
読み間違ってなければ。
うん。
スピーカー 2
結構、
Googleさんの、
なんか、
貢献が大きいですね。
データベース会話やらと、
こういうやつとか。
ですよね。
スピーカー 1
あとは、
スピーカー 2
あとは、
出てくるドレンメルっていうのも、
ありましたけれども。
スピーカー 1
うん。
うん。
スピーカー 2
かなり、
データベースに、
投資してるんだなっていう、
なんか、
この本読んでて、
スピーカー 1
少し分かりました。
ね。
まあ、
メタとか、
結構、
やっぱ、
ここら辺で出してるし、
まあ、
多分、
AWSのDynamoのペーパーとか、
あとは、
LogsDBのインプリメンテーションとか、
結構、
まあ、
ね、
参考にしたりとか、
これを使ってたりとか、
多いけど、
まあ、
なんだろ、
使われてるコンセプトは、
なんか、
めちゃくちゃ特別なものは、
なくて、
いろんなコンセプトがあって、
それどこ、
どのDBがどこを実装するか、
みたいな、
話だったりもするので。
はい。
やっぱ、
こうやって、
なんだろ、
こう、
横展開しやすい知識には、
なるかな、
と思ってたりしますね。
うん。
スピーカー 2
うん。
スピーカー 1
はい。
で、
まあ、
多分、
まあ、
スピーカー 2
いろいろインデックスあるんですけど、
スピーカー 1
まあ、
一つだけ、
覚えておけばいい、
というか、
一つだけ知っておけばいい、
とするならば、
まあ、
間違いなく、
スピーカー 2
B3でしょうね。
スピーカー 1
うん。
はい。
スピーカー 2
重要度で言うなら。
B3は、
さすがに、
スピーカー 1
聞いたことがありますね、
自分も。
ね。
普通の世界で言うと、
キングですよ、
キング。
うん。
はい。
B3を押さえておけば、
間違いないとは、
言わないけど。
うん。
スピーカー 2
まあ、
今の、
ある、
RDBMSとかで、
よく使われてるのも、
基本的には、
B3ですね。
スピーカー 1
インデックスとかを、
かけるときに。
うん。
そうですね。
まあ、
基本的なRDBMS使って、
クリエイトインデックスを、
発行したときには、
まあ、
大抵B3じゃないですか。
デフォルトとかでは。
うん。
まあ、
まあ、
B3を読んで、
なんでこれが必要だって、
分かんなかったときは、
まあ、
一つこう、
試行実験として、
まあ、
インデックスを、
作りなさいと、
言われましたと。
で、
すごい効率的な、
ルックアップのできる、
インデックスを、
作りなさい。
ただし、
あの、
データは、
全部ディスクに、
スピーカー 2
置いてくださいと、
スピーカー 1
いう制限を、
言われたときに、
じゃあ、
あなたは、
どんなインデックスを、
実装しますか、
っていうところなんですよね。
この、
18:00
スピーカー 1
B3の、
なんと、
一番の肝って、
この、
ページ数が増えても、
木の高さが、
あんまり増えない、
っていうところなんですよね。
うん。
だから、
その、
木構造じゃないですか、
基本的にはね。
スピーカー 2
はい。
スピーカー 1
例えば、
木の高さって、
あるよね。
あの、
その、
ルートのノードから、
一番下の、
あの、
ノード、
リーフノードまで、
何回たどっていくと、
あの、
一番下に、
こう、
アクセスできるか、
みたいなところで、
たどっていくことで、
あの、
4つ、
一番下の、
こう、
ノードに、
のデータを取ることができれば、
まあ、
高さが4になるわけだけど、
例えば、
この、
木の高さっていうのを、
なるべく、
少なくしたいんですよ。
ディスクに、
実装するときには。
はい。
それは、
なぜかっていうと、
ディスクに、
ランダムアクセスするって、
めちゃくちゃ遅いじゃないですか。
メモリと違って。
はい。
うん。
スピーカー 2
だから、
スピーカー 1
その、
ディスクIoが、
すごい発生する。
基本的に、
アクセスを減らしたい。
まあ、
だから、
世の中的には、
RDBMSを実装するときに、
前段に、
メモリの、
キャッシュを置いたりとか、
まあ、
なるべく、
その、
インメモリに、
オブジェクトキャッシュして、
置いたりするんですけど、
で、
まあ、
その、
ディスクを減らすために、
その、
例えば、
ページ数っていうのを、
ページ数の単位で、
データを、
ディスクに持っておくときに、
こ、
このBツリーの、
あの、
なんていうかね、
あの、
1億エントリー、
1億エントリーとか、
あったときにも、
サイズ、
マックスでも、
4回のルックアップで、
目的のデータが、
見つかるんですよ。
だから、
逆に言うと、
データベースに、
例えば、
1億個の、
データ数が、
入っているときには、
ディスクIOは、
マックスでも、
4回だけで、
目的とする、
データを、
取得することが、
できると。
はい。
うん。
っていうことで、
スピーカー 2
基本的に、
スピーカー 1
この、
この、
この、
その、
まあ、
実装もしやすい、
考え方としては、
シンプルだし、
まあ、
多分、
これの実装みたいなのも、
どんどん枯れているので、
他の新しいデータベースを、
作っても、
コピーもしやすいし、
ということで、
まあ、
なんだろう、
インデックスのキングに、
スピーカー 2
なっているんじゃないかな、
スピーカー 1
という想像はしますが。
スピーカー 2
はい。
この、
あの、
1つの、
木のサイズというか、
が、
大体、
4キロバイトでしたっけか、
マックスみたいなのが、
書いてあって、
結構、
小さいんだなっていう、
ブロックのサイズ、
だなっていうのが、
まあ、
思って、
まあ、
それで、
その4回の、
4つの深さで、
まあ、
1億レコードとか、
いけるっていうのは、
すごい良いことですよね。
かなり効率がいいんだな、
っていう風に、
スピーカー 1
思いましたけど。
うん。
で、
この、
多分、
ブロック数って、
どうだろう、
まあ、
最近だと、
まあ、
違うブロック数、
configurableだったり、
いろんなブロック数を、
試して、
まあ、
21:00
スピーカー 1
多分、
まあ、
でも、
最初は4KBが、
メインだった気がしますね。
うん。
こんな感じで、
なんか、
気になったキーワードとか、
ありますか?
他に。
スピーカー 2
うん。
なんか、
あの、
あんまり、
関係ないですけど、
まあ、
インデックスっていうのを、
なんか、
妻に説明してって、
言われたんですよ。
なんか、
その、
今日は何を話すの、
みたいな話になって、
で、
本のトップに、
その、
章立ての、
まあ、キーワードみたいなのを、
書いておけば、
そっから、
本内に飛べるよね、
っていうのを、
説明したら、
まあ、結構、
すぐに分かってくれて、
インデックスっていう、
名付け、
名前がすごい、
いいなっていうか、
まあ、
誰でも分かりやすい名前。
作品。
まあ、実物、
はい、作品っていうのが、
そのまま、
現実世界にあるので、
まあ、
いい名前だなって思いました。
スピーカー 1
うん。
確かに。
まあ、
アナロジーとしては、
分かりやすいですよね。
はい。
スピーカー 2
分かりやすいですね。
スピーカー 1
うん。
まあ、多分、
この章を、
読んでくときに、
なんだろう、
なんで、
ハッシュインデックスから、
LSMツリーみたいなのを、
発明する必要があったのか、
そして、
なんで、
その後で、
また、
Bツリーみたいなのが、
出てきたのか、
っていうのを、
理解するためには、
まあ、
そもそも、
こう、
ディスクとメモリの、
進化とか、
その、
ディスクとメモリを、
アプリケーションから、
使うときの、
違いみたいなのを、
意識すると、
まあ、
分かりやすいんじゃないかな、
とか、
思う、
かな。
うん。
スピーカー 2
確かに。
スピーカー 1
ちょっと、
スピーカー 2
あの、
さらに、
深掘るには、
実際に、
もっと、
データベースを使って、
開発しないと、
実感が、
さらに、
持てないというか、
気はするんで、
ここから、
さらに、
参考文献とか、
まあ、
見ていって、
スピーカー 1
深掘りしていきたいですね。
なんか、
一回、
ここ、ね、
浅井さんが、
キャリア的に、
よく使ってきた、
RDBMSって、
なんですか?
MySQL?
Posgre?
スピーカー 2
これは、
Posgreが、
多いですかね。
あとは、
スピーカー 1
Oracleは、
スピーカー 2
全色で、
スピーカー 1
使ってました。
ああ、
スピーカー 2
Oracleね。
スピーカー 1
Posgreが、
一番、
そうだね。
まあ、
なんか、
一つ、
データベースを、
ピックアップして、
まあ、
そこの実装を、
軽く見てみて、
スピーカー 2
まあ、
なんか、
気になったところ、
それで、
スピーカー 1
やってみたいですね。
うん。
ね。
僕は、
今、
現場でMySQL使ってるけど、
まあ、
比較してみるのが、
面白いと思いますね。
確かに。
B2Dも、
結構、
アッシュがあるので、
データ構造として。
はい。
B2D、
を元にして、
いろんな、
こう、
ちょっと改善したやつとか、
まあ、
そこら辺の言及も、
割と、
スピーカー 2
最新であったりするから、
まあ、
そこら辺、
ピックアップしていくのも、
スピーカー 1
いいよね。
24:00
スピーカー 1
なんか、
ここを読んで、
B2D、
分かった気になったんですけど、
僕も。
まあ、
本当に、
あの、
入り口でしかないので、
スピーカー 2
本当に、
スピーカー 1
データベース、
評価入って、
分かるけど。
確かに。
なんだろうね、
B2D、
知ってますってのは、
数学で言うと、
二次公定式、
知ってます、
みたいなぐらい、
分かんないけど、
いい例えかどうか、
知らんけど、
まあ、
スピーカー 2
つまり、
スピーカー 1
何も分かってない、
スピーカー 2
ということです。
はい。
スピーカー 1
ということで、
うん。
まあ、
業務にどう生きてくるか、
みたいなところで、
ちょっと話すと、
まあ、
データベースのメトリクスを、
例えば、
まあ、
浅井さん、
僕もSREとかだから、
まあ、
データベースのメトリクス、
普段読んでたり、
多分すると思うんですけど、
まあ、
ディスクとメモリの違いとか、
あとは、
内部のね、
ストレージエンジンの実際とか、
それを、
軽くでも、
メンタルモデルとして、
頭に入れておくと、
あれ、
何で、
ここがスパイクしてるんだな、
とか、
まあ、
仮説を立てるときの、
ストーリーへの理解度が、
まあ、
深まるんじゃないかな、
と思うので、
まあ、
ここは、
本当に、
まあ、
僕としては、
最初、
読んでよかったでしょうかな、
と思ってます。
スピーカー 2
チャプター3。
そうですね。
スピーカー 1
なんか、
スピーカー 2
1、
1回、
その、
自分の会社で、
何ですかね、
すごい、
クエリが遅い時が、
ま、
あったりして、
まあ、
それ、
よくよく見てみたら、
まあ、
あるので、
すごい、
基本的な問題、
解決するにも、
インデックス、
向かっていると、
まあ、
いいな、
スピーカー 1
ということは、
多いと思いますね。
ね。
まあ、
なんか、
せっかく、
いい話が出たから、
じゃあ、
例えば、
思考実験ですけど、
じゃあ、
いきなり、
する、
あの、
クエリが、
遅いって、
言われました。
浅井さんは、
じゃあ、
どっから、
見始めますか。
まず、
言われるんですよ。
スピーカー 2
ああ、
でも、
スピーカー 1
まずは、
スピーカー 2
そうですね、
結構、
最初は、
データベースの状態を、
チェックしますかね。
なんか、
CPUの利用率が、
どうかとか、
まあ、
これまで、
普通に、
速いクエリなのであれば、
データベースに、
他のが、
かかっている可能性が、
あったりするんで、
先に、
そういうとこを、
スピーカー 1
見ちゃいますね。
スピーカー 2
で、
問題なければ、
クエリ自体に、
問題がある可能性が、
あるので、
スピーカー 1
まあ、
スピーカー 2
その、
クエリを、
アナライズしてみる、
みたいな、
スピーカー 1
感じですかね。
うんうん。
じゃあ、
クエリが、
非効率だって、
スピーカー 2
なった時に、
スピーカー 1
まあ、
はい。
どうなんすかね。
インデックスが、
貼られてない、
みたいな、
処方的な、
ミスって、
どれぐらい、
あるかな。
スピーカー 2
うん。
なんか、
その、
データベースを、
移行とか、
するタイミングで、
インデックスが、
貼られてない、
スピーカー 1
みたいなことが、
27:00
スピーカー 1
あったり、
それも、
想定しない、
ユースケースだった、
スピーカー 2
ってことか。
そうですね。
とかは、
ある気がしますけど、
まあ、
徐々に気づいていく、
っていう感じですかね。
なんか、
スピーカー 1
うん。
多分。
ね。
で、
まああと、
それを逆に、
よくありがちなのは、
インデックスを覚えた、
ジュニア、
エンジニアとかが、
インデックス貼りまくる、
スピーカー 2
問題、
スピーカー 1
みたいな。
ありますね。
そして、
インデックス貼りまくって、
あの、
インデックス貼りましたよ、
って、
僕もやりました。
そうですね。
まあ、
インデックスが何か、
わかってるのか、
みたいな。
あの、
スピーカー 2
一行足すと、
スピーカー 1
食えなくなる、
魔法の杖、
みたいな。
うちでの小槌、
スピーカー 2
みたいな感じで、
使ってしまう。
うん。
スピーカー 1
まあ、
でも、
逆に、
この章を読むと、
まあ、
インデックスってのは、
裏側で、
何が起きてて、
みたいなね。
まあ、
結局、
別の、
見方が違う、
データベースを作ってるだけに、
過ぎないので、
自分は、
ありますよ、
って、
書かれてますよね。
例えば、
はい。
基本的に、
その、
元のデータベースに、
書き込んだときに、
整合性が、
あの、
壊れないように、
インデックスも、
更新しなきゃいけないじゃないですか。
で、
そのときに、
こう、
はい。
あの、
ロックを取って、
インデックスも、
更新するわけですよね。
例えば、
一つのテーブルに、
更新するときに、
インデックスが100個あると、
100個のインデックスを、
あの、
シンプルに、
ナレーで考えると、
なんで、
インデックスが多ければ、
多いほど、
その、
ライトのワークロードが、
あの、
パフォーマンスが、
デグレってくので、
デグ、
あの、
下がってくので、
インデックスは、
決して、
魔法の小槌ではないよ、
っていうのは、
まあ、
割と、
スピーカー 2
僕も初期にやらかした、
話ですね。
うん。
書き込みには、
強くないと、
インデックスは、
うん。
ですよね。
うん。
あと、
なんか、
インデックスとかに、
インデックスを貼っている例を、
見ることがあって、
うん。
タイムスタンプって、
すごい、
あの、
幅広いじゃないですか。
それに、
インデックス貼ると、
まあ、
ものすごい、
インデックスの、
ボリュームが、
でかくなっちゃう、
と思ってて、
まあ、
やっぱり、
それをするのであれば、
例えば、
日付とか、
もっと、
その、
幅が、
振れ幅が狭い、
カラムを、
持っておいて、
そこに、
インデックスを貼る、
みたいな、
どう思いますか。
スピーカー 1
うーん、
そうですね。
まあ、
一つ、
あえて、
タイムスタンプを、
貼るのが、
メイクセンスな場合、
つまり、
タイムセンス、
いわゆる、
その、
あれですよね、
あの、
せっ、
丸め込みとか、
してなくて、
まあ、
セカンドとか、
ミリセカンドまで、
入っている、
スピーカー 2
ああ、
スピーカー 1
そういうことですよね。
うん。
30:00
スピーカー 1
うーん、
例えば、
例えば、
スピーカー 2
例えば、
スピーカー 1
いや、
わかんないですね。
スピーカー 2
そうですね。
すいません。
スピーカー 1
具体的すぎて。
うーん、
そういうときが、
あるかな。
いや、
なんか、
ある、
あるとは思う。
スピーカー 2
ビジネス要件、
本当に、
スピーカー 1
いろいろだから。
スピーカー 2
ああ、
はい。
なんか、
その、
実際のクエリが、
まあ、
日付ベースで、
クエリをしているのであれば、
無駄かなって、
感じがしますけど、
まあ、
もし、
スピーカー 1
タイムスタンプベースで、
うーん、
変にしてくるときとかかな。
うーん。
ということで、
はい。
スピーカー 2
はい。
スピーカー 1
ちょっと、
パッと思いつかないので、
はい。
いきちゃいましょうか。
スピーカー 2
うん。
はい。
スピーカー 1
まあ、
チャプター3は、
こんなところかな。
じゃあ、
チャプター4行く?
スピーカー 2
行きましょう。
スピーカー 1
はい。
チャプター4は、
テーマは、
エンコーディングフォーマット、
ということで、
さっきも、
ちらっと言ったけど、
まあ、
メモリから、
ファイルに保存したり、
ネットワークを、
転送するときに、
もちろん、
バイナリー形式に、
変換する必要が、
スピーカー 2
あるんですけど、
スピーカー 1
いかに、
ネットワーク転送量を、
最適化するか、
少なくするか。
もちろん、
少なければ、
少ないほど、
いいので、
まあ、
同じ、
例えば、
ストリングとか、
同じような、
オブジェクトでも、
その、
バイナリーの、
エンコードの仕方、
どういう風に、
こう、
バイナリーで、
表現するかによって、
最適化するための、
いろんな、
こう、
プロトコルが、
ありますよ、
っていう章で、
実際に、
この、
バイナリーの、
ね、
あの、
メモリ上、
どう、
0と1とかがね、
あの、
並んでるか、
みたいなのも、
図もあり、
ながら、
一つ一つ、
紹介していくとね、
まあ、
スピーカー 2
結構、
分かりやすい、
章だったかな。
スピーカー 1
はい。
とっつきやすかったですね。
実際、
業務で、
使ったことがあるのは、
出てきた中で、
スピーカー 2
やっぱり、
なに、
GRPCとかは、
ちょっと、
あの、
運用サイドで、
触ったことあるんですけど、
まあ、
プロトコルバッファーの、
RPCですよね。
うん。
まあ、でも、
実際に、
自分が、
スキーマを書いたりしたことは、
正直、
ないですね。
JSONとか、
スピーカー 1
XMLとか、
くらいですね、
やっぱり。
あ、
逆に、
スピーカー 2
運用では、
どういったことやったんですか?
あ、
なんて、
その、
GRPCの、
まあ、
ロードバランシングが、
うまくできない、
みたいなのに、
対応とかを、
したことが、
あって、
まあ、
それ自体は、
あんまり、
型とかとは、
関係なくて、
まあ、
GRPCの、
ネットワーキング側ですかね、
どっちかっていうと、
その、
まあ、
常に、
ネットワークを、
張り続ける形なので、
ロードバランシングが、
うまくできない、
みたいなことが、
スピーカー 1
あったのを、
33:00
スピーカー 1
まあ、
対応したっていう感じですかね。
なるほど、
なるほど。
はい。
まあ、
コンパクトな、
作り方も、
いろんな、
使い方が、
あるんだけど、
まあ、
何だろう、
結構割と、
人気というか、
日本のスタートアップでも、
よく聞く印象で、
あの、
データフォーマットとしては、
この、
あの、
セルフ、
なので、
データとして完結してて、
データ自体に、
隙間を、
含まないので、
まあ、
結構、
コンパクトにも、
なりやすいし、
まあ、
Googleも開発してるし、
いろんなクライアントが、
割と、
印象ですかね
メッセージパックとかは
FluentDを使っていたので
よくそこで
メッセージパックを使うという意味じゃないですけど
普通に動いていたというか
使っていたかな裏側で
ここら辺は
どのバイナリデータフォーマットを使うかという
選択する側にはなかなか
プラットフォームエンジニアチームとか
データ基盤チームにないと思うので
複数のバイナリデータフォーマットを
比較検討して
最適なものを選ぶとか実装するという
シチュエーションに
恵まれる人はあんまりいないと思いますけど
何かしらの形で使っているという人は
ほとんどですよね
スピーカー 2
はい
ケンさんもカフカとかやってて
スピーカー 1
アブロはかなり触ったんじゃないですかね
アブロスキーマはやっぱり
スピーカー 1
使いやすいし
コンフルクラウドとかやると
アパッチカフカのマネージドサービス
使うと
多分ドキュメントとかチュートリアル読んでも
もちろんですけど
スピーカー 1
アブロどうですかみたいな感じで
押してくるので
カフカをとりあえず使ってみようみたいな人が
アブロを入れるみたいなの多い気もしますけど
でもプロトコルバッファーも
使っている例とかもあるし
スピーカー 2
そうなんですね
スピーカー 1
カフカ的にも別に
バイナリのフォーマットは何でもいいので
こういう感じかな
多分
アプリケーション
スキーマは基本必要だからね
バージョンアップグレードとか
広報互換性
の担保とかを考えるときには
何かしらのスキーマは必ず必要になってくると思うけど
なんかデータベースの本だけど
やっぱここにも触れてるってのは
割と好印象というか
逆に言うとこれのせいで
ページ数長くなってると言っちゃ言えるんですけど
最初読んだ時飛ばしたな
よく分かんなかったし
スピーカー 2
数年前に
結構それぞれのスキーマに対しての
互換性がどうなってるかっていう話を
何度か繰り返してるのですごい丁寧だなって思いつつも
逆に若干冗長な感じもありましたね
この章が
スピーカー 1
なんかこの章だけちょっと浮いてる感じがあるよね
データベースの本読んでたらいきなり
分かるんだけど
今となってはある意味が
でも
B3とかね
36:00
スピーカー 1
LSMの話読んでたらあれ次いきなり
メッセージパックと
プロトコルバッファーみたいな感じにはなるよね
スピーカー 2
うん
うん
うん
うん
スピーカー 2
うん
うん
うん
うん
うん
うん
うん
うん
うん
うん
うん
うん
うん
スピーカー 1
うん
うん
うん
うん
うん
スピーカー 2
今後もっと繋がってくるんですかね
結構今後の
章への参照があったので
スピーカー 1
うん
まあ
スピーカー 2
メッセージQとかやるときに
出てきたりとか
って感じですかね
スピーカー 1
うん
こんな感じかな
まあ
シャプター3、4
ちょっとまとめて
見ると
なんかね
まあそもそも
クエス
ディスカッショントピックですけど
ディベロッパーとして
ストレージエンジンの内部実装と
とかよくあるインデックスの特徴とかに
どれぐらい詳しくなっておく必要があるのか
あるならどこまでかっていうのは
一つこう考えるところかなと思うんだけど
採算的には何か意見とか感想ありますか
もしくはこの本を読んで
ここに対する意識が変わったとか
そもそも読んでるってことは
こう素人もって読んでるの
ところもあると思うんだけど
あー
スピーカー 2
ちょっとずれてるかもしれないですが
思ったのは
結構
設計するタイミングで
例えば実際に開発で使う
スキーマを設計する必要があるんですけども
一方でさらにその読み取りについても
考えはいけなくて
例えば今後データ
まあデータウェアハウスとかから読み取られる時に
まあ全然その
あのなんですかね
アプリケーションで使う
スキーマの方と
違う使われ方をすることがあるので
まあその辺でかなり強調して
設計していかなきゃいけないのかな
というふうには思いましたね
そのカラムとか
テーブル一つ設計するにあたっても
まあどこにインデックス貼ったら
早く読み取れるかみたいなのが
全然変わってくるので
はいっていう意味では
より他のチームとか
まあ連携した方がいいのかなと思いました
スピーカー 1
そうですね
その他のチームとかなってくると
多分よくある構成としては
なんだろう
例えばデータが増えてくると
そのデータを
分析したくなってきて
データ基盤チームみたいなのを
作ると思うんですね
データウェアハウスとか
まあオラップですね
あのトランザクションの
OLTPに対して
オラップ側を作ったときに
例えば
MySQLとかPOSGREしか
使ったことない感じで
あの
データウェアハウスから
データを取ろうとすると
基本的には
怒られるというか
データベースから怒られるというか
まあ
全然こう
仕組みが違うし
得意なことが
違うので
あの
なんだろう
そこら辺が分かってないと
なんか違うデータベースとかで
違うデータ基盤に
出会ったときに
まあ
基本的にその
データウェアハウスを作ってるとか
他のチームであることが
多いと思うんですけど
39:00
スピーカー 1
なんか
小さいワークロード
ガンガン
データウェアハウスに飛ばしたら
まあもちろん
データベースにも
必要ですように
負荷をかけてしまうんですけど
じゃあそれが何でなのかっていうのを
まあ投げる前に
自分でちゃんと知っておくとか
まあそういったところの
他のチームが持ってる
データ基盤を使うときに
最適なこう
コミュニケーションがお互いできる
みたいな
一歩にもなると思いますね
うん
まあ
なんだろう
ストレージエンジンの
詳細を調べて
例えば
自分たちで作ったり
しなきゃいけないみたいな
ことになる
企業ってなかなかない
多分それこそ
スピーカー 2
はい
スピーカー 1
Googleとか
Metaとか
あの
Amazonぐらい
スピーカー 2
そういう
スピーカー 1
の規模にならないと
そのトレードオフが
ならないというか
基本的に
スタートアップだったら
やっぱビジネス作っていくほうが
価値が高いので
そこまでやる
必要はないと思うんですけど
うん
こんな感じかな
うん確かに
スピーカー 2
必須ではない
っていう感じですかね
そのデータベースの
この詳しい
B2Aの知識とかが
まあ
あっても
必ず役に立つわけない
けど
なんか
多分トラブルとか
起きたときとか
まあ急に
必要なときとかに
あったと
あると
まあ
ありがたいというか
すぐに
開かれたときは
めちゃめちゃ出せるみたいなときは
タイミングはあるかもしれないんで
そういう意味では
ナイストハブというか
あったらいいなという感じですかね
スピーカー 1
そうだね
うん
まあなんかじゃあ
この3章4章として
読んでみて
じゃああなたの
テイクアウェイは
一番のテイクアウェイは
何ですか
スピーカー 2
えー
そうですね
まあやっぱり
スピーカー 1
まあ
スピーカー 2
データベースの
運用に関わってきたので
まあその知識を知っていたら
もっと早く解決できたなっていうことは
まあありますね
それこそインデックスの
まあ問題であるとか
まあ
ただまあ
今回その
そういういろいろ
データベースの運用をちょっと
まあ知ってから読んだので
その分なんか知識との紐づけみたいなのができて
スピーカー 1
まあそれは
スピーカー 2
それで読みやすかったと
ところもあるかな
っていうふうに思いました
あああれねみたいな
ちょっと思いながら
読んだりとかできたので
はい
それはよかったです
スピーカー 1
うん
うん
スピーカー 2
はい
ケンさんも何かありますか
スピーカー 1
いやまさに同じで
アサイさんと
スピーカー 2
はい
スピーカー 1
なんかこう
経験する前って読んでも
よく分かんないんですよね
知識として入れても
スピーカー 2
はい
スピーカー 1
でも実際に現場で
障害対応とか
自分のミスとかをしたときに
あの本に書いてた
このことだったのか
っていうふうに
知識と体験が
結びついて初めて
楽しいというか
そのときにこう
経験になるんですよね
本を読んで
そういった自分のミスとかを
42:01
スピーカー 1
予防できるかっていうと
ちょっとそこまではできないんですけど
やっぱり現場の知識とか経験って
本当にリアクティブというか
なんか
教科書で書かれてるように
綺麗に一歩ずつ経験できるわけじゃないじゃないですか
結構
いろんな種類の障害とか
いろんなデータベースに触れ合う機会っていうのが
ポンポンポンポン
なんかいきなり来たりするじゃないですか
だからなんかそういう断片的に
入ってくるんですよね
現場の知識っていうのは
それをやっぱり一回
深呼吸して
ストーリーに沿って
いろんな知識をこう
まとめる時間が必要で
僕にとってはそれが読書とか
ソースコードリーディングだったりするので
そういうのが
やっぱりそのデータベースを運用っていう観点においては
やっぱこの本読んだ時はすごい
そういう時間をくれたかな
僕に
ちょっと落ち着いて
業務データ知識を棚卸ししましょうみたいな
この本を読んだ時はアプリケーションデベロッパーだったから
広告配信システムを作ってる
なんか今こうやってアサヒさんと改めて読んでみると
今はこうデータベースを使う側から
SRE DREっていう
データベースの裏側を運用する側になってから
もう一回読み直してるので
そういう観点でも当時の気づきとの違いとか
当時気になった
当時気にかかったコンセプトと
今興味が出てるコンセプトの違いとかを見ながら
自分の趣味ってこう変わったんだなーみたいなとか
あの自分はこれぐらい成長できたなとか
自分は大して成長しないなみたいなのを
分かりながら読んでるってのは面白いかな
うん
スピーカー 2
確かに
そういうなんか
言い方が全然変わって面白いですよね
当時と2回目読むと
スピーカー 1
そうそうそう
いやー
まあでも次から本番ですよ
まだパート1これで読み終わったけど
パート2が
パート2が
分散データベース
はい
スピーカー 2
ここからさらに難しくなるんですね
スピーカー 1
次はチャプター一つずつかな多分
スピーカー 2
うん
スピーカー 1
5と6一緒にやったら1時間超えるか
多分
ポッドキャストの配信的には1個ずつがいいんだろうな
スピーカー 2
そうですね
スピーカー 1
うん
スピーカー 2
いやープレッシャーがすごいな
どんどん難しくなっていくんで
まあ頑張ります
はい
スピーカー 1
あのーじゃあ
収録前に奥さんにどうやって説明したかっていうのを
あの次も教えてください
スピーカー 2
毎回やりますかそれはい
スピーカー 1
それすごい良いトレーニングじゃない
僕もたまにやるけどさ
あの
プログラマーじゃないけど
家族とか友人に
あのコンセプト説明するって
要するにあのよくあるじゃん
猿でも分かるギットとかさ
中学生にでも分かる何々みたいな感じで
45:01
スピーカー 1
そのコンセプトの本質を
本当に掴んでるかどうかみたいになるから
結構いいですよね
アナロジー使ってみたりとか
スピーカー 2
確かに
いやでも確かに聞いてくれて良かったなって僕も思いましたね
なんか自分の理解も深まるというか
はい
まあ確かにみたいなことも多かったので
次回もやってみます
じゃあ
それをね
スピーカー 1
例えば合意のコンセンサスアルゴリズムもするときにさ
クォーラムって何みたいなの言われたときに
クォーラムを
あの
非プログラマーの自分のパートナーに
こう説明できると
いいと思います
とか色々そういうコンセプト出てくると思うからね
スピーカー 2
そうですね
確かに
大事ですよね
実際そういうのを
非エンジニアに説明する機会っていうのも
必ずどっかであると思うんで
そういうトレーニングは大事ですね
スピーカー 1
なんかこれも次のディスカッショントピックの一つとしてもいいかもね
この本を読んであなたが考えついた最高のアナロジーを
スピーカー 2
お互い一つずつ紹介するっていう
確かに
あーそれいいっすね
テーマとしては
スピーカー 1
忘れないで書いといて
そしたら僕も頑張って思いつくので
スピーカー 2
はいアナロジー
スピーカー 1
はいアナロジー
はい
はいじゃあ今日はこんなところかな
どうですか
スピーカー 2
ありがとうございました
はい
スピーカー 1
まだ
最後まで読んでいけそうですか
スピーカー 2
いけます
スピーカー 1
よし
じゃあ次はチャプター5やっていきましょう
じゃあ今日はこれぐらいで
お疲れ様でした
スピーカー 2
はいありがとうございました
スピーカー 1
ありがとうございました
46:39

コメント

スクロール