とある魔術のMVCC入門(なんとなくわかりたいあなたのための)

・ご案内

MVCC=Multi Version Concurrency Controlは、DBのTx技術の中でも比較的上位魔法に属し、あまたのTx系統の魔術を学ぼうとする魔術師の挑戦を退けてきた。しかしながら時代はメニー・コア/大容量メモリーの時代に入り、MVCC系統の呪文を唱えるための触媒のコストが下がりつつある。

 

その簡単な解説を試みる。

 

-Tx系呪文について

Tx系のspellはDB界魔法の中では、いわゆる最高位の防御魔法に属する。言ってみれば多数の攻撃(これは物理攻撃はもちろん高度のSpell攻撃も含む)を捌き切ることがその特徴である。一般に最高位防御魔法は絶対防御系のものが多く、受ける攻撃をすべて無効化することが可能である代わりに術者側にも大きなペナルティを課すことが多い。この絶対防御系と異なりTx系は呪文発動中も術者も(余裕があれば)行動することが可能であり、そのアドバンテージは非常に大きい。

 

-MVCC系とOCC系

Tx系の呪文はその系統として大きく二つの系統に分けることができる。一つはMVCC系であり、もう一つはOCC系である。

 

OCC系は炎熱系の防御呪文であり、魔術構成はWall of Fireに近い。まぁ言ってみれば比較的シンプルな構成を旨として、敵の攻撃を端から焼く尽くす対応の呪文に近い。修行の結果ではわりと高火力にもっていきやすいので比較的人気がある。

 

これとは対照的なのが、MVCCである。

 

MVCC系統の呪文は、どちらかというと時空間系の魔術に属する。正直、MVCC系は技術的な習得が困難であり、加えて、術式構築の次元が高いため、詠唱にも手間がかかる。その割にはシチュエーションを選ぶことが多く、なかなかコスパを出しにくい呪文であった。

 

しかし相手が、かなりの大量のブレスや呪詛を一気に吐く高上位系ドラゴンだったり、分散混乱系のスペルを乱発する古代ビザンチン帝国のLichあたりだったりすると、一気に大量の負荷をかける攻撃(通称Bulk ATtacking Combination Hits)が主軸になり、OCCのMax火力で燃やしつくことができない。このような相手にはMVCC系のテクニカルな呪文を展開して総力戦を挑む必要がある。ボス対策には欠かせないのがMVCC系といえる。

 

MVCC系の真髄は、多数の触媒を利用した多次元多層的魔法結界(multiversion)構成にある。これはOCC系にくらべて触媒リソースをより広く利用することが可能であり、防御効果範囲(serialization space)が広いことが知られている。なお、完全な効果範囲の最適展開術式は理論上存在することはわかっているが、第7階位魔法(NP-Complete)に属すると言われており、その手法は未だ人類には未知である。

 

余談だが、2019/04/01現在では魔術師の世界大会の高火力コンテストではそこそこのMVCC系(筆者はMVCCと認めるには難があるとおもっているが、魔術師業界では一応MVCCとされているようだ)が炎術系OCCを抑え、みごと最高出力を記録している。その意味ではMVCC系統の呪文を極めてこそ真のTx魔術師のマスターと言える。

 

-MVCC詳細

 

以下の解題はMVCC系魔術の聖典と名高い三大古文書、すなわち”A Critique of ANSI SQL Isolation Levels[Hal Berenson, Phil Bernstein, Jim Gray, Jim Melton, Elizabeth O’Neil, Patrick O'Neil]”と “Concurrency Control and Recovery in Database Systems[Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman]”と”Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery[Gerhard Weikum, Gottfried Vossen]”(実は”Theory of Database Concurrency Control[Christos Papadimitriou]”というものがあるがこれはちょっと次元が違うので)をベースに、ちょっくらMVCCの手引きを書いてみましょうというものだ。前提として、Tx魔術の初級であるIsolationの使い方ぐらいは理解しているという前提にたつ。

 

なお、以降は上記古文書の解読の結果に基づいて、筆者が勝手に自分の理解の手引きのために書いているので、ちゃんと勉強したいひとは海の向こうの魔術師協会で正式に秘蹟を受けることをオススメする。

 

-Tx系魔術の再考

 

まず、すでにご存知のようにTx系魔術の基本は攻性防壁を利用したカウンター攻撃による防御が原理となっている。一種のカウンタースペルになる。敵のアタックスペルや物理攻撃(一般にanomalyと称す)を端から撃破するわけだ。敵の攻撃の撃ち漏らしは、結果として本体に大きなダメージを受けることになり、最終的には戦闘不能になる。とくに一部の呪詛ダメージは原理的に事後的に観測することが困難であることが多く、周知のとおり、数多くの魔術師が「気がついたらとんでもないことになっていた」という状態で、討ち死にしている。

 

とくに対応魔術師が(Cloth armorを纏ったSkeltonとLichの区別がつかないぐらいの)norbの場合は、巻き添えをくらってほぼパーティが確実に全滅する。このあたりはエセ魔術師資格試験の”巫女資格”のゴールドとかシルバーとかを取得した魔術師風情によく見られるケースである。アレは個人的にはまずいと思う。特にパーティ募集の酒場での自己紹介履歴書で大きく書くのはどうかと思う。

 

んで、話を戻すと、MVCC系とOCC系ではこのanomalyの対処の根本的なロジックが実は異なる。もちろん、表面上は同じに見えるし、実際、古典的な入門魔道書のA Critique of ANSI SQL Isolation Levelsではanomalyは大きく三大要素に分類していているのみである。いわゆるDirty Read, Lost Update, Phantomになる。なお、実際はこれにくわえて中級魔法であるSnapshot Isolationでも防御不能のWrite Skewもあげている。

 

ただし、実際に一番やっかいなのはRead-only anomalyであり、これは「一見無害に見えるダメージゼロ攻撃」に対して、後述詠唱で遅効性の呪文をconcurrentに発動させ、一気に有毒化するタチの悪い攻撃になるというコンビネーション・ブローであり、正直対処が厳しい。

 

-ダメージ分解の基本原理

 

まずTx系魔法では撃退すべきダメージ(呪文であれ物理攻撃であれ)を単純な2要素、すなわちread属性とwrite属性に変換し魔術的に解釈する。(これに加えてcommit/abortを認識することもあるがこれは置いておく)。今更、Tx魔法の原理原則を言うのもアレではあるが、通常の属性であれば、単純魔法属性変換を行うことで、簡単に除去/dispel/de-curseできる。もちろん、攻撃側もそれは折り込み済みなので、実際は、それほど単純ではなく、この変換後のread/write属性の絡み合いでanomaly=ダメージが発生する魔術的なロジックボムが発動するように「組み上げてくる」のが通常である。つまり通常、問題となるanomalyはこの属性の特定の「絡み合い」すなわち一定のコンビネーションにより発生する。したがって、「特定のコンビネーション」を構成術式により順次認識し、dispelすることで一気に攻撃をパージすることが必要になる。

 

MVCCとOCCでは、この「Read属性とWrite属性の特定の「絡み合い」」の解釈の違いが大きい。これにより魔術のロジック構成が異なる。呪文の構成結果の効果としてダメージ発生(serializable effect)は、なるほど同じで、さらに構成手法の構築アーキテクチャも、利用される魔力の生成要素としての触媒も同じであるが、絡み合いの解釈での次元をさげて単純に力技にもっていくOCCと逆に次元を上げて処理をするのがMVCCで方法に大きな違いがある。以下個別に解説する。

 

-OCCでの魔術解釈

まず基本的にread属性/write属性を単純に三種類の組み合わせに還元する。すなわち

・write/read : 一番解釈しやすい。ある属性攻撃(write)に依存した属性攻撃(read)のコンビネーションになる。トラップとしては変換後に依存が発生するのを見越して仕掛けるタイプになる。割と簡単に見抜けるが、見逃すとイタイ。

・write/write:これも同じで、ある属性攻撃(write)の多重化。どちらかというとパラレルに来るコンビネーションで、変換後のコストを増大させる方向でのトラップになる。

・read/write:もっとも面倒で、属性攻撃に対してdelayさせて効果を変化させる特殊コンビ攻撃。delayのtimingの見極めがそれなりにかかるので、割と問題になる。

なお、read/readは独立性が高くそのままでダメージキャンセルができるので、普通は放っておく。

 

これらの攻撃を一定の順序に処理しながらパージしていく。このときに、パージする順序に魔術的不整合が起きないように、術式構成を動的に組み合わせて触媒がちゃんと働くようにしておく、ということが肝になる。この順序処理での不整合は簡単に魔法防壁を破綻せしめるため、特に注意が必要だ。

 

まず、このOCCについては、魔術構成の次元空間は単一であり、ここに押し込めることがまず基本になる。このときに若干(というか相当)無理があり、なるべく触媒の単位当たりの効率性をあげるために低コストで大量に「押し込む」ことが肝要になる。結果、本来であればパージしなくてもよいものもパージすることにするため、触媒の使い方としては無駄が発生する。しかし、シンプルな次元に押し込めることにより、単純魔術要素展開の魔力を効率よく注ぎ込むことができるため、多少の無駄があっても魔力で押し切るということが可能になる。

 

この時もっとも効率よい魔法元素が炎熱系であるので、魔法実行環境として炎熱系のロジックを転用して発動させることが多い。

 

-MVCCの魔術解釈

これに対して、MVCCはそもそものダメージ属性を多面的に捉えて次元数を上げ、一つの魔術的多様体として処理する。前述のr/w属性の絡みを以下に形で認識する。すなわち、

 

1) まず基本構成として、write-readのコンビネーションを認識し、一つの魔法次元空間を作成、この次元空間にコンビネーション要素をそのまま移管する

2) 移管したwrite-read空間に「同次元干渉」するwrite属性に変換された要素の認識した場合は、これを同じ次元空間に押し込める。問題がなければここでOCCと同じ単純なread-write処理を利用してパージする。

3) 2)が成立した時点でのwrite/read—writeの次元空間に、「別次元干渉」する「別のwrite属性に変換された要素」が認識されたとき(これは前述のOCCでのread-write / write-writeのコンビネーションをより高い次元で俯瞰したときの構造になる)には、前述の次元空間とはもう一つ別の”魔法次元数が同じ”次元空間を作成し、そこに当該write属性の要素を放り込む。

4) 次に、より高次元の魔法時空間を一つ作成し、そこに上記の二つの次元空間を移管する。この時に、移管されるべき次元空間の時間進行は外側から一時凍結する。つまり凍結時空とは別に術式を進行させるために高次の時空間を作り出すことになる。

5) 移管された高次元魔法空間で、魔術不整合が起きない次元空間連結を行い、その連結空間で一気にパージして、同時に放出される変換エネルギーで、作成された異次元空間をすべて吹き飛ばす

 

つまり、同時に三つの時空間(上位で一つ、下位で二つ。ただし下位についてはN個の制御をすることも可能)を制御する必要があり、かなりの高難度の魔術操作が要求される。このときに、次元数を一つ増やすか、増やさないか?で魔術のレベルがまったく異なる。すなわち、

 

5’) 4)の高次元魔術空間を召喚するのではなく、そのまま、単純に次元連結をしてしまう方法もある。この場合は、メタレベルの時間軸が与えられないため、自由に触媒を利用する時間が存在せず、そのままシーケントに連結することになる。これはよりレベルの低い方法になるが、次元負担が減る分だけ詠唱コストが低い(MCSR術式と言われている)。

 

現状の魔術の最高レベルでも実は後者の方が主流で、魔術レベル的には最高峰と言われている上記前述の(1+N)軸の世界線を自在に操る魔術師は、長い魔術の歴史の中でも、いまだ公式には確認されていない。

 

-MVCCの秘奥義

以上のこの状態でも現在のMVCCは十分に奥義と言えるが、特にこの上位でより高位の術式を実行できることが理論上は確認されている。この場合は、上記の1+Nの魔法次元空間のさらに上位の魔術時空間を作成し、もっとも下位に閉じ込めた時空間から適当な空間を選択し、上位の空間に転移させる。さらに転移時点でその特定時空間の時間遷移を凍結せずに進行させておく。その上で、時間軸自体を完全に偏向させて、その次元連結の自由度を上げるという術式になる。この場合は、制御時間軸が1+1+N軸になる。これは例えば、特に攻撃者のコンビネーション攻撃に対して、攻撃者の時空を一時的に凍結し、時間的に後からの攻撃を先に防御、その反動エネルギーを利用して、「先に来ている攻撃」を相殺するという術式が可能になる。要するに手元で簡単なタイムスリップさせるということになる。すなわち、意図的にタイムマシンパラドクスを発生させ、術式終了時に解消させる術式(厳密には違うが、こういう理解でいいと個人的には思っている)になる。たとえば、まだ現在の敵がemitしていない未来の攻撃(未来の敵はemitしている)を先取りして、現在の敵の攻撃に相殺させることができるということだ。

 

もちろん、前述の1+N軸でも、論理的にはタイムスリップになっているが、時間軸方向とスキップできるタイムスロットに制約がかかっているので、タイムスリップといっても非常に単純なものだ。後者の術式は自由度が圧倒的に高い。どんな攻撃がどう来ても関係ない。理論上は無敵である。(なお、筆者が探求しているのはこの2+N軸の魔術構成だが、わりと絶望的にわけがわからないというのが現状だったりする。)

 

なお、これを実次元にprojectionした場合は、まずone-shot requestを利用して、攻撃者の時間を一時的に凍結させ、実時間での挙動を制約し、同時にロジカルな別のミンコフスキー結界空間を構築し、そこで魔術処理を実行、group commitのタイミングで空間をパージして、実時間に「戻す」という複数の世界線を使い分ける呪文として発動する(より正確には発動しているように“見える”)。なお、このタイムスパンは現状で10-20msecが通常のスケールになっている。一般民間人からすると1/100秒程度だが、魔術的にはかなりの時間になる。

 

以上である。

 

ざっくりそんな感じなので、より詳細に知りたいかたは、上記の古文書の解読をおすすめする。なお、その際には独力での解読はかなり高いレベルでの魔術の素養がないと難航を極めるので、適切な魔術師の手ほどきを受けることをお勧めする。