zheapの現状

こちらを参照: interdb.hatenablog.com

2018年頃に華々しくデビューした EDBのプラガブルストレージエンジン:zheap。 当時は開発者たちがカンファレンスなどで大々的に宣伝したので、今でもzheapに期待している人も多いようである。

しかしzheapの現状は大方の想像とは全く異なる。 試しにzheapのmasterブランチのコミット履歴を見てみよう。最終コミットは2019年9月20日である。一年以上作業が行われていない。

以下、zheapのこれまでの経緯と現状について公開されている情報をまとめ、今後について私見を述べる。

zheap とは

簡単に言えば、zheapとは「トランザクション処理にundo logを使う」タイプの「プラガブルストレージエンジン」である。

長所としては以下の2つが挙げられている。

  1. undo logを使うことで、従来のUPDATE処理によるテーブルファイルの膨張を避けられる。(従来方式のUPDATEは旧データを残したまま新データを追記する)
  2. undo log に対応したストレージエンジンにより、レコードヘッダ長を従来の20バイトから5バイトに削減でき、結果的にテーブルサイズを小さくできる。

要するに省ディスクスペースになるということである。

zheapとundo log関連技術の開発の流れ

前述のように、zheapは「undo logによるトランザクション処理」のための「プラガブルストレージエンジン」という位置づけである。

第一期

zheapが公開された後(2018年5月と11月)、undo log 機能に関するパッチがhackersメーリングリストに投稿された。

しかし、これらは議論が深まることなくフェードアウトした。

そして2019年、EDBでzheapの開発に関わっていた開発者数名がMicrosoft(Citus?)に移動し、それに合わせるようにzheapのmasterブランチの開発は終わった。

第二期

しかしzheapの他のブランチをよくみると、undo-record-setというブランチで2020年3月12日まで開発が続いていたことがわかる。

このブランチはあくまでundo log に関する開発ブランチであって、zheapは含まれていないことに注意。 masterブランチには~/src/backend/access/zheapディレクトリがあるが、 undo-record-setブランチにはない(undoディレクトリのみ)。

推測するに、undo機能には致命的な問題があって再実装せざるを得ず、その実装に注力するためにプラガブルストレージは後回しになっていたと思われる。 しかしそれでも行き詰まったのか、開発は止まってしまった。

現在

zheapの主力開発者だったAmitがEDBを離れた。これによりEDBでzheapにコミットできる開発者はVP のRobrt Haasくらいしかいなくなり、開発は有志によるMLを介したコミュニティベースで行わざるを得ないことになった。

2020年11月12日にundo-record-setブランチを改造したという投稿 があり、開発がユルユルと再スタートしたが、結局のところ現在(2022/9/15)、誰一人開発している人間はいない。

今後

このように、また開発が始まる気配をみせているが、第一期第二期のように開発者をアサインして開発を主導する会社や組織は(今のところ)存在しない。

今後の可能性を列挙してみる。

(1) undo log機能が完成する

過去何度も繰り返し実装しては捨てられた機能であるから、非常に難易度が高いと思われる。個人的にはこの機能を技術的主導者なく開発できるのか疑問である。

(2) undo log機能がPostgreSQL本体に取り込まれる

仮に困難を克服してundo log機能がうまく開発でき、さらに幸運にも本体に取り込まれると仮定する。 すると、当然テーブル構造も変化しレコードヘッダデータも単純化されるだろう。よってzheap というプラガブルストレージエンジンを開発するまでもなくPostgreSQL 本体がzheap ベースになる。

しかしundo log機能はMVCCのコアな部分の大変更であり、主にUPDATEでストレージ消費量を抑制できる程度の利点だけで本体に組み込まれるかというと、個人的にはこれも疑問である。例えばTime Series型のデータのようにUPDATEしないデータの処理のほうがトレンドのように思うし、それには従来の「追記型」heapのほうが適しているように思う。

(3) undo log機能をベースにzheapを新築する

そもそもundo log機能をhackersで開発するのは、所属がバラバラになった開発者たちや新規の開発者に門戸を開くためで、本体に取り込むことは二の次であると思われる。

よって、コミュニティで開発したundo log機能をもとにzheapプラガブルストレージエンジンを新たに実装することは既定路線のようにも見える。

しかしundo log機能の実装がうまくいったとして、はたしてzheapを再実装してメインテナンスする主体や組織が存在するか。厳しい見方だが、zheapというストレージエンジンを使うにはそれなりの会社や組織がメンテナンスし続けることがみえてこないことには、実戦では使えない。現状ではEDBがその役割を続けるか否か不透明である。手を上げたCybertecも現在、誰一人開発もメンテも行っていない。

このようにzheapはすでに死んでいる。 開発元のEDBも手を上げたにも関わらず何もしていないCybertecも、正式にZheapは死んだと報告すべきだろう。