Algebraic Property Graph
近況
転職後1ヶ月半、初の連休でゆっくりできた。在宅勤務が続く中で一つ気づいたのは、一日誰とも会話せずに仕事するとメンタルを病む、ということ。事務的な報告ではダメで、仕事の内容でも全く問題ないがとにかく話すべき。そういう意味では、単なる作業者ほどキツそうだな、と思う。数少ない出社日も、今後の情勢次第では完全在宅になる可能性も残っている感じ。
Algebraic Property Graph
連休中に、以前から調べている、Algebraic Property Graphという概念について改めて考えていた。今回はざっくりこのAlgebraic Property Graphを紹介してみようと思う。以下のリンクを読んでください、が一番簡単な説明なのだが、私自身の関心も絡めて、もう少しだけ説明してみることにする。 arxiv.org 元々、私はAlgebraic Databaseというものに強く興味を持って以下の論文を読んでいたのだが、このAlgebraic Property Graphはその延長線上にあるものである。
arxiv.org Algebraic Databaseの大まかな概念そのものはそこまで難しいわけではないと思うのだが、この論文は圏論の高度な概念がたくさん出てきて、とてもじゃないが一読して理解できるようなものではなく、おかげで圏論を勉強しまくるハメになった。あくまで私見だが、Algebraic Databaseは、関係論理を基盤にするRDBを発展させうる可能性を持っていると考えている。例えば「スキーマ変形」はトピックの一つで、Algebraic Databaseではスキーマ変形や、異なるスキーマを持つデータのマージなどを形式的に扱えることをアピールしていたりする。一方RDBの場合だと、データ「マイグレーション」はその仕組みの外側で、他のツールや仕組みを使って管理する必要がある。他には、プログラミング言語とRDBの間のいわゆる「インピーダンスミスマッチ」を埋めようとしている点も注目すべきだと思う。
さて、Algebraic Property Graphは、Algebraic Databaseに比べれば遥かに理解がしやすい概念である。圏論は出てくるものの、上記の論文は読みやすい。Uberで使われているっぽいのだが、RDFやRDB、JSONなど、異なる構造のデータを統一的に扱い、相互に変換するための道具であるように読める。Algebraic Databaseには存在する、例えばクエリ(CQL)のような概念は出現しない。そういう意味では、Algebraic Databaseから便利で実用的な側面を切り出してきたようにも見える。
ただ、Algebraic Property GraphはAlgebraic Databaseの単純なサブセットというわけでもなく、むしろ扱える構造は広がっているように思える。Algebraic Databaseで出現する例では、あくまでもRDBのレコードを「スキーマ」と「インスタンス」に置き換えることが主眼となっていたのだが、Algebraic Property Graphではハイパーグラフも表現の射程に入っている。もちろんAlgebraic Databaseのポテンシャルとしてそれらを表現することは可能だと思うので、単純に適用範囲が広がっているとみなすべきなのかもしれない。
実装したい
実は元々、Algebraic DatabaseはJavaでの実装が存在し、Algebraic Property Graphもその拡張として実装されている現状がある。詳細は以下から辿れると思う(GitHubでソースコードも公開されており、説明もある)。 conexus.com ただ、個人的にはやっぱり自分で作ってみたいので、少し前からRustでの実装を開始してみている。まずはAlgebraic Property Graphであるが、何をどうやって作るのかを考えながら、少しずつ進めている現状である。
気が向けば、また詳細も書いていこうと思う。