Databaseの役割

  • By melted-soy-source
  • 28
  • 9 min read

これは Databaseの実装を学ぶ の記事です

 細かい実装に入る前に、まずはDBが実現する目標について整理をまずしてみる。実際に製品や開発において、どのようにDBが利用されるのか?

1. 永続性

 DBの大きな役割の第一、永続性。要はパソコンの電源を切っても、データがなくならないようにするってこと。

DBの永続性

 この機能の実現の為に、DBではレコードと呼ばれる単位で、データをファイルに保存する。イメージとしては、csvExcelの一行がレコードに対応する。

レコード

 例えば、出席管理を行うDBを考えてみる。必要そうな項目としては、

  1. 名前
  2. 出席しているかのチェック

があれば十分だろう。これをDBに保存すると、

name, is_present
山田太郎, true
山田次郎, false

といったテーブル形式で保存される。
この 山田太郎, trueのような各行が、レコード。

 実際のDBでは文字列形式ではなく、もっと密度の高い方法で保存を行う。具体的には、バイト配列として格納する。ここら辺の実装は、今後の回で深入りするハズ。
 何はともあれ、DBはレコード単位でファイルへの保存を行い、永続化をする。

2. マルチユーザアクセス

 さてDBを使う場合は、みんなでデータを使いまわしたい。データをシェアできる必要がある。 複数人でシェアできないと、折角保存したデータが他で利用できない。Youtubeの動画にしろ、Xのポストにしろ、保存されたデータがシェアできないとサービスが作れない!

 ということで、マルチユーザのアクセスを実装しないといけない。具体的には、 並行アクセス を実装することになる。並列じゃないよ、並行だよ。つまり、タイムシェアリング的にアクセスできるユーザを、交通整理してあげる形。

3. データの正確な保持

 おそらく一般的に、 完全性 と呼ばれるもの。なんかの拍子でDBがクラッシュしたり、PCの電源が落ちてしまったり。そんな時にデータを復旧できるようなシステムが、DBには求められる。

 これは、ログによって担保される。DBが本来保持するデータとは別で、DBで実行された操作を記録しておく。これを使って、クラッシュするまでの操作をなぞるようにすれば、ある程度のデータ復旧を行うことができる。

4. 大規模なデータの管理

 DBでは、 非常に大規模なデータを扱うことになる。 数GBの小さなものから、数百TBまで。沢山のデータを保持しておく必要がある。しかも、読み書きはなるべく高速に行うのが理想。

 ここで重要になってくるのが、 メモリの管理。 アクセスの高速性を実現させるには、 メモリ(RAM)で読み書きを済ませる必要がある。 ここら辺の細かい話は、実装するときに深める。
 気になる人は、以下の参考文献が参考になると思う。まぁ、後でブログでも触れるけどね。

キャッシュ(Wikipedia)

5. 可用性

 DBは使いやすくないといけない。つまり簡単にデータを、読み書きできる必要がある。ここで出てくるのが、 SQL。 DBに対するクエリ言語で、これでデータを操作できるようにしてあげる必要がある。(SQL自体が簡単かどうかは......? これはこれで奥が深い)
 あとは、特定の言語に対するAPIなんかもこれにあたる。要は、アクセスする方法を作って上げないと、他のプログラムにDBの処理を埋め込めないということ。

SimpleDB

 さてこれらが、どのように実装されているかを、実装を通してみる。そのために、"Database Design and Implementation - Second Edition"では、SimpleDBというオリジナルのDBを作成する。

 並行アクセスと最低限の読み書きを備えたDBになっていて、教科書内ではJavaで開発されている。まずは、教科書に則りJavaで。できれば、改めて他言語で構築できればいいな。そうすることで、アルゴリズムのコアの部分を我が物にできるはず。

まとめ

 今回は本格的な実装に入る前に、DBの要件やこれから実装する内容の整理を行った。

  1. 永続性 : データを長期間保持する
  2. マルチユーザアクセス : データアクセスを並行化。交通整理を行う
  3. データの正確な保持 : トラブルがあっても、データを復旧できる仕組み
  4. 大規模なデータの管理 : メモリの有効活用で、アクセスの高速化
  5. 可用性 : SQLやAPIを提供し、システムに組み込めるようにする

 教科書を通して、SimpleDBの開発を行い、DBの5つの性質がどのように実装されているのか学んでいく予定。

参考文献

書名Database Design and Implementation - Second Edition
著者Edward Sciore
出版社Springer
リンクhttps://link.springer.com/book/10.1007/978-3-030-33836-7

書影