LinkedIn Engineeringはオープンソースの分散半構造化データベースであるSenseiDBをリリースした。SenseiDBはLinkedInの検索インフラで利用されている技術であり、LinkedIn Signalやその他の検索関連技術(例えば、人や企業の検索)で利用されている。SenseiDBは同社の内部で開発され、Search, Network, Analyticsプロジェクトの下、オープンソースで公開された。
SenseiDBは高い更新頻度と、複雑な半構造化検索クエリに対処することに力点が置かれたNoSQLデータベースだ。LuceneやSolrに慣れているユーザならSenseiDBの背後にある考え方を認識できるかもしれない。SenseiDBは複数のノードから構成されるクラスタに配置される。各ノードはNのデータのシャードを持つ。ノードはApache Zookeeperによって管理される。Apache Zookeeperが現在の構成を保持し、構成の変更(トポロジの変更)を他のノードに転送する。また、ひとつのSenseiDBクラスタには扱うデータモデルを定義するためのスキーマが必要だ。
SenseiDBクラスタにデータを入れる場合、ゲートウェイ("INSERT"する方法はない)を使う。各クラスタはひとつのゲートウェイに接続されている。この点はSenseiDBを理解する上で重要だ。というのはSenseiDBは、不可分性と独立性を管理しないのだ。したがって、この2つの性質はゲートウェイのレベルで担保しなければならない。ゲートウェイはデータの流れが期待された振る舞いをするように動作する必要がある。組み込みで提供されるゲートウェイは、
- ファイル
- JMSキュー
- JDBC
- Apache Kafka
開発者はカスタムのゲートウェイを実装できる。Twitterの更新からデータを取得するサンプルのゲートウェイも提供されている。
また、SenseiDBは定義されたスキーマに基づいたファセット問い合わせもサポートする。この問い合わせ用にHTTPクライアントからアクセスできるREST APIを提供する。このAPIはElasticSearchのQuery DSLから着想を得ている。このAPIのJavaとPythonのラッパーも提供する。Ruby版も提供される予定だ。
また、SenseiDBは問い合わせ方法のひとつとしてBQL (Browse Query Language)も提供する。BQLはSQLに似た言語(SELECT文だけしかない)で、簡便な方法でSenseiDBに問い合わせができる。クラスタのインストールにはBQL用のウェブコンソールが付属している。