NoSQL徹底解剖!@ヒカリエ 勉強会に参加してきました。

最近MongoDB入門した @DAI199 ですが、NoSQLに興味が出たのでNoSQL勉強会に参加してきました。
イベントリンクはこちら→
【NoSQL徹底解剖!@ヒカリエ】 最先端の新技術研究を行うシーエー・アドバンスの技術責任者が登壇!
ハッシュタグはこちら→#lvtve

追記:2012/10/11 22:30
イベントレポートがアップされました! 以下URLになります。
>> 「NoSQL徹底解剖!」が開催されました! – @Agent

追記:2012/10/03 09:53
当日スライドがアップされました! 以下URLになります。
>> NoSQL勉強会

講演者について

大谷 祐司 様
→Facebook:https://www.facebook.com/yuji.otani.16
株式会社CA ADvance(シーエー・アドバンス)技術統括本部 本部長 兼 技術責任者

インターネット広告運用のプラットフォーム「SearchSuite」をゼロから一人で立ち上げる。
サイバーエージェントでのスタッフMVPをはじめ、数多くの賞を受賞する。
2011年11月よりシーエー・アドバンスの技術責任者に着任。要件定義から開発までをマルチにこなし、多くのシステムをリリースする。
「ADvanceFriday(金曜午後に新しい技術に取り組むことができる)」「WorkADvance(沖縄勤務)」等、多くの社内制度を実現。

仲里 淳矢 様
 →Facebook:https://www.facebook.com/j138cm
株式会社シーエー・アドバンス(CA ADvance,Inc)エグジニア

岩瀬 高博 様
→Facebook:https://www.facebook.com/takahiro.iwase
神戸デジタル・ラボ 上級技術者

分散KVS「okuyanma」の開発者 CEP Setsunaの開発
大規模eコマースサイトのチューニング、運用
分散処理、データベースの研究及び適応
OSS,Java,DB,車が好き

講演内容

■NoSQLってなに?
 ・今まで主流であったRDBMSとは
  →RDBMSの強み・弱み
 ・NoSQLがRDBMSと違うところ
  →NoSQLの強み・弱み
 ・どういった開発ケースの際に使用すべき技術なのか

■どんな種類があるのか?それぞれどんな特徴があるのか
 ・Cassandra
 ・HBase
 ・TokyoTyrant
 ・MongoDB など

NoSQL徹底解剖

内容:
◯CAアドバンスとは
◯NoSQLの特徴
◯NoSQLが苦手なこと
◯NoSQLの種類
◯CAP定理について
◯CAアドバンス社で検証したNoSQL
◯CAアドバンスでの採用
◯最後に

◯CAアドバンスとは

サイバーエージェントの子会社。東京と沖縄に事業所がある。(東京:50名、沖縄:250名)
技術推進グループを立ち上げ、NoSQLの研究をしている

■NoSQLの用途
・リスティング広告のデータに使っている
・サイト監視対象の画像やテキストデータ→アメーバやアメーバピグのものを監視している。そのデータ分析のためにNoSQLを使用している
・サイバーエージェントの大量のログデータの分析をしている

上記3つはMySQLだと読み書きの性能に限界を感じていた。
資金投入出来る環境でもないため、限られた資源を最大限使うためにNoSQLを使用することにした。

■CAアドバンスで使うデータ量はどれくらい?
▶リスティング広告のデータ
1日600万〜1500万レコードくらい
▶キーワード・広告
全部で20億レコードくらい。10%くらいが1日に更新される
▶サイト監視対象の画像、テキストデータ
1日500万〜1000万レコードくらいずつ増加。
▶システム運用に関する各種ログデータ
1日2000万レコードくらいずつ増加

◯NoSQLの特徴

▶固定されたスキーマに縛られない
  →スキーマレス:自由に絡む定義が出来る
  →KVS(KeyValueStore):キーと値をセットで保持する

▶関係モデルの結合操作を利用しない(JOINが出来ない)
  →テーブル間のJOINが出来ない
  →必要であればアプリケーション側で実装
  →JOINがない理由としては、ロックが発生してしまうため

▶水平スケーラビリティが確保しやすい事が多い
  →サーバの追加が容易
  →自動的に負荷分散を行なってくれるケースが多い

▶トランザクションが利用出来ないものが多い
  →データの一貫性よりも速度を重視しているから
  →必要ならアプリケーション側で実装する必要がある

▶SQLではない方法でデータを操作する
  →memcachedプロトコル等の汎用的なものを使用
  →独自のコマンドで操作を行う
  →言語側でライブラリが提供されている場合がある

◯NoSQLが苦手なこと

▶データを結合させて取り出す
  →KVSではデータをキーの単位でしか操作できない
  →階層モデルはテーブル間の結合が出来ない

▶データの整合性を完全に保つ
  →複数サーバにデータが分散している場合、サーバ間の整合性が保証されないケースが多い

▶柔軟な検索/集計/並び替え
  →SQLのように、値に対しての操作は苦手
  例)MongoDB
   検索用のコマンドは容易されているが、実行速度が非常に遅くなる
   シェルを使ったMapReduceで集計すると速いが、シェル作成の手間がかかる
  例)KVS
   そもそも値が操作出来ないのでアプリケーション側一度取得して操作する

◯NoSQLの種類

▶分散KVS
データをキーとバリューのペアにして管理するデータベース。高速な読み書きが可能だが、複雑な検索処理には向いていない
例)memcached,Couchbase,okuyama,Amazon Dynamo, kyoto cabinet

▶列指向データベース
データを列単位でひとめとめにして管理するデータベース。大容量に対して検索を行うなど、処理の負荷が高くてRDBMSでは高性能を期待できない場合でも、高速な読み書きが可能
例)Google BigTable, Amazon Simpledb ,HBase, Cassandra

▶ドキュメント指向型データベース
特定のスキーマを持たないデータベース。構造が複雑なオブジェクトをそのまま保存しやすい。スケーラビリティが高く、サーバを容易に追加出来る
例)mongoDB,Couchdb

◯CAP定理について

CAP定理とは→wiki

C (Consistency)
 全てのサーバーでおなじデータが見れる
A (Availability)
 どんな状態でもデータの参照が可能である
P (Partition-tolerance)
あるサーバーのネットワークが分断されても、別のサーバーからデータを参照可能であること

例)RDB(MySQL)はCとAを保証しており、Pを犠牲にしている
C:サーバーが単一なため、一貫性は保証されている
A:ネットワークを超えた高頻度の読み込みロックは発生せず、高い可用性が保証されている
P:構成するネットワークが途中で切れたり大きく遅延した場合、そのシステムとしては動作が保証されなくなってしまう

例)Apache CassandraはAとPを保証。代わりにCを犠牲にしている
C:複数サーバにデータが存在し、サーバ間のデータ同一性は保証されていない。
A:単一障害点となるノードが存在しない。同一のデータが複数サーバで保持されている。
P:ネットワークが分断されても、同一ネットワーク内のノードで運用を続けることが出来る

NoSQLにも様々な種類があるため、システムに求められるものは何か、解決したい問題は何かを意識してNoSQLを選択する必要がある

◯CAアドバンス社で検証したNoSQL

Cassandra

target=”_blank” rel=”noopener noreferrer”>

開発:Facebook
2008年公開、Javaで実装
開発体制:Apache Incubator
採用実績:楽天、docomo、Facebook、Twitter
Google BigTable+Amazon Dynamo
高可用性と冗長性を併せ持つ分散データベース

Google BigTableのデータモデルとは
無停止でサーバーの増加、削減が出来る。
常に1台のマスターが存在し、それが全体を管理している

Amazon Dynamoの分散システムデザインとは
高い可用性と永続性を達成するため、複数のホストにデータを複製する。

Cassandraの特徴
▶大規模データを扱えるように設計。
▶前ノードが同一の機能を持っており、管理サーバなどは存在しない。可用性の高いシステムが構築可能。
▶データは各ノードに自動的にレプリケーションが行われる。ノードを増やすことで容易にスケールアウトが可能。
▶ノードの追加、削除が停止せずに行える。
▶データはすべて4次元、5次元の連想配列で保持する
▶データ保持方法がしっかりしているため、データベース設計がしやすい

HBase

target=”_blank” rel=”noopener noreferrer”>

開発:Powerset社、Rapleaf社の社員
実装言語:Java
公開日:2007年2月(プロトタイプ公開)
開発体制:Apache Software Foundation
採用実績:Facebook,サイバーエージェント

特徴
▶KVS型の分散データベース
▶GoogleのBigTableを参考に設計
▶負荷に対して非常に高いスケーラビリティと性能を発揮
▶シンプルで強い一貫性モデルを備えている
▶自動ロードバランス、フェイスオーバー、自動シャーディング
▶行に対する操作はアトミック
▶更新前の古いデータが見えることがない
▶ReadよりもWrite性能が重視されている(RDBとは逆)
▶writeの動作は、メモリにバッファされ、一定サイズに達したらディスクに書き込む
データは3階層で保持する。一般的なRDBとおなじようなデータモデル

mongoDB

target=”_blank” rel=”noopener noreferrer”>

開発者:10gen社
公開日:2009年2月
実装言語:C++
開発体制:10gen社
採用実績:SAP,MTV,SourceForge,GILT Group,Disney,サイバーエージェント,NAVER他多数

ドキュメント指向データベース
▶スキーマレス
▶シャーディングが容易
▶レプリケーションが容易
▶スケールアウトが簡単
▶js実行エンジンを搭載しているので、MapReduce等に利用出来る

MapReduceとはwiki
大量出たを分散処理させるために使用されているフレームワーク。MAPで処理を多数のノードに分散し、Reduceで結合する

kyoto cabinet

開発者:mixi 平林さん
公開日:2010年5月
実装言語:C++
開発体制:FAL labs
採用実績:mixi

mixiにより開発されたkey-valueストアの機能を持ったデータストレージ。
TokyoCabinetに代わるものとして開発
memcachedからの比較的容易な移行が可能

memcachedとの違いは
▶データをファイルに書き出すことにより、永続性をもたせている
▶keyに対するvalueあたりの容量制限がない(memcachedは1Mの制約)
▶keyだけでなく任意のvalueを条件としてデータの検索を行える

◯CAアドバンスでの採用

▶システムのログ蓄積
mongoDB

・多くの採用実績
・大量データ操作時の安定したパフォーマンス
・PHPに専用のアクセスクラスが存在した

▶リスティング広告のレポートデータ蓄積
MySQL

・枯れたDBなので運用がしやすい
・データの一貫性と稼働率の高さが求められるため

▶社内標準のキャッシュ用DB
KyotoCabinet

memcachedプロトコルのために既存のプログラム資産を活かせる

運用しはじめて2ヶ月。何か起こりそう。。。

◯最後に

NoSQL導入にあたって、「問題点は何か」「導入によって何を実現したいのか」をしっかりと考えて選定するのが良い
検証にあたって、MySQL速いな、と感じた。「速い=NoSQL」っていう概念が崩れた。

一緒に働くメンバーを募集中です。
メールでのお問い合わせはこちら→ saiyo [at] ca-adv.co.jp まで

今回のNoSQL勉強会で、NoSQLの全体像がつかめた気がします。
データベースまわりは興味のある分野なので聞いていてすごくわくわくしました。
これからは一度触ったmongoDBで何かを作ってみたりしながら動向を追っていこうと思います。
講師の大谷 祐司様、仲里 淳矢様、岩瀬 高博様
今日はありがとうございました。