Webマーケティングで脚光を浴びる「ビッグデータ」。その背後で不可欠な技術要件である「NoSQL」の全体像を見通せる最強の概説書です。NoSQLの基礎から始まり、パフォーマンスのチューニングやアーキテクチャ上のガイドラインといった高度な話題まで踏み込んだ、NoSQLを学びたいすべてのエンジニアに有用な情報が凝縮されています。
【主な内容】●MapReduceベースのスケーラブルなデータ処理の基本 ●Hadoopを使ったサンプル ●HiveやPigといった高水準の抽象モデル ●Amazon Web ServicesとGoogle App Engineが提供するデータベースサービスに関する解説 ●Google、Amazon、Facebook、Twitter、LinkedInのスケーラブルなデータアーキテクチャ
第1部 さあ始めよう
1章 NoSQLとは何か、なぜ必要なのか
1.1 NoSQLの定義と基礎知識
1.1.1 NoSQLの簡単な歴史と登場の経緯
1.1.2 ビッグデータ
1.1.3 スケーラビリティ
1.1.4 MapReduce入門
1.2 ソート済み列指向データベース
1.3 キー/バリュー型データストア
1.4 ドキュメントデータベース
1.5 グラフデータベース
1.6 まとめ
2章 Hello NoSQL:最初の一歩
2.1 最初の味見:2つの単純なサンプルを試してみる
2.1.1 単純な永続データセット:住みたい場所
2.1.2 車のモデルとメーカーのデータを格納する
2.2 言語バインディングを操作する
2.2.1 MongoDBのドライバ
2.2.2 Thrift入門
2.3 まとめ
3章 NoSQLのインターフェイス、インタラクション
3.1 SQLでなければ何なのか
3.1.1 データの格納とアクセス
3.1.2 MongoDBにおけるデータの格納とアクセス
3.1.3 MongoDBのクエリー
3.1.4 Redisにおけるデータの格納とアクセス
3.1.5 Redisのクエリー
3.1.6 HBaseにおけるデータの格納とアクセス
3.1.7 HBaseのクエリー
3.1.8 Apache Cassandraにおけるデータの格納とアクセス
3.1.9 Apache Cassandraのクエリー
3.2 NoSQLデータベースの言語バインディング
3.2.1 言語を選ばないThrift
3.2.2 Java用の言語バインディング
3.2.3 Python用の言語バインディング
3.2.4 Ruby用の言語バインディング
3.2.5 PHP用の言語バインディング
3.3 まとめ
2部 NoSQLの基礎を学ぶ
4章 ストレージアーキテクチャの基礎
4.1 列指向データベースの操作
4.1.1 リレーショナルデータベースでは表と列を使う
4.1.2 列指向データベースとRDBMSの違い
4.1.3 ネストされたキー/値ペアとしての列指向データベース
4.1.4 Webテーブルのレイアウトを作る
4.2 HBase分散ストレージアーキテクチャ
4.3 ドキュメントデータベースの内部構造
4.3.1 メモリマップトファイルへのデータの格納
4.3.2 MongoDBのコレクションとインデックスの利用ガイドライン
4.3.3 MongoDBの信頼性と持続性
4.3.4 水平スケーリング
4.4 MemcachedとRedisのキー/バリュー型データストア
4.4.1 Memcachedの内部構造
4.4.2 Redisの内部構造
4.5 結果整合性データベース
4.5.1 コンシステントハッシュ
4.5.2 オブジェクトのバージョン管理
4.5.3 ゴシップベースのメンバーシップとヒントハンドオフ
4.6 まとめ
5章 CRUD操作の実行
5.1 レコードの作成
5.1.1 ドキュメントデータベースのレコード作成操作
5.1.2 列指向データベースのレコード作成操作
5.1.3 キー/値マップのレコード作成操作
5.2 データへのアクセス
5.2.1 MongoDBのドキュメントへのアクセス
5.2.2 HBaseのデータアクセス
5.2.3 Redisのクエリー
5.3 データの更新と削除
5.3.1 MongoDB、HBase、Redisでのデータの更新
5.3.2 制限された不可分性とトランザクション完全性
5.4 まとめ
6章 NoSQLデータベースのクエリー
6.1 SQLとよく似ているMongoDBのクエリー
6.1.1 MovieLensデータの格納
6.1.2 MongoDBのMapReduce
6.2 HBaseなどの列指向データベースへのアクセス
6.2.1 株価履歴データ
6.3 Redisのクエリー:詳説
6.4 まとめ
7章 データストアの設計変更と拡張の管理
7.1 ドキュメントデータベースの設計変更
7.1.1 スキーマレスの柔軟性
7.1.2 MongoDBへのデータのインポートとエクスポート
7.2 列指向データベースのスキーマ拡張
7.2.1 HBaseへのデータのインポートとエクスポート
7.3 キー/バリュー型データストアでのデータの拡張
7.4 まとめ
8章 データセットのインデクシングとソート
8.1 データベースのインデックス
8.2 MongoDBのインデクシングとソート
8.3 MongoDBのインデックスの作成と活用法
8.3.1 複合インデックス
8.3.2 一意でスパースなインデックスの作成
8.3.3 キーワードベースの検索とマルチキー
8.4 CouchDBのインデックスとソート
8.4.1 CouchDBにおけるB木インデックス
8.5 Apache Cassandraのインデクシング
8.6 まとめ
9章 トランザクションとデータ完全性の管理
9.1 RDBMSとACID
9.1.1 分離レベルと独立性の関係
9.2 分散ACIDシステム
9.2.1 整合性
9.2.2 可用性
9.2.3 分断耐性
9.3 CAP定理の原理
9.3.1 可用性を犠牲にするオプション
9.3.2 分断耐性を犠牲にするオプション
9.3.3 整合性を犠牲にするオプション
9.4 一部のNoSQL製品における整合性の実装
9.4.1 MongoDBの分散整合性
9.4.2 CouchDBの結果整合性
9.4.3 Apache Cassandraの結果整合性
9.4.4 Membaseの整合性モデル
9.5 まとめ
3部 NoSQLに熟達する
10章 クラウドのNoSQL(GAEとAmazon SimpleDB)
10.1 Google App Engineのデータストア
10.1.1 GAE Python SDKのインストールとセットアップ
10.1.2 PythonによるGAE用データモデリングの基礎
10.1.3 クエリーとインデックス
10.1.4 サポートされているフィルタとソート
10.1.5 Java SDKのごく簡単な紹介
10.2 Amazon SimpleDB
10.2.1 SimpleDBに触れてみる
10.2.2 REST APIの使い方
10.2.3 Javaを使ってSimpleDBにアクセスする
10.2.4 Ruby、Pythonを使ってSimpleDBにアクセスする
10.3 まとめ
11章 MapReduceによるスケーラブルな並列処理
11.1 MapReduceの基本
11.1.1 個々の銘柄の最高値を探す
11.1.2 NYSE株価履歴データをCouchDBにロードする
11.2 HBaseのMapReduce
11.3 MapReduceの可能性とApache Mahout
11.4 まとめ
12章 Hiveによるビッグデータの分析
12.1 Hiveの基礎
12.2 再び映画の評価レコード
12.3 古きよきSQL
12.4 Hive QLの結合操作
12.4.1 実行計画
12.4.2 パーティションテーブル
12.5 まとめ
13章 データベースの内部構造
13.1 MongoDBの内部構造
13.1.1 MongoDBのワイヤプロトコル
13.1.2 ドキュメントの挿入
13.1.3 コレクションへのクエリーの発行
13.1.4 MongoDBのデータベースファイル
13.2 Membaseのアーキテクチャ
13.3 Hypertableの内部動作
13.3.1 正規表現サポート
13.3.2 ブルームフィルタ
13.4 Apache Cassandra
13.4.1 ピアツーピアモデル
13.4.2 ゴシップとアンチエントロピー
13.4.3 高速書き込み
13.4.4 ヒントハンドオフ
13.5 Berkeley DB
13.5.1 ストレージの構成
13.6 まとめ
4部 NoSQLを極める
14章 どのNoSQL製品を選ぶべきか
14.1 NoSQL製品の比較
14.1.1 スケーラビリティ
14.1.2 トランザクション完全性と整合性
14.1.3 データモデリング
14.1.4 クエリーのサポート
14.1.5 アクセスとインターフェイス
14.2 ベンチマークテストによるパフォーマンスの計測
14.2.1 読み/更新で50/50
14.2.2 読み/更新で95/5
14.2.3 スキャン
14.2.4 スケーラビリティテスト
14.2.5 Hypertableテスト
14.3 開発の経緯に基づいた比較
14.4 まとめ
15章 データベースの併用
15.1 MySQLとNoSQLの併用
15.2 イミュータブルなデータストア
15.2.1 Facebookのポリグロットパーシステンス
15.2.2 データウェアハウスとビジネスインテリジェンス
15.3 WebフレームワークとNoSQL
15.3.1 RailsでNoSQLを使う
15.3.2 DjangoでNoSQLを使う
15.3.3 Spring DataのNoSQLサポート
15.4 RDBMSからNoSQLへの移行
15.5 まとめ
16章 パフォーマンスチューニング
16.1 並列処理アルゴリズムの目標
16.1.1 レイテンシを減らす意味
16.1.2 スループットの向上
16.1.3 線形スケーラビリティ
16.2 パフォーマンスに影響を与える数式
16.2.1 アムダールの法則
16.2.2 リトルの法則
16.2.3 メッセージコストモデル
16.3 パーティション分割
16.4 異種混在環境でのスケジューリング
16.5 MapReduceのさらなるチューニング
16.5.1 通信のオーバーヘッド
16.5.2 圧縮
16.5.3 ファイルのブロックサイズ
16.5.4 並列コピー
16.6 HBaseコプロセッサ
16.7 ブルームフィルタ
16.8 まとめ
17章 ツールとユーティリティ
17.1 RRDtool
17.2 Nagios
17.3 Scribe
17.4 Flume
17.5 Chukwa
17.6 Pig
17.6.1 Pigとのインターフェイス
17.6.2 Pig Latinの基礎
17.7 nodetool
17.8 OpenTSDB
17.9 Solandra
17.10 HummingbirdとC5t
17.11 GeoCouch
17.12 Alchemy Database
17.13 Webdis
17.14 まとめ
付 録 NoSQL製品のインストールとセットアップ
A.1 Hadoopのインストールとセットアップ
A.1.1 Hadoopをインストールする
A.1.2 シングルノードHadoopを設定する
A.1.3 擬似分散モードをセットアップする
A.2 HBaseのインストールとセットアップ
A.3 Hiveのインストールとセットアップ
A.3.1 Hiveをセットアップする
A.3.2 Hadoopの設定との関係
A.4 Hypertableのインストールとセットアップ
A.4.1 HypertableディストリビューションをFHS準拠にする
A.4.2 HypertableでHDFSを使うための設定
A.5 MongoDBのインストールとセットアップ
A.5.1 MongoDBをセットアップする
A.6 CouchDBのインストールとセットアップ
A.7 Redisのインストールとセットアップ
A.8 Cassandraのインストールとセットアップ
A.8.1 Cassandraをセットアップする
A.8.2 Cassandra用にlog4jをセットアップする
A.8.3 ソースからCassandraをインストールする
A.8.4 Couchbaseをインストール、セットアップする
A.9 Nagiosのインストールとセットアップ
A.9.1 Nagiosをダウンロード、ビルドする
A.9.2 Nagiosをセットアップする
A.9.3 Nagios Pluginをコンパイル、インストールする
A.10 RRDtoolのインストールとセットアップ
索引
コラム目次
RDBMS の欠点
データサイズの数学
ディスクストレージとデータの読み書き速度
Thrift とは何か
なぜMongoDB とApache Cassandra だけなのか
MongoDB のデータディレクトリとポートをカスタマイズする
Apache Cassandraノードを実行するための基本設定
Redisサンプルについて
BSON はプロトコルバッファのようなものか
Redis がOS の仮想メモリスワッピングを使わないのはなぜか
一意なプライマリキー
MovieLens
クエリードキュメントのデータ型
垂直スケーリングの難点と分散コンピューティングの落とし穴
クラウドで利用できるリレーショナルデータベース
SimpleDB のリージョン
認証要求
Hive はリアルタイムクエリーのためのツールではない
BSON の仕様