TypeScriptで簡易DBを作っ
てみた
yasuaki640
自己紹介
- 名前
- yasuaki640
- 仕事
- Backend engineer
- 趣味
- ドラム
- ラーメン
- プログレメタル
突然ですが、最近の業務について悩み
- 言語の知識だけで対処できないタスクが増えてきた、、、
- Docker環境構築
- CI構築
- ライブラリの環境依存バグ、、、
現状打破するためOSや低レイヤーについて取り組む
- 「Let's Build a Simple Database」
- Cで超簡易なSQLite的DBを実装するチュートリアル
- userテーブルへのinsert、selectのみ
取り組んでみたものの、、
- 写経したけど理解できてない気が、、
- せっかくだし業務で触ってるTypeScriptで再実装できないか?
具体的な実装について
- JSの組み込みオブジェクトを使用
- ArrayBufferで任意のバイト「配列」をメモリとして扱う
- ファイルに永続化
- 生成したバイト列をファイルに書き込み
- キャッシュ機構
- ページ(≒データ)が要求されて初めてファイルから取得
- ここで、B treeは実装しない
- 元ネタも途中で力尽きている、、、
気づき・学び
- 知っているだけの知識を実際に実装し、仕組みを感じる?ことができた
- デマンドページング、ファイルベースDB
- ライブラリは膨大な処理を肩代わりしてくれている
- REPLの実装めんどくさい、、
- SQLの解析めんどくさい、、
- 他言語の移植の学習効果
- 写経と違って元ネタのコードを精緻に理解する必要がある
業務にどんな良い影響があったか
- JS, TSのコーディングの速度が上がった(体感
- 文法や便利apiを知り、実際に使えた(体感
- DBの裏側の処理をほんの少しだけ覗き、問題が発生しているときに推測する
手がかりが増えた
- ページフォールトが起きるとデータをファイルから読み込むから処理が遅くなるんだなあと
か、そんなレベル
おすすめのネタ集め方法
- TwitterのTL, Zennのトレンド記事
- 無料の教材で手軽なものは多い
- zenn
- 本
- 教材紹介系の記事
- 英語のOSS教材
- ミニマムなものが多くおすすめ
- 時間と気合があれば市販の書籍
<- まだやれてない
取り組む上での注意点
- 自分の場合)業務から離れすぎる分野だとモチベーションが湧きづらい
- 自分の業務内容とからめる
- 今使ってる言語に再実装する
- 使ってるFWの実装をソースリーディングしてみる
- 業務でわからないこと起点でネタを探す
- 小さく始める
- 1ヶ月あったら読み切れそうなやつ
- 苦痛に感じたら一旦別の低難度の教材で基礎固め
- ちょっと簡単すぎたかな、、?ってやつがちょうど良かったりする
最後に
- 低レイヤー、ライブラリの自作等は学びが多い
- もしよければ一緒にやりませんか?
- そして僕より詳しい人教えて下さい!
ご清聴ありがとうございました