NoSQL

NoSQLの誕生

大量データを扱う
RDMBS->SoSQL

1.スループット
2.信頼性
3.スケーラビリティ

NoSQL種類

1.キーバリューストア
2.列指向
3.ドキュメント指向

キーバリューストア

・シンプル!キーと値
・キャッシュDB
アクセスログ一時保存

memcached
Bekeley DB
Tokyo tyrant

列指向

MapReduce 大規模データ用のクラスタフレームワーク

列単位でのデータ管理
keyとバリューのデータが列ごとに作成される
1.key Value , key Value….

HBase
BigTable
Cassandra

1.RDBでは扱いきれない大規模なデータのスケーラブルな処理のため
2.MapReduceのためのデータストレージ

ドキュメント指向

自由なドキュメント指向のデータ構造。

key name0 => vakue

name1 => value,value

スキーマを事前に登録しない

MongoDB
CouchDB
SImpleDB

1.大規模データの更新参照
2.JSON形式でのデータ取得、 jsとの親和性が高いのでフロントの開発工数を減らせる

NoSQLまとめ

NoSQLをいれることはそれ自体がスループットをあげる
単純なしくみなので、むしろアプリケーションの設計をNoSQLにあわせる形になる

NoSQLとCAP定理

分散コンピュータ間の情報複製についての定理
1.Consistency
2.Availability
3.Partition-tolerance

consistency 一貫性

どのノードでも一貫性があることを示す
レプリ遅延時はconsistencyがないと言える

Availability 可用性

内部で問題が起きても、外部からみて問題ないこと

Partition-trelance 分割耐性

データノードが分割された場合でも、継続して正常な動作が行えるか

ジレンマ

※CAP定理のうち、2つは満たせるが3つを満たすことは出来ない

1.CA (RDBMS)
一貫性と可用性を持つ。
分割耐性がない。

2.AP Cassandra,CouchDB
分割グループでサービス継続可
一貫性は保たれない

3.PC MongoDB,HBase
分割しても 一貫性を保つ。
※分割グループを切りはなす

一般的にPは前提であるので、CかAか
Cを保たなければいけない場合はあまりないので、CPが基本。

BASE

ビッグデータを扱うのに、トランザクションのようなACIDの考え方は邪魔

BA Basically Avaiable まず可用性
S Soft-State 状態繊維
E Eventual Consistency 結果的な整合性

Consistent Hashing

ハッシュが一番一様に分散してくれる
インパクトを限定的にしてくれる

Hadoop

大量データを処理する
1.HDFS ファイルシステム (Hadoop Distributed FIle System)
2.MapReduce 分散基盤

HDFSではひとつのファイルを複数のノードに分散配備する

RDBMSHadoop+HBaseの比較

1.データー...データサイズ ペタバイト単位
2.アクセス...バッチ処理が基本、インタラクティブ (リアルタイム)
3.更新…何度も書き込める
4.構造...動的スキーマ
5.整合性…高い
6…スケーラビリティ…直線的

MapReduceの設計が難しい

SQLに対して、解析が難しい
そこで、MapReduceの設計を簡単にするために中間言語が生まれた。

1.Pig
2.Hive

=> Hadoop + HBase + (PigLatin,Hive)によって弱点なし

注意点

JBOD
※普通のストレージ装置を使う

クライアントチューニング

読み込みが遅い95%はフロント処理のせい

1.リクエストを減らす
ヘッダ情報にキャッシュの記述を行う
If-Modified-SInce いちおう通信する
Expires 通信しない
Js,cssをひとまとめに
できるだけリダイレクトさせないようにする
CSS Sprite

2.ファイルサイズを小さく
画像ファイルを選ぶ
写真やグラデーション -> jpg
アニメーション -> gif
他 -> png
HTTP圧縮 mod_deflate
ファイルサイズを小さく
コメントを消す
インデントを消す
3.その他
cssは冒頭に配意
jsはソースの最後に才知
手前
コンポーネントを別のホストに
HTTPでは同時並行接続数が2本なので

JavaScript

変更しない場合は外部ファイルに
ライブラリーは多様しない
Ajaxリクエストは減らす
DOMへの参照を効率的に
DOMアクセスを減らす
非効率的なループの修正
関数のインライン処理
もじれつ結合に注意