GraphQL + NewSQL!? FaunaDB を試してみる。
こんにちは k-jun です。今回は Spanner の論文から派生した NewSQL の一種 FaunaDB を試してみたいと思います。
どうやら、DB 自体は OSS ではないようですね。DB という主要コンポーネントを特定のベンダーに頼る点は結構マイナスですがやっていきます。 せっかく Spanner から派生しているのになんだかもったいないですね。
Setup
サインアップ後のダッシュボードはこんな感じ。データベースを作っていきます。
サンプルのデータを突っ込んだ状態でデータベースを作成しました。中身がダッシュボードからでも確認できるようで、Json らしきものが確認できます。 インデックスの仕組みもあるようで、他の DB 同様に肝となる箇所です。
ドキュメントを参照する限りではインデックスは作り放題みたいに書いてありますが、本当かしら。
you can have hundreds of indexes without affecting overall performance.
FQL と呼ばれる軽いデータ整形関数を DB にて記述できるようです。MySQL での Function なんかに相当するものでしょうか。かゆいところに手が届くといいですね。
Run
ではでは、実際に Query を発行して取得結果を見ていきます。
この Paginate 関数はやばいですね。ページネーションはアンチパターンがあったりといろいろとめんどくさいですし。これ、MySQL にも欲しいなー。
これも表現のレベルが高度。Paginate の 結果を key としてその詳細情報を取ってきて関数に渡しているようですね。かなり面白いです。
GraphQL の Interface 経由でアクセスできることも見ていきます。リンクはこれ。
データベースを作成。
スキーマを GraphQL 形式で記述していきます。
$ cat ~/Desktop/schema.gql type Todo { title: String! completed: Boolean } type Query { allTodos: [Todo!] todosByCompletedFlag(completed: Boolean!): [Todo!] }
作成したスキーマを食わせたところ、見知った画面が開きましたね。
mutation で document も生成できていそうです。
使い勝手は完全に GraphQL ですね。チュートリアルを実行した限りでは、NewSQL の何たるかが全く伝わってこなかったので少し調べてみます。
https://docs.fauna.com/fauna/current/comparisons/compare-faunadb-vs-dynamodb
DynamoDB との比較記事があったのでざっと読みましたが、以下以外に特徴はなさそうだと感じました。
- GraphQL の Interface をサポートしている
- Index へのデータタイプが制限されず柔軟
- ACID トランザクションをサポート
比べるべきは Spanner などであって、DynamoDB ではないはずですね。ここらへん のスター数も微妙ですし、OSS でないことも相まってそこまで活発的ではないのかもしれません。 TiDB や、CockroachDB の利点の一つにベンダーロックインされる Aurora, Spanner と違って、OSS ってのがあるのでやっぱり重要ですよね...。スケールするのかどうかも微妙。
それでは今回はこの辺で。