ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ビッグデータ管理としてのPostgreSQLのhstore・JSON、MongoDB

2015-01-19 16:10:45 | AI・BigData

1月18日、「ビッグデータ管理入門」の前半を、NIIで聞いてきた
その内容をメモメモ
まずは、講義内容をメモメモ。

<HR>

内容:データ管理手法
 NoSQL
   RDB(Postgre Hstore)
   ドキュメント指向(MongoDB)
   列指向(Cassandra)

第一回~第4回
 ・ビッグデータの概念とデータ管理手法
 ・RDB
 ・ドキュメント指向
 ・列指向

第5回~第8回
 ・ゲノム解析(病気判定、リスク、weka)

ビッグデータの概念と管理手法
 ビッグデータとは
 データ管理の要件

ビッグデータとは
 定義1:大容量データ:電気代だけでも大変!
 定義2:3つのV
 →何かわからないデータから、何かを導く出す

ビッグデータの課題
  収集、
 ●取捨選択、
 ●保管、
 ●検索、
  共有、
  転送
  解析
  可視化
→●が今回の範囲

データ管理に対する用件
  試行錯誤のサポートが必要
  スペシャリストのモデル化+スペシャリストが見落としているところ

CAP定理
・分散システムに関する定理
・以下の3つは同時には成り立たない
   Consistency  一貫性
   Availability 可用性
   Patition-Tolerance 分断体制
 APが満たされる→一貫性X
 CPが満たされる→アベイラビリティX
 CAが満たされる→分断されるとX

リレーショナルデータベース
 メリット:モデルが直感的
 デメリット:柔軟性、スケーラビリティ
 RDBは、一貫性を重視
     ビッグデータは製品依存(Oracleはできるとか)
     スパース:無駄なカラムを作ってしまう

NoSQLによるデータ管理
  Not Only SQL
  特徴 柔軟なスキーマ
     スケーラビリティを確保しやすい
     データの結合がないものが多い
  種類
    ・ドキュメント  MongoDB,CouchDB
    ・KVS(key Value Store) Dynamo
    ・列指向 Cassandra HBase
    ・グラフ指向 Neo 4J

ドキュメント指向
 ドキュメントという単位でデータを管理
  →各ドキュメントが独立
   パフォーマンスはやや劣る

 KVS
  単純なので早い memcached KyotoCabinet

 列指向
  Google Big Tableに基づいた管理手法
  Cassandra HBase
  カラムファミリー、ロー、カラム(キーと値)
  ディスクの使用効率がよい。検索不得手

 グラフ指向
  MongoDBのほうが設計しやすい
  Cassandraはキーの名前、列の設計が難しい
   Cassandra CQL
   MongoDB Javascript
 取捨選択、保管、検索は3つをすべてNoSQLでやる必要はない


<<2時間目>> RDBにおおけるビッグデータの扱い方
・データ管理に対する用件
  ビッグデータ解析
   スケーラビリティ
   試行錯誤のサポートが重要
 RDBにおけるスケールアップ レプリケーション
   →単一障害店をもつ、
    Writeの負荷→ノードのスケールアップ(サーバー増強):コストの問題

Google F1 分散データベースの仕組み
OoODE クエリの並列発行

柔軟なデータ構造
  スキーマに基づくテーブルにデータ格納
  可変なデータの扱い方

リレーションモデルの工夫
 EAV Entity-Attribute Value
  利点 RDBの一般的な機能
  欠点 汎用的なクエリを書きにくい
     階層構造を扱いにくい
   →隣接リストモデル、入れ子集合モデル

PostgreSQL hStore,Json
Oracle/MySQL パフォーマンスのため

hstore key-valueのペア集合を格納
Json JSON形式のデータを格納
  拡張機能の有効化 CREATE EXTENTION hstore必要

■hstore

テーブルの作成
CREATE TABLE logs(
id SERIAL PRIMARY KEY,
datetime TIMESTAMP,
attribute hstore
);

データの挿入
INSERT INTO logs
(datetime,attributes)
VALUES
(NOW(),
'target => "index.html",
referer => "http://google.com",
parameter=> "x=1"');

データの検索
 SELECT * FROM logs WHERE attributes?'target';

(資料にないが、課題にあったもの)
 SELECT COUNT(*) as kensu from logs where attributes->'target' = 'index.html';

■JSON

テーブル作成

CREATE TABLE logs2 (
id SERIAL PRIMARY KEY,
datetime TIMESTAMP,
attributes json
);

データ挿入
INSERT INTO
logs2 (datetime,attributes)
VALUES
(NOW(),
'{"tagret":"index.html",
"referer":"http://google.com",
"paramater":{"x":1}}');

データの検索
SELECT * from logs2 WHERE attributes->>'target'='inex.html';

(資料にないが、課題にあったもの)
SELECT COUNT(*) as kensu from logs2 where attributes->>'target' = 'index.html' AND attributes->'parameter'->>'x'='1'";


■操作
・JDBCドライバで操作できる
・HStoreはHashMapとして扱える
  →古いJDBCドライバはPgobjectになる
・JSONはPGobjectとして扱える
  →JSONは外部ライブラリ(本講義ではJackson)を利用

■演習のやりたか
(1)eclipseを立ち上げる
(2)window→Open パースペクティブ
(3)other→gitを選択
(4)gitのパースペクティブで、git cloneを選ぶ
(5)出てきたダイアログでURIに指定のURLを入れる
(6)コマンドプロンプトで、落としてきたフォルダにいく(CD)
(7)mvn eclipse:eclipse
(8)インポートする
   general→existing project into workspace
   (7)で作ったところ指定


<<3時間目>> Mongo
ドキュメント指向データベース
  ドキュメント単位でデータ格納
  フォーマットが決まっている:XML,JSON,YAML・・・

MongoDB
・オープンソース
・C++
・ゲームなどで

JSON形式の格納
 内部的にはBSON(バイナリーJSON)
 スキーマレス

Mongo
 高速度
   インデックスを使ったデータの参照が可能
 高可用性
   自動的なフェイルオーバー
   レプリケーション
 自動的なスケーリング
   自動シャーディング
    →シャードキーをどう決めるかが重要

シャードキー決め方
 レンジベース
 ハッシュ関数で
→スプリッター、バランサー

データのモデリング
  JOINできない
 →ドキュメント埋め込み、ドキュメント参照

コマンドラインからの使用
mongo
show dbs;
use mydb;
show collections;
  テーブルに相当するのが、コレクション
db.testData.find();
  testDataコレクションの中身を表示

Javaからの制御例
Mongo mongo = new Mongo(host poro);
DB db monogo= mongo.getDB(dbname);
DBCollection collection = db.getCollection("accessLog");
BasicDBObject doc = new BasicDBObject("target", "index.html");
System.out.println(collection.count(doc));
この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ウェアラブルExpoに行って来... | トップ | Javaによるメールの受信について »
最新の画像もっと見る

AI・BigData」カテゴリの最新記事