[pgsql-jp: 30590] Re: 画像データベースの作成。

moto kawasaki kawasaki @ kawasaki3.org
2003年 7月 25日 (金) 10:28:23 JST


From: Jun Kitamura <kitamura @ zoozee.jp>
Subject: [pgsql-jp: 30588] Re: 画像データベースの作成。
Date: Fri, 25 Jul 2003 02:47:18 +0900
Message-ID: <20030725020742.C598.KITAMURA @ zoozee.jp>

kitamura> > トランザクション処理中に、トランザクション管理からはみ出してしまう
kitamura> > ようなデータ処理を行なってしまうと、本質的にデータの紛失や矛盾等を
kitamura> > 許容しなければならなくなってしまいますので、

kitamura> 保存場所(ファイル名含む)だけを PostgreSQL に格納して、実体は
kitamura> ファイルシステムに保管されている、という場合、以下の2パター
kitamura> ンあります。
kitamura> /tmp/xxxx.jpg を /img/xxxx.jpg にコピーし、/tmp/xxxx.jpg は
kitamura> 削除するものとします。
kitamura> 
kitamura> A.実行型プログラムで処理する場合
kitamura>  トランザクション(T1)開始
kitamura>   /tmp/xxx.jpg を /img/xxxx.jpg にコピー
kitamura>   →NG の場合は T1 ロールバック
kitamura>   RDBMS のトランザクション(T2)開始
kitamura>    ・DB に /img/xxxx.jpg をインサート
kitamura>     →NG の場合は T2 ロールバック
kitamura>    ・その他の DB 処理
kitamura>     →NG の場合は T2 ロールバック
kitamura>   T2 COMMIT
kitamura>   /tmp/xxxx.jpg を削除
kitamura>  T1 COMMIT
kitamura>  T1 ロールバックは、/img/xxxx.jpg を削除します(プログラム内
kitamura> にそういうルーチンを作成してあることを意味します)。

このシナリオ A で、T2 実行中にトランザクションとは別のプログラムが
/tmp/xxxx.jpg and/or /img/xxxx.jpg を削除してしまったらまずいですよね。
もちろん、そういうことのないようにファイルやディレクトリの permission を
適切に設定しておくその他なのだとは思いますが。

青山さんのご指摘は、jpg ファイルの管理は OS が支配しているので、DBMS は
当該ファイルの有無を管理できない点を強調しているのではないかと思います。

そういう意味で、(回避策はあるものの)「本質的にデータの紛失や矛盾等を許容」せ
ざるを得ないのでしょう。

そこで質問なんですが、僕がこのシナリオでシステムを作るとすれば、上記のように
permission で防護するくらいしかしないと思うのですが、もっと良い方法が
あるのでしょうか?

moto kawasaki <kawasaki @ kawasaki3.org>




pgsql-jp メーリングリストの案内