(3時間無料セミナー)NoSQLのApache Cassandraを知ろう!に行ってきた!その内容をメモメモ
NoSQLのApache Cassandraを知ろう!
Apache CassandraとはIoT向けデータベース
Google BigTable
Amazon DynamoDB
この論文からNoSQLきてる
Apache Cassandra 2010年ごろ盛り上がる
→facebookが作った
元気なくなる
→Facebookがやめた
実際のところ、インスタグラム、ゲームなどの裏ではつかってる
タイムラインでは使っていない
最近盛り返す
→Appleが大々的に発表 27000台、数十ペタバイト
また注目
→Sony PS4のマイプレイステーションの
内容は変わらない:大量のデータをスケーラブルで
必要のないときマシン削除できる→クラウド向け
アメリカの小売店:ブラックマンデー
POSメインフレームを使ってた→その日だけ100%
Cassandraに変えると・・サーバー倍にして処理
DataStax
Cassandraはオープンソースで無料
サポートとかをカバーするのがDatastax
→Apache Cassandraのディストリビューション
すぱーく
そらー
たいたん:グラフDB
などをつける
DSE(でーたすたっくえんたーぷらいず)製品
Linux→Cassandra
RedHat→DSE
レガシーRDBMS not ビッグデータ?
3つのV
Volume(量):桁違いのデータ量
Velocity(頻度):高頻度でのデータの発生
Variety(多様性):様々な種類のデータ
そもそも、RDBでできるのか?
NoSQLって何?位置づけ
OLTP DWH
RDBMS (RDBMS)
ExaData 8億をなんだいも・・
↓
NoSQL Hadoop
OLTP DWH
RDBMS (RDBMS)
RDBとは違う段階、違うニーズ
RDBで大変だったところをHadoopで
NoSQLは大量のデータでないと必要ないの?
・・1T、2Tでいいケース:ありま~す
そこを見極めないとデスマーチ
Relational? NoSQLって何
NoSQL=Not only SQL?
データベース≠RDBMS
OR
Post Relationalだとおもっています
オペレーショナルDB VS 分析DB
Operational Database
2006
2007
NoSQL
分析DB
2003 Hadoop Googleファイルシステム
2004 MapReduce
DBで使えるようになるのは7年
ブリティッシュ Gas
地に付いたDB
The 451 group.com
RelationalにするかNoSQLにするか
Relational
論理データモデル
物理データモデル
テーブル
テーブルがあってSQLを作る
Web系、ゲーム系:毎日スキーマが変わる
IoTデバイス:各マシンのフォーマットは違う
→RDBだとマスタマネジメント必要
→NoSQL:そのままつっこめ
→渋谷かいわいでNoSQLを使う理由
そのほうがわかりやすい
→でーたのヂュプリケートがおこる
→データは2重持ちしちゃいなさい
メインフレーム:非正規化
リレーショナル:正規化
NoSQL:二重もち、大福帳
オペレーショナルデータベース
トラでショナル:RDBMS
どうでもいいもの
IOT:RDMS以外
↓
全部RDBMS?
繋がるネット時代の新技術
1970年代 階層DB
1980年代 リレーショナル
2010移行 コンテンツ・データを中心に
■NoSQLのApache Cassandraを知ろう!
Cassandraとは
Google
スキーマ
めむてーぶる
こんぱくしょん
SSてーぶる
こみっとろぐ
Amazon
あーきてくちゃ
分散
レプリケーション
ごしっぷ(ぷろとこる)
おもしろいかんがえ
・マスターというのがない→単一障害点がない
・クラウド、オンプレミス共用にできる
・リニアなスケーラビリティ→マスタがないから
It's Always On
・Net Flix
カオスモンキー:ランダムに殺す
AWSのリブート:100%サービス
ゲーム会社:初日がピーク
レイテンシーは変わらない
なぜDSE
開発用ドライバー無料
GUIは半分無償半分有償
有償
セキュリティ
QAされた
もう一こ上
インメモリー
分散エンジン
全文検索エンジン
エンタープライズ・セキュリティ
あなたはすでにDataStaxを使っているはず
ニュースサイト
オンラインショッピング
:
:
■Cassandraの用語
・Cassandraノード
サーバーまたはマシーンまたはバーチャルインスタンス
1つのJVMが動く環境
Cassandraはコモディティサーバーで使うように作られている
SANとかでなく
マシンは別々→安いサーバーでいい
・クラスター
=データベース
3ノードの1クラスターDBといういいかた
最悪1台のノードで1クラスター→それなら、Mongoのほうが。。
HAなら、最低3台がいいのでは→クラウド上なら
オンプレの場合、4台のマシンが1ヶ月しんでも
・データセンター
アメリカとJapan:べつべつのところにデータを置く
→1クラスターの中でできる
Create Tableするときにできる
論理データセンター
物理データセンター
・ワークロードでのデータセンターでの分割
データセンター3箇所(東京、サンフランシスコ、クラウド)
東京でオペレーション&分析→遅くなる
3箇所に分析をかける→いままではETLかゴールデンゲート
接続先は?
アプリケーションを書くときに、どこに接続するか意識して書く
ただし、ローカルの場合、ローカルファースト
・クラスタ
8台のノード:データ分散して持っている
ケータイ:うらがCassandra→5個コピー
・Cassandraのデータ・パーティション分割の概要
分散ストラテジ2つ
ランダム→デフォルト
順序指定→偏ってしまう
レプリケーション係数(ファクター)
1:1台 5:5台
クラスターの中で、どっかにもつ
キーにハッシュをかけてトークンを作る→どこに行くのか決まる
・レプリケーションストラテジー
データセンターのどこのラックに持たせるまで指定できる
→ネットワークトポロジー(あんまり使わないかな・・)
Create Keyspaceをするときに指定できる
・スニッチ
順番を決める
・ゴシップ:ノード間のコミュニケーション
「あいつ死んでるらしいぜ!」というのを各マシンへ
→伝えていく
・ロードバランス
ラウンド・ロビン
データセンター認識ラウンドロビン
ローカルを先に認識、なかったらリモート
・容量の追加:かんたん
・バーチャルノード(Vnodes,仮想ノード)
追加したとき5台に1台ついか 5分の1づつ渡す
場所に依存しない
・1つのノードがダウン
→何個に書き込めたら良いのか・・
調整可能なデータ整合性
もし、ALLとやってしまったら、2フェーズコミットと同じ
One
Quorum
・データが一致しないとき
タイムスタンプを見て判断
ヒントつきハンドオフ→タイムアウト有り
リペアで整合性
いつかは同期する
・APIのコネクターとドライバー
・DataStaxOpsCenter
■Cassandraスキーマ
・カラム及びその構成要素
・テーブル
・キースペース
概観
・キースペース
テーブル:複数の行、パーティションから
パーティション:桁
カラム
カラムの構成要素
・カラムはCassandraの基本的なデータのタイプ
カラム名
カラム値
タイムスタンプ
TTL(任意)
カラム名
・必須
・任意の値、任意の型→タイムスタンプをカラム名にしてもOK
・テーブルで一意
・かならず値とともに格納
カラム値
・任意の値、型
・空でもOKだが、必須
カラム値のデータ型はバリデータ
カラム名のデータ型はコンパレータ
データ型はいろいろ
カラムのタイムスタンプ
64ビット整数
ベストプラクティス
:すべてのクライアントで一貫性のある形で作成
必須
カラムのTTL
Insert時に定義
期限を整数値で定義(秒単位)
特殊なカラム型
カウンター
加算/減算が可能
コレクション
以下の2つのコレクション型
SET:CQLのコンパレータでソート
List:順序を指定して
MAP:キーはコンパレータでソート
テーブル(カラム・ファミリー)
・RDBにおけるテーブルに似ている
パーティション(行)の集まり
調整可能な整合性
非正規化
I/Oの回避
読み取りパスを簡素化するため
静的または動的
静的なテーブル
・RDBのテーブルに似ている
動的なテーブル
・Wide Rows(横に伸びていく)
パーティションのクエリーに対して応答が得られるように構造化
CQL行とストレージ行(パーティション)
キーの構造
パーティション(行)キー
クラスタ化キー
クラスターか順序
何もしなくてもディスク上でカラムをソート
順序は変更可能
ソート
クラスター化カラムはORDER BYの対象にできる
複合パーティションキー
Initial Token
先頭トークン値から次のノードのトークン値までが担当になる
静的カラム
1つのパーティションの中で、同じパーティションの全ての行によって共有される特殊なカラム
たとえば、キーに対する名前など
サイズ制限
・テーブルのサイズ上限=クラスターのサイズ上限
・1つのパーティション→1つのノードに収まる必要アリ
・理論上は20億まで、カラムをもてます
・カラム値(セル)の最大サイズは2G(現実派10M程度が妥当)
・ヒープサイズ
1個テーブルをもつと、1メガバイト→テーブル数を増やさない
キースペース
・テーブル(カラムファミリー)の集合体
・レプリケーションストラテジ設定
・レプリケーション係数を設定
Cassandra Query Language CQL
・RDBのSQLに似ている
Datastax DevCenter
CQL分を作成して実行できる無償のビジュアル・クエリー・ツール
バッチの構文
→一階書き込んで実行
LWT(Lightweight Transaction)IF notができる
■データ・モデリング
クエリーを基準としたデータモデリング
・クエリーから考える:どういったデータを引っ張りたいのか
非正規化する
データが重複してよい
・ユースケース
製品カタログ
IoT
レコメンデーション
不正検知
■ショッピングカーと
・ダウンタイムが発生しない
・オンラインの買い物客はスピード大事
・スケールすることも重要
・Cassandraでは、必要な情報を全て1つのテーブルのパーティションに保持する
・利用者はそれぞれ1つまたは複数のショッピングカートを持てる
→ユーザー名とカートの複合パーティション
■ユーザー・アクティビティの追跡
・挙動にリアルタイムで反応
・バッチでは遅すぎる
ユーザーアクティビティのモデル
長期の行動データはバッチに持っていける
ユーザーが行った行動のテーブル
ユーザー名
時間
TTLを入れておく
永続的データ
書き込みは早い
モデルを使う
■ログ収集
・全てのログデータを高速で収集
・ログの生成場所に近いCqassandraを使う
複数データセンターの利用
・ダッシュボード、参照など
・データを収集して様々なテーブルに振り分ける
・参照用のテーブル
・ログ:ダッシュボード
■インデックスの作成
→あんちパターン(できるけど)
・テーブルを使用したインデックス作成
・部分ワード・インデックス
・店番号と商品番号:複合行キー
・ビットマップインデックス
挿入時に可能性を全部入れておく
■サーチ(検索)
・Solrの統合
・非常に高速なパフォーマンス
・solrの自動シャーディング(Cassandraレプリケーションによる)
■アナリティクス
・Hadoopとのインテグレーション
・Spark
■Javaドライバ
・CQL3
昔のすりふと(Thrift)ベースのAPIよりはるかに早い
英語でJavadocあるので見てね!
■まとめ
http://docs.datastax.com/ja/index.html