Cassandraのビジネス活用事例2014	自己紹介	
冨田 和孝 (@railute)	  	  肩書き： 株式会社ＩＮＴＨＥＦＯＲＥＳＴ 代表取締役社長	  Cassandra商用サポート、Cassandraコンサルティング他	  	  Cassandra勉強会主宰	  ２か月に一度程度開催。現在、第27回まで開催。	  	  職種：本職はＤＢ・インフラ系エンジニア	  以前、某レストランサーチのＤＢＡ	  高負荷・大容量・大規模のOracleRACとPostgreSQLと	  MySQLに苦しめられ続けた経験あり。	  

Agenda	} Cassandra最新ロードマップ	  RoadMap	  } Cassandra	  2.0	  } Cassandra	  2.1	  } Cassandra	  3.0	  }} 最新活用事例	  ＤＲ	  } アナリティクス	}

Road	  Map	} Cassandraは6ヶ月毎のリリース（一応）	
2011年1月	  0.7	

2011年6月	  0.8	• CQL	  • Counter	0.7	2011年10月	  1.0	

2012年4月	   2013年1月	  1.1	
1.2	• Row Ｌｅｖｅｌ isolaHon	

0.8	

• 動的スキーマ変更	  • セカンダリ・インデックス	

1.0	

1.1	

• Compression	  • Leveled-­‐compacHon	

2013年8月	  2.0	

2014年6月?	  
2.1	

2015年1月???	  
3.0	

• Trigger	

1.2	

2.0	

• Virtual	  Node	  • CQL3	  NaHve	  Protocol	

2.1	

• Custom	  Type	

3.0	

Cassandra	  2.0	} 新機能	  }Trigger（但し2.1で大幅変更予定）	
・処理を記述したjar作成しCQLから呼び出しを行う	  public	  interface	  ITrigger	  {	  	  	  	  	  	  /**	  	  	  *	  Called	  exactly	  once	  per	  CF	  update,	  returned	  mutaHons	  are	  atomically	  updated.	  	  	  *	  	  	  *	  @param	  key	  -­‐	  Row	  Key	  for	  the	  update.	  	  	  *	  @param	  update	  -­‐	  Update	  received	  for	  the	  CF	  	  	  *	  @return	  modiﬁcaHons	  to	  be	  applied,	  null	  if	  no	  acHon	  to	  be	  performed.	  	  	  */	  	  public	  CollecHon<RowMutaHon>	  augment(ByteBuﬀer	  key,	  ColumnFamily	  update);	  }	CREATE	  TRIGGER	  <name>	  ON	  [<keyspace>.]<table>	  USING	  '<class>'	Cassandra	  2.0	} 変更点	  } Virtual	  nodeのデフォルト化	  } NaHve	  Protocolのデフォルト化	  Cassandra	  2.0	} Virtual	  nodeのデフォルト化	  ノードを論理的に分割し各ノードにランダムに配置することにより負荷の分散を行う。	
ノード1	

ノード3	

ノード2	
ノード3	

ノード１	

ノード2	

ノード3	

ノード２	

ノード1	

ノード３	

ノード1	

ノード3	

ノード1	

ノード2	

ノード3	

ノード1	

ノード3	

ノード2	
ノード2	
ノード1	

ノード2	

Cassandra	  2.0	} NaHve	  Protocolのデフォルト化	  Client	  	  Thrij		  	  CQL3		

CQLのクエリは	  Thri)を使用していた	

Cassandra	  	  Thrij		  	  CQL3		

CQL3用のProtocolが	  追加された	  ・ノード間のスキーマ反映が高速に	  ・複数のリクエストを同時に処理する事ができるように	  ・送信データは圧縮する事が可能に	  ・Client対応増加中	  Cassandra	  2.0（2.0.6以降）	
} CQL文法の変更	  複合キー内の範囲指定が可能に。	
CREATE	  TABLE	  test	  (	  	  	  	  	  k	  int,	  	  	  	  	  c1	  int,	  	  	  	  	  c2	  int,	  	  	  	  	  PRIMARY	  KEY	  (k,	  c1,	  c2)	  );	k | c1 | c2	--------	
0 | 0 | 0	
0 | 0 | 1	
0 | 1 | 0	
0 | 1 | 1	cqlsh:keyspace1>	  SELECT	  *	  FROM	  test	  WHERE	  k	  =	  0	  AND	  (c1,	  c2)	  >	  (1,	  0);	  	  	  k	  |	  c1	  |	  c2	  -­‐-­‐-­‐+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐	  	  0	  |	  	  1	  |	  	  1	  	  (1	  rows)	  	  cqlsh:keyspace1>	  SELECT	  *	  FROM	  test	  WHERE	  k	  =	  0	  AND	  (c1,	  c2)	  >	  (0,	  1);	  	  	  k	  |	  c1	  |	  c2	  -­‐-­‐-­‐+-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐	  	  0	  |	  	  1	  |	  	  0	  	  0	  |	  	  1	  |	  	  1	  Cassandra	  2.1	} 新機能	  }ユーザー定義型	
・ユーザー側でコレクション型向けに複合的型定義が可能に。	  	  CREATE	  TYPE	  address	  (	  	  	  	  	  	  	  street	  text,	  	  	  	  	  	  	  city	  text,	  	  	  	  	  	  	  zip	  int	  	  	  );	  CREATE	  TABLE	  user_proﬁles	  (	  	  	  	  	  	  	  login	  text	  PRIMARY	  KEY,	  	  	  	  	  	  	  ﬁrst_name	  text,	  	  	  	  	  	  	  last_name	  text,	  	  	  	  	  	  	  email	  text,	  	  	  	  	  	  	  addresses	  map<text,	  address>	  	  	  );	  	  INSERT	  INTO	  user_proﬁles(login,	  ﬁrst_name,	  last_name,	  email,	  addresses)	  	  	  VALUES	  (	  	  'tsmith',	  	  	  	  	  	  	  	  	  	  	  'Tom',	  	  	  	  	  	  	  	  	  	  	  'Smith',	  	  	  	  	  	  	  	  	  	  	  'tsmith@gmail.com',	  	  	  	  	  	  	  	  	  	  	  {	  'home':	  {	  street:	  '1021	  West	  4th	  St.	  #202',city:	  'San	  Fransisco',zip:	  94110	  }});	

Cassandra	  2.1	} 新機能	  }コレクション型へSecondary	  Indexを設定可能に	  	 CREATE	 TABLE	 products	 (	 	 	 	 	 	 	 id	 int	 PRIMARY	 KEY,	 	 	 	 	 	 	 description	 text,	 	 	 	 	 	 	 price	 int,	 	 	 	 	 	 	 categories	 set<text>,	 	 	 	 	 	 	 features	 map<text,	 text>	 	 	 );	 	 	 CREATE	 INDEX	 cat_index	 ON	 products(categories);	 	 	 CREATE	 INDEX	 feat_index	 ON	 products(features);	 	 	 SELECT	 *	 FROM	 products	 WHERE	 features	 CONTAINS	 '32-inch';	 	 	 	 	 id	 	 	 	 |	 categories	 	 	 	 	 |	 description	 	 	 	 	 	 	 	 	 	 	 	 	 	 |	 features	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 |	 price	 -------+----------------+--------------------------+----------------------------------------+-------	 	 29412	 |	 {'hdtv',	 'tv'}	 |	 32-inch	 LED	 HDTV	 (black)	 |	 {'screen':	 '32-inch',	 'techno':	 'LED'}	 |	 	 	 929	 	 38471	 |	 {'tv',	 'used'}	 |	 	 	 	 	 	 	 	 	 	 	 32-inch	 LCD	 TV	 |	 {'screen':	 '32-inch',	 'techno':	 'LCD'}	 |	 	 	 110	 	 Cassandra	  3.0	} 判明している事	  }CQL2の削除	

最新活用事例	}

DR	  } Social	  GAME	  Cassandra	Ec2MulHRegionSnitchで	  マルチＤＣ	ゾーン1b	  (Rack)	

client	Cassandra	

client	Cassandra	

Cassandra	

Tokyo リージョン	

Cassandra	

ゾーン1b	  (Rack)	
Cassandra	

西海岸 リージョン	  最新活用事例	} アナリティクス	  }ソーシャルストリーム解析	  ソーシャルストリーム	

Cassandra	

Hadoop	Presto	  Spark	

client	Presto	  Spark	
hadoop	Cassandra	
hadoop	Cassandra	
Presto	  Spark