RDB技術者のためのNoSQLガイド

本日読了。

RDB技術者のためのNoSQLガイド

RDB技術者のためのNoSQLガイド

最初の100ページあまりは秀逸。さまざまな特徴・プロダクトがあるNoSQLの全体像と基礎知識が分かる。
リニアで安価なスケールアウトができるKVS(Cassandra、HBASE、Redis、AmazonDynmoDB、Azure)、開発生産性が高いドキュメントDB(MongoDB、CouchBase、AzureDocumentDB)、NoSQLの仲間とされるが特性は全く異なるグラフDB(Neo4j)などを紹介。非構造と半構造の違い、ACIDとBASE、CAP定理など基本的な概念も丁寧に説明している。
CassandraはPAを保証しCは保証していない。マスターレス方式で可用性が高い。v.0.8からは純粋なスキーマレスではなく、事前に、プライマリーキーと、カラムキーやタイプからなるテーブル定義が必要。しかし、1つのカラムキーに0〜複数のデータ(カラム値:数値、文字列、BLOB、JSONなど)を持たせられるため自由度は高い。商用版であるDataStax Enterpriseは、Hadoop系のバッチ分析も得意である。

★ここのスキーマ定義はもっと知りたかった。どのレベルまで定義が必要で、変更時のペナルティは何か等。よって、別の手段でCQLの解説を参照した。IoTのテーブル定義は、センサーIDと日付をもとに複合キーを作り、あとはミリ秒単位でカラムを追加するのが王道か・・(以下例)。あるいは、最大20億データを前提に、日付分解しない方がよいか・・。

時系列データモデリング入門より
CREATE TABLE temperature_by_day (
weatherstation_id text,
date text,
event_time timestamp,
temperature text,
PRIMARY KEY ((weatherstation_id,date),event_time)
) WITH CLUSTERING ORDER BY (event_time DESC);
weatherstation_id,dateによる複合行、event_timeによる列ができ、値はtemperatureになる
event_timeの列は降順にソートされている
またデータ挿入時にTTLを入れることで、古いデータは自動的に削除される(降順にしておくと削除影響が少ない)

HBASはCPを保証しAは保証していない。また、Hadoopを基盤にしているため、比較的大規模になってしまう。