https://tech.gunosy.io/entry/newspass-comment-graphdb

こんにちは。ニュースパスのサーバーサイドエンジニアをしているmanoです。

昨年末から、ニュースパスで記事にコメントができるようになりました。 そのコメントデータを、AWS Neptuneを使ってグラフ構造で保持しています。 今回は、その実装・運用について書きたいと思います。

AWS Neptuneって?

AWS Neptuneは、GraphDBが扱えるAWSのフルマネージドサービスです(詳しくはこちら)。 マスター・レプリカ構成のクラスターを作ることができ、レプリカは最大で15まで並べることができます。

GraphDBとのやりとりについて、Neptuneは「グラフトラバーサル言語」であるGremlinSPARQLをサポートしているので、このいずれかで実装することになります。私はどちらも「なんじゃそりゃ」というところからのスタートだったので、直感的に書き方がしっくりきたGremlinを使って実装することにしました。

なぜ、Neptuneを使おうと思ったのか?

コメント機能を実装すると決まったときは、AuroraかDynamodbで実装する予定だったのですが、弊社SREメンバーから「Neptuneでやっちゃいなよ」という挑むようなセリフをもらい、また社内にNeptuneについての知見を持っている人が誰もいなかったということもあって、おもしろそうだなと思いNeptuneでやることにしました。 一応、いったん期限付きでできるかどうかトライしてみて、感触的に難しそうならAuroraやDynamoDBで実装しようと思っていました。 それが最も大きな理由だったのですが、他には、今後もしかしたら実装するかもしれない、

などといった機能追加も、データ構造的に容易であるという点にも魅力を感じました。 あとは、簡易的なレコメンド機能の実装も簡単に行える、という利点もあります。

グラフデータの構成について

ニュースパスのコメントデータは、Neptuneでこのような形で保持されています。

ニュースパスのコメントデータ構造

上の図について説明していきます。 ちなみにこれ以降の説明にて、こちらで囲われた部分は「label」です。