昔の話０１：ファイルデータベース

昔、こんなのをあったなと思いがら最近がこんなの考えなくてもよくなったな〜〜と思われる内容を書いてみました。

# ファイルデータベース
「ファイルデータベース」って何？と思われる方も多いと思いますが、データーの保存をOracleやMysql等DBAではなくてファイルに保存する物を意味します。

正式な名前なのかただ自分達が使っただけの用語なのかは現在では分かりません。尚20年くらいの前の記憶なので少し間違えているところもあるかと思います。

## 背景
昔いMysqlがまだ出てない時期に一般的に使用しているDBAとして、Oracleがあってそれ以外には大学とかで研修とかはしていたかとは思いますが無料のDBシステムがなかった時期が有りました。
![スクリーンショット 2020-11-20 17.00.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/9f57bdfd-5136-ea57-ad27-fc52c3e1af7a.png)

### ファイルデータベースを使った理由
自分が考えている当時にこのような物を使用しないと行けなかった理由をまとめてみました。
・DBAはOracleくらいしかなくなかった
・Oracleは大規模のシステム（ハードウェア的）が必要
・OracleはUnixからやっとLinuxにインストール出来るようになったが不安定だった
・Oracleは会社で使用するためのライセンス料が高かった
・研究中のDBA等はあったと言え、小規模で使用できるDBAがなかった

学生の時はOracleを使うのが出来ず、入社して最初にOracle７をLinuxにインストールをしました。Unix(Solaris)のみだったのがLinuxにもインストール出来るようになったのですが、インストール時にエラーが多くて一回でもエラーが出たら最初からした方が良いとの時代でした。それで最初のインストールでデータセンターに入って１０時間くらい掛かった記憶が有ります。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/00f05ce3-e4b1-2d0c-aca1-e1267dff6d00.png)

勿論当時（２０年前）のサーバーと言ってもメモリが１２８Mか５１２Mくらいの時代でしたので恐らく大規模スペックが必要だったのをLinuxに入れようとしたのが原因かと今は思います。

Mysqlが無料で使えるLinuxのOSベースから製品化される間にODBCを利用してExcelに保存したりもしましたが、それも登場してない時の物になります。

## ファイルデータベースの話

### 使用したサービス
![355.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/62c0bd1b-388f-82ec-730d-c23857d5bcd2.png)

ウェブでは次第的に静的なHTMLからヤットCGI（Perl)を利用して動的にHtmlを発行する時だったので、電子掲示板（BBS）な物が多かったです。それ以外にもCRM等も有りましたが、Folderの構成を含めてファイルシステムを利用するために凄く大量のデーターを消化するシステムでは利用出来なかったのです。

### ファイルシステムでの弱点
ファイルシステムを利用するための起きる色んな問題が有りました。
![light-bulb-4989145__340.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/3f4e1763-b099-e910-e94f-e093b8345e84.jpeg)

#### # 当時に接続が出来ない
一人のユーザーやThreadがファイルにアクセスすると他の人やThreadがハードウェア的な権限で書き込みや場合によっては読み込みも出来なかったのです。

#### # ハードウェアによる速度の差
ハードディスク（HDDしかない時代）の読み込み速度や書き込み速度が重要になり、その差も大きいかったです。SCSIのBUSを利用するメインボードやHDDが当時速度が早くて値段も1.5倍か２倍も高かったです。

学生の時は大量のデーター用でまだカーセットテープ使う人もいたのでランダムアクセスが出来ないものはその分制約が掛かりました。

#### # ファイル次第のセキュリティー対応するのが混乱
DBAとは違いファイルシステムに接続出来ればファイルの中身が見えるので、セキュリティーの対応が難しかったです。テキスト形式以外方法や暗号化してやれば出来ると思いますが、その分遅くなるしハイスペックが必要になりました。

#### # インデックスが出来ない
DBAで言うインデックスがないので、何かしらの検索の場合はファイルの中身を全部検索したりしないと行けないです。

#### # ソートの混乱
基本的にファイルの書き込み準で表示するしかなく、それを実装で何とか使用とするとメモリーの問題とかでサーバーが落ちたりしました。

#### # データーの老化
今は受命が長くなったとしても記憶媒体の中でHDDは凄く短い方だと思います。当時は品質が今よりも悪かったのでとにかくBadセクターが発生してそのファイルが全部使えなくなる障害が多かったと覚えております。

上記以外にも色々あったと思います。

### 対応
基本的には実装で何とかするかハードウェア的に実装しても無理な場合は諦めるかです。
![office-workspace-workplace-computer.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/6c5881df-0d11-2a72-6ddc-5b4548448c79.jpeg)

#### 同時アクセスの問題
基本的に同じファイルへ接続するのが問題なところなのでファイル次第を分けるアイデアです。例えば、社員番号でディレクトリを作りその中に基本情報ファイルと経歴情報ファイルを分ける感じですね。勿論同時に同じ社員の同じ情報をアクセスする場合は問題が出ますけど。

勿論ファイルを分けた分HDDのアームはもっと忙しくなり速度は遅くなると考えられます。

#### 検索の問題
これは現在のDBAと同じイメージですね。既に検索用のインデックスファイルを作成して起きます。重要キーワードとデーターが入っているファイルの情報を紐つけて置く方法ですね。今、使うタグ的なイメージですかね。

それ以外にファイルのアクセスとしてシーケンシャルアクセスとランダムアクセスや、シーケンシャルサーチ(Sequential Search)と**バイナリサーチ(Binary Search)**のような検索方法とかと考えられた覚えが有ります。

バイナリサーチ(Binary Search)はJavaでMapの動きをカスタマイズした時使った覚えも有りますね。面白かった〜〜。

#### ソートの問題
電子掲示板を例えるとよく使うソート準でファイルの中身を構成するのが一般的でした。複数のソートが必要な場合はその分のファイルやインデックスファイルを良いして利用しました。

## とにかく
DBA最高！！Mysqlありがとう！！