📊

Flat File Strawman を mojoで書いてみる

2024/12/06に公開

概要

この記事の対象者:
データベースやDBMSに興味を持つ初学者

この記事の内容:
データベースの基本概念、発展、リレーショナルモデルと、Mojoを用いたDBMS

この記事を読んでわかること:
データベースの基本的な仕組みと歴史的な発展過程がなんとなくわかる

序説

突然自作DBMSを作りたいなー。
と思い、いろいろ調べた結果どうやらCMUのDB講座がおすすめという人が多いことが判明しました。

内容が高い質にも関わらず、講座が無料で公開されています(有り難し!)

https://15445.courses.cs.cmu.edu/fall2018/slides/01-introduction.pdf

https://www.youtube.com/watch?v=vyVGm_2iFwU&list=PLSE8ODhjZXja3hgmuwhf89qboV1kOxMx7&index=3

この講座のまとめをしてみたいと思います。

DB第1回講座まとめ

DB

まず、DBとはなんなのでしょうか?
この講座では以下のように定義されていました

ある側面の現実世界をモデル化した相互関連的なデータの組織的な集合体
多くのコンピュータアプリケーションの中核を担うもの

こう言葉にされると難しい気もしますが、
例としてデジタル音楽ストアの歌手やアルバムをモデリング化したものや、
飛行機の席や搭乗者情報をモデル化したものなど身近にあります。
なんかお互いに関係するデータをあるフォーマットでまとめたものという感じです、、、

Flat File Strawman

さっきのDBをどうやって作るかなんですが、
原始的な方法として何かファイルにデータを書き込み、読み込みするという方法があります。
csv、jsonのようなファイルをFlat Fileと呼び、このプロットタイプ的な仮のDB実装として
Flat File Strawmanと呼びます。
簡易なので小さなデータに対しては簡単に取り扱うことができます

一方でデータ量が多くなると1回1回書き込みや、検索すると時間がかかります。
さらに実装も複雑になりデータの信頼性も落ちてしまう欠点があります。

DBMS

Flat Fileだけではいろいろ問題があり先人たちはDBMSを使って問題を解決しようとしました。

DBMSとはなんぞやといいますと、講座では以下のように紹介されていました。

DB上の情報を保存や分析が可能なソフトウェアのこと
汎用的なDBMSは、あるモデルに従ってデータの定義、作成、問い合わせ、更新、管理が行える設計になっている

DBとDBMSがごっちゃになりますが、DBはデータの集合体で、DBMSはDBを扱うサービスという感じです。
ただ、DBMSに問題点があって構築・保守が大変だよねという話が1970年までありました。
そこにTed Codd氏が現れ、リレーショナルモデル使えば解決できるんじゃねと言いました。

Relational Model

Relational Modelとはなんでしょうか?
この講座では以下のように定義されていました

Structure(構造): リレーションおよびその内容の定義
リレーションとは、エンティティを表現する属性と関係を含む順序の無い集合
リレーションが持つ属性とその属性が保持できる値
Integrity(整合性): DBの内容が制約を満たしていることを確認する
日付属性は数字でなければならない
Manipulation(操作): DBの内容にアクセスし、変更すること

自分なりに解釈すると、
リレーション、つまり関係を表すモデルです。
よくエクセルなど2次元の表で表されているイメージです。
論理層と物理層で苦労しているので、ちゃんとルールを決めをしている感じです。

Relational Modelを扱う方法として関係代数があります。
関係代数(Relational Algebra)とは、
関係中のタプルを取り出し、操作するための基本的な操作の集合のことです。
ここからSQL文の元になったと考えると感慨深いです

脱線

CMUの課題も見ていたのですが、結構分量が多いなと思いました。
毎週のホームワーク(SQL作成)に、中間テスト、期末テスト、
そしてDBMSを作るプロジェクトがあるという。。。
大学でDBMSを作る機会があるのが羨ましいし、こうやって同世代の人は勉強しているんだと思うと自分も負けてられないという気持ちにもなりました。

難しいことは置いておいて
やっぱり自分でDBMSを作りたいわけじゃないですか!
(translate: I want to create DBMS!)

講座ではFlat File は大量のデータではよくないという話がありましたが、
簡単にできそうなので作ってみました

https://github.com/tyukei/mojo-db

DBMSを作る時、高速な言語の方がいいじゃないですか
GOで書かれている言語が多いようですが、
Pythonより何千倍速いMojoを使ってみました。
https://zenn.dev/churadata/articles/ad7e1af87a26a2

CLIで操作をし、CREATE TABLE, INSERT で直接データをcsvファイルに書き込みました。
そしてSELECTでcsvファイルを読み込むという手順で実装しました

これをDBMSと言っていいのか分からないですが、
この講座での定義はDB上の情報を保存や分析が可能なソフトウェアなので一応クリアしているかなと思います。

結言

これで、やっと1960年代のDBMSに追いつきました!
次は1970年代のDBMSに追いつけるよう頑張るぞー!!

ちゅらデータ株式会社

Discussion