Landscape トップページ | < 前の日 2003-10-09 2003-10-10 次の日 2003-10-11 >


* Postgres の MVCC とトランザクション

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Postgres]

Postgres は MVCC というシステムを採用している。
MVCC は多版方式 (多版型同時実行制御 (Multiversion Concurrency Control) MVCC) の頭文字。
MVCC の特徴は、トランザクションはスナップショットを参照する、という点だ。

Chapter 9. 同時実行制御 PostgreSQL 7.3.4 ユーザガイド
http://www.postgresql.jp/document/pg734doc/user/mvcc.html

9.4. アプリケーションレベルでのデータの一貫性チェック PostgreSQL 7.3.4 ユーザガイド
http://www.postgresql.jp/document/pg734doc/user/applevel-con ...

- 実験

-- まず2つのトランザクションを SERIALIZABLE で開始する。
T1: BEGIN TRANSACTION;
T1: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
T2: BEGIN TRANSACTION;
T2: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

-- まず T1 が一行 INSERT し、行数を取得する。
T1: INSERT INTO test (time_str) VALUES (CURRENT_TIMESTAMP);
T1: SELECT count(*) FROM test;

-- 次に、T2 が全行を削除してしまう。
-- SELIALIZABLE なので、MVCC を採用していないシステムでは、
-- ここで T2 が待たされるが、Postgres では待ちが発生しない。
T2: DELETE FROM test;
-- T2 の count の結果は当然 0 になる。
T2: SELECT count(*) FROM test;

-- T1、T2ともに問題なく COMMIT できてしまう。
T1: COMMIT;
T2: COMMIT;

さて、トランザクションが終わったあとに count はいくつになるだろうか?
T2 が DELETE で全行を削除したので、答えは0と思うかもしれないが、正解は1だ。
T2 が DELETE によって削除したのは、テーブルの全行であるが、
そのテーブルの内容は T2 のトランザクションが開始した時点のものである。
そのため、トランザクション開始後に T1 によって INSERT された行は削除されない。
結果、1行だけ残る。
MVCC を採用していないデータベースでは、SERIALIZABLE であれば 0 行となるだろう。

「これでは SERIALIZABLE の意味がない」と思うかもしれないが、
SERIALIZABLE の仕様としてはこれで正しいようだ。
もちろん、同じ行を同時に更新や削除しようとした場合には、
SERIALIZABLE を維持できなくなるため、
ERROR:  Can't serialize access due to concurrent update
のエラーとなる。ちなみに、最近のバージョンの Postgres、少なくとも Postgres 8.0 では "could not serialize access due to concurrent update" にメッセージが変更されたようだ。

MVCC の優れた同時実行性を使いたくない場合は、明示的にテーブルをロックする必要がある。
MS のセミナーの講師が言っていたが、次期 SQL Server の Yukon では、MVCC を採用する予定だそうだ。

* デジタル証券によるコンテンツ流通システム

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

デジタル証券によるコンテンツ流通システム
www.geocities.co.jp/SiliconValley/2949/Digikabu.html

Winnyの将来展望について(2003/10/10)
www.geocities.co.jp/SiliconValley/2949/ny.html
で触れられていたデジタル証券によるコンテンツ流通システムについて。

- 要旨

コンテンツの流通は完全にコピーフリーであり流通経路は何でも良い。WEBでの公開やP2Pなどで。
(* 略)
もしユーザーがあるコンテンツの製作者に対して支援・投資したり、コンテンツに対して何らかの影響力を及ぼしたければデジタル証券を購入するという形で自らの資金をそのコンテンツに投入する。
タダで見たければ見られるということになる。

投資に対する動機付けが弱い気がする。結局、支援や援助しか資金が投入されないだろう。
株に値が付くのは、その会社の技術、資産、将来性を評価する人がいるからだ。
このシステムだと、「コンテンツに対して何らかの影響力を及ぼす」がどんなものになるかによって
値段が激変するだろう。
魅力的な付加価値が無いと、デジタル証券にはほとんど値段が付かないだろう。

個人でインディーズ CD を出してる人が P2P で作品を配布し、このシステムを使ったとする。
支援という意味でのデジタル証券を購入してくれる人はいるかもしれないが、
純粋な投資目的での資金投入は期待できないのではないか。
なぜなら、その作品は無償のコンテンツ配布だけじゃ利益が出ない。
それでは証券としての価値が出ない。
結局、作品とは別の販売促進としてしか使えないように思われる。

ただし、支援として投入される資金が十分に大きければ話は別だ。
また、デジタル証券を購入することが付加価値をもたらすのであれば、付加価値目当てに売れる。
渡辺浩二がよく書いているような世界が到来すれば、機能するとは思う。
すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。