永続性という言葉

  • 自分用まとめ。新しいことを覚え次第追記していく予定

気になった理由

Python MVCフレームワークのドキュメントで度々"persistence", "永続性"という言葉が出てくる。私のフィールドがかすってなかったからか、勉強不足からか、この単語を知らなかった。

予想

ハードウェア寄りの考え方だと、プログラム(プロセス)の終了、あるいは電源断があってもデータが保持されること。

実際

上記は永続性ストレージのことのみを指している。コンピュータにおける永続性はもっとたくさんのフィールドで使われ、意味も異なる。

永続性 - Wikipedia

Wikipediaより、

OS

直行永続性

  • 中断して立ち上げ直しても前回状態からプログラムが再開される。

DB

クラッシュしても進捗が保持されているような設定を指すことがある。

データ

CRUD

  • "データ完全性"を保つための機能を永続性と呼ぶこともある。CRUDはそのひとつである。

永続データ構造

  • 変更の差分を持つ。単に書き換えるのではなく、変更を追加する。片方向連結リストなど

ストレージ

永続性記憶装置

  • 不揮発性メモリ、HDDなど。RAMは含まない。


このように、様々な分野で異なった固有名詞のように使われている。persistenceというごく一般的な言葉を使用して仕様書に書いていたところを、翻訳する時点で固有名詞的に扱ってしまった例もありそうな気がする。

Pythonを例にした、プログラミングにおいての永続性

Pythonでの永続性管理

単にメモリ上にあるだけでは、永続性があるとはいえない。

  • プログラムの進行と無関係にデータを保持したい
  • 中断後も前回のデータを引き継ぎたい
  • 他のプログラムとデータを共有したい

このような場合は永続性のある保持の仕方が必要になる。

Pythonの場合は、メモリ上のデータ=オブジェクトを保存するためにPickleというモジュールを使う。保存用バイト列に変換することをシリアライズと呼ぶ。

保存先はファイルでもいいし、ネットワーク上やDBにもできそうだ。

PyramidなどのMVCフレームワークで永続性と言った時

もちろん、MVCには大抵DBを使う。プログラム進行とデータの加工が別々に進行していくから、メモリ上のオブジェクトだけでは対応できない。

Railsだとデフォルトでsqliteだし、PHPMVCフレームワークCodeIgniterは他所に設置したMySQLなどに接続して使う。

しかしMVCだからといってSQLの使えるRDBMSが必須かというとそういうわけでもない。外部APIの操作しかしないから、自前のDBは不要という場合さえある。

そこでPython界隈のドキュメントではいくつか選択肢を提示してくれるようだ。

https://wiki.python.org/moin/PersistenceTools

例えばPyramidのドキュメントでは、データ保存先として

  • 永続性不要
  • SQLAlchemy(ORM)
  • ZODB(ODBMS)

を挙げている。

Railsオールインワンで、取り敢えずgemデフォルトにして動いたものだけど、Python的な文化だときちんと必要なアーキテクチャを理解して必要なモジュールを取り入れるような傾向があるような気がした。いやもちろん他のフレームワークでもそういう考え必要なんだけど。