Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベースの雑な話 in 栃木ゆるIT勉強会@小山

Origamium
January 17, 2025

データベースの雑な話 in 栃木ゆるIT勉強会@小山

Origamium

January 17, 2025
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 • アークリスプ / 尾上折紙(おのうえ おりがみ) ◦ 本名ではない ▪ あらゆるサービスに偽名で登録している

    ◦ Lisperだった時期がありそのような名前になった ◦ arcというlisp方言があって… ◦ Twitterの名前はコロコロ変わる • React+TypeScriptでフロントエンドエンジニアをやっている ◦ 現職ではPHPも書いている ▪ むしろこっちがメインでは???? ◦ rustたまに書くけど難しい • 転職をポンポンしてたら経歴が汚れまくって書類面接で落ちまくるようになりかなり ヘコむ
  2. DBの話 • DBにはいろいろあるが、雑に3個に大別される ◦ RDBMS ▪ MySQL、PostgreSQL、SQLiteとか ▪ いわゆる普通のデータベースシステム ◦

    NoSQL ▪ DynamoDB、MongoDB、Redisとか ▪ 水平にスケールしやすいがクセが強い事が多い ◦ NewSQL ▪ AWS Aurora、GCP Spanner ▪ 業務などの実運用で RDBMSのようなものを使いたいとなると候補に上がりやすい • Aurora MySQLとAurora PostgreSQLはそれぞれ「互換」というだけで中身は別物
  3. データの読み書きはものすごく遅い • HDDへのアクセス時間は10~20msぐらいかかる • SSDでも100~200μsぐらい • メインメモリなら100ns ◦ つまりメモリにないものを HDDから読み込もうとするとアクセスするだ

    けで10万倍の時間がかかる ◦ SSDならかなりマシになるとはいえそれでも遅い • もっと言えばL1 cacheは1.33~4nsぐらい • ということでストレージへのアクセスの遅さを隠蔽したい ms: 10^-3秒 μs: 10^-6秒 ns: 10^-9秒
  4. キャッシュの方法 • OSに任せる ◦ OSの違いやバージョンによってキャッシュの仕方が全然違くて挙動が変わると言ったことが起こり 得る ◦ 大半のシステムならこれでいいが、 DBにおいては不都合 •

    自分で実装する ◦ すべてを管理できる ◦ 最適なアルゴリズムを選択できる ◦ メモリの位置などの調節も可能(アラインメント) ▪ アラインメントは結構大事で、読み込みたいデータがメモリ上でデータが連続しているのが理 想的 ▪ 断片化しているとプロセッサはメモリに複数回問い合わせないといけなくなる
  5. キャッシュの方法 • LRU (Least Recently Used) ◦ いろいろなRDBMSが採用している ◦ 最近もっとも使用されてない値を捨てる

    (evictionする)方式 ◦ 実装は多種多様で、それぞれの DBでどのように実装されているかがかなり異なる ▪ ほとんどLRUと名乗っているだけで実質亜種みたいな感じになってる ◦ MySQLの実装例を紹介します • 他にも色々あるがあとで紹介します
  6. まとめ • ここまで紹介したものはかなりざっくりした解説 • 小さな実装では複雑にはならないが… ◦ →実際はもっとややこしいことになっている • 実際にはストレージの故障に備えてバックアップをすることや、ログの保存もやる ◦

    マルチスレッド化でLRUなどのキャッシュまわりは大胆に複雑になる ◦ 分散ストレージを採用すれば … ◦ 分散合意アルゴリズム (Paxos, Raftなど)… ◦ クラスター化… ◦ 沼
  7. ここ小山市でシェアハウスやる(宣伝タイム) • 小山駅徒歩8分(Google Maps調べ) • 音響設備がなぜか整っている ◦ アンプだけで100万円ぐらいぶっこんだ ◦ 簡易Dolby

    Atmos環境 ◦ 将来的には音響部屋にスピーカーを 16台設置するつもり • 現行のゲーム機全部ある ◦ PS5 Proも導入しました • 家賃4万円前後 ◦ ギーク割で5000円安くなる https://geekhouseoyama.vercel.app/
  8. 参考文献 • MySQL docs - https://dev.mysql.com/ • PostgreSQLの新しいバッファ戦略 - https://www.postgresql.jp/sites/default/files/2016-12/20040510143054.tanida_

    buffering_040511-1.pdf • 計算の高速化のために必要なこと:メモリの観点 - https://qiita.com/zacky1972/items/25e8157a7593398c9730 • 詳説 データベース - ストレージエンジンと分散データシステムの仕組み(オライリー ・ジャパン) ◦ 画像の引用をさせていただきました • AWSとGCPのドキュメンテーション