share facebook facebook2 twitter menu hatena pocket slack

2016.02.29 MON

Crate.IO クラウドネイティブな新しいデータベースエンジン

WRITTEN BY今岡 久敏

Crate.IOという新しいDBエンジンが 2014 TCのアワードをとっていたらしい。それからもう1年近く立っていますが、正直なところ、流行っているのか定かではないです。が、誰もやらないことのほうが面白いのでやります。

Crate.IOとは?

Crate でググると、木の箱の絵が出てきたり、Rustのパッケージマネジャ?とかぶるので、Crate.IOとします。正直、Crateはかなりググりにくい言葉です。ざっとまとめとくと

  • マルチマスター型
  • ハナからクラウド前提
  • RDBで全部やるのじゃなくて、NoSQLでやろう、それもNoSQLの中でも用途ごとに分割しよう」という最近の風潮を全否定 全部 Crate.IOでやれ!
  • クライアントライブラリはもうほとんどの言語で用意済み
  • サーバ側はゼロコンフィグでいける(ようにしたい)

なかなか魅力的な おしながき でしょう?流行るかどうかはわからないですが。

アプリ開発者視点

Use Cases

インフラ的にいくら面白くとも、アプリ開発上意味がなければわざわざ採用する価値がありません。ましてや新しいDBエンジンです。全体的な印象としては、開発者に優しいと思います。
なんといっても
SQLが通る!

Crate SQL — Crate documentation

やっぱりSQLは強し! 上記マニュアル流し読み。

DDL

普通のRDBのDDLとほぼ変わりませんが、シャーディング・ルーティングを意識した構文があります。

DDL デフォルトでシャーディング5本

Crate supports sharding natively, it even uses 5 shards by default if not further defined.

らしいです。5本以外だとDDLで指定すればOK。

Routing デフォルトはPrimary Key

If primary key constraints are defined, the routing column definition can be omitted as primary key columns are always used for routing by default.

Routingというと聞き慣れませんが、所謂シャードキーと捉えれば良さそう。Primary Key無しで、特定のカラムをシャードキー(clusterd by) に指定する。

Replication デフォルトで1レプリカ

Defining the number of replicas is done using the number_of_replicas property.

何箇所にレプリケーションするかを、DDLで指定しちゃいます!マニュアルによると最大4つ。ここまでやれば盤石でしょう。
しかもですよ!

Note The number of replicas can be changed at any time.

なんだと!

DDLまとめ

他にも Full Text や Partitioned Tableなど、ジジイがニヤつく機能やら、聞き慣れない Analyzer という物があったり、マニュアル読むだけでお腹いっぱい。
私が抜粋した分だけでまとめますと。

  • シャーディング・ルーティング・レプリケーション等、本来はウラ(インフラ側)で吸収していた部分が、思いっきりオモテ(=DDL)に出てきた

最初から、いかにスケールさせるかを想定して作られているので、これらの機能をDDLで指定します。ひとことで言うと、 なんかMongoDBっぽいですが、MongoDBよりももう一歩踏み込んでいる感じはします。インフラ(サーバ)側を知るとそれは明確になります。

Query

https://crate.io/docs/reference/sql/queries.html#object-arrays

基本的なSQLは通りそうですが、その中でも気になったのが、Arrayに対するQueryです。いずれ試してみる。

Types

Object型など、ある程度予想がつくものもありますが、ユースケースにも上げられているジオ系のTypeと関数があります。複雑なことは出来ないですが、lat-longから距離を測ったりとかはできるようです。もっと複雑な機能は自分で拡張しろやってことでしょう。

https://crate.io/docs/reference/sql/data_types.html#geo-point

https://crate.io/docs/reference/sql/scalar.html#geo-functions

Blob

https://crate.io/docs/reference/blob.html

blobテーブルはDDLで定義して、Upload & Download は HTTP経由ですね。ここのDDLも勿論 シャード、レプリケーション数が指定できるようです。

各種言語の対応状況

安心してください、ほぼ全部です。

https://crate.io/docs/getting-started/clients/

万が一見つからなかったとしても。HTTPのRESTを叩くだけっぽいので、多分移植は楽勝。

アプリ側のまとめ

実のところ、インフラ側の方が楽勝ヒャッハーなんで、そこを書こうと思ってましたが力尽きました、次回書きます。
アプリ側も改めて見ると結構いいですね~

  • SQLが使えるよ!
  • シャーディング・ルーティング・レプリケーション、これらすべてDDLで指定する
  • Blobも使えるよ!、Upload/DownloadはHTTP
  • 認証機構は今のところ無い(マニュアル読んだ分だと)

今後Crate.IOの主戦場では、おそらく認証機構は必要となりそう。認証を入れた上で、どれぐらいのスピードが確保できるか。
最近の動向として、ESとの連携(データのマイグレーション?)が話題になっているようです。ココらへんも後ほど書くつもり。

元記事はこちら

Crate.IO クラウドネイティブな新しいデータベースエンジン

今岡 久敏

「常に新しいモノの方が、古いモノより優れている、というマインドを持てなくなった時、それはエンジニアとしての死を意味する」え、誰の言葉だって?俺の言葉だよ。