🐶

データ保持について[RAM][オフラインDB][オンラインDB]

2021/06/09に公開

概要

部下に、ソフトウェア開発にて考えるデータ保持方法を説明したときの備忘録。自分のソフトウェア開発における知識は独学なので、一般的なことはよく分からないですが、一応「組込み系」「Web系」のシステム開発をした経験よりまとめます。

ここで、データ保持方法はざっくり以下の3つで分けます。

  • RAM:ソフトウェアにおいて変数宣言されてる情報。揮発性なのでソフトウェアを終了されると情報は失われる。ここでは内部RAMのことを指すこととします。
  • オフラインDB:都合上このように表現しています。RAMと同一のデバイス(または、それに物理的に接続されているデバイス)に保存される情報。デバイスとしてはROMやHDDなどに保存されるもの。形式はテキストファイルだったり、SQLiteを利用した軽量なDBファイルだったりする。不揮発性なので、情報は永続化する。
  • オンラインDB:いわゆるサーバに保存される情報。WANを介してデバイスと繋がるリソース。一般的にはMyAQLなどのRDBMSを指す。最近はNoSQLDB(MongoDBやFirestoreなど)もある。設定次第ではデータ保存期間を設定できますが、基本的に不揮発性なので、情報は永続化する。

観点

今回は以下のような観点で記します。他にも色々考えることはあると思いますが、ひとまずこんなもので。

  • データ永続性
  • アクセス速度
  • 権限
  • 接続数
  • 費用

データ永続性

ソフトウェア終了時にデータが残っているかどうかです。RAM以外はソフトウェアが終了しても、適切に書き込みしていれば、データは消えません。インスタントなプログラム(1、2回正しく動けば良いようなプログラム)だったり、結果が一行程度で表現できてターミナルに表示するだけで良い場合は永続性を考える必要はないと思います。

アクセス速度

データへのアクセス速度はRAM > オフラインDB > オンラインDBという関係があります(想像しやすいと思います)。RAMはすでに情報が展開されている状態です。オンラインDBはそもそもデバイス外に対して通信しなければならないので、オフラインDBよりも情報取得に時間がかかります。このため、GUI周りは可能な限りRAMの情報を参照するようにするのが良いと思うので、たとえばデータを追加する際においても、常にGUIに移すようなデータはバッファーを用意すると良いと思います。

権限

この中で、RAM以外は基本的に読み書きの権限が必要だと考えた方がいいです。RAMに関してはソフトウェアに割り当てられた領域設定を気を付ける必要がありますが、それ以外はソフトウェア中で宣言するフラグ状態以外、制限されることはありません。もっと言えば、外部RAMを使用する場合はチップセレクトの設定をしないといけないので、これも権限のうちだと考えるとデバイスの接続によります。

接続数

オンラインDB以外は他のでデバイスからアクセスは基本的にできないと考えると良いと思います。基本的に複数のデバイスからアクセスを受け付けるデバイスは少ない方が良いと考えます。これはマスターデータとなるものを誰が保持しているかを分かりやすくするためです。ファイアウォール設定をすれば、他からアクセス可能ですが、サーバープログラム以外では必要がないようにした方が良いと思います。

費用

これは、オンラインDBにのみ関わりますが、WANを通して用意されたオンラインDBにアクセスする際には通信費が発生します。データを永続・ソフトウェア使用者が一人だけであればオフラインDBを施用した方が良いと思います。オフラインにおいてもライセンスが必要なソフトウェアを採用している場合は費用が発生します。

おわりに

一応ここで記述されることは参考程度に考えておいてください。要するところ、どれか1つを選択するのではなくて、機能・場合によって適宜データを保持する箇所を決めてからソフトウェア作成するということです。

自分の場合は以下のような使い分けをすることが多いです。

  • システム規模が大きい場合は、オンラインDBを利用すると思うので、基本的にはオフラインDBはオンラインDBにアクセスするためのアクセストークンの保持でしか使用しない。システムにログイン時はRAMとオンラインDBの整合性をとる。
  • 限定されたデバイスでのみ使用し、データを永続化させたいソフトウェアの場合はオフラインDBを使用する。こちらも基本的に使用時にはRAMに必要なデータを展開するようにする。
  • 比較的短い期間でしか使用せず、実行結果においても永続させる必要がないソフトウェアの場合は、オフラインDB・オンラインDBどちらも使用しない。実行結果が大量のデータの場合は、csvファイル等のオフラインDBを使用する。

Discussion