今から始めるdocument db
TRANSCRIPT
今から始める DocumentDB
Japan Azure User Group
濱本 一慶 (Hamamoto Kazunori)2015/08/29
2
自己紹介濱本 一慶(はまもと かずのり)@airish9
アプリケーションエンジニア
DocumentDB 始めました
Document 指向 DB は DocumentDB が初めて!
ふくあずの二次元担当
3
気が付いた
スライドを作り出して気が付きました…
4
気が付いた
今回で 20 回目の登壇です系も多いですがネタ …
5
気が付いた
記念すべき 20 回ですが特にオチはありません
6
さて。。。
DocumentDB の話をしましょう
7
今日のお話しについて
初めての方向けのお話しです
難しい話はしません
DocumentDB って言葉を覚えてもらえれば…
8
DocumentDB とは
2014/08/21 Preview
2015/04/08 GA
各種 SDK
.NET / Java / node.js / Python / JS
9
DocumentDB とは
NoSQL ドキュメントデータベースサービス
スキーマフリー
スケーラブル
一貫性
10
ドキュメントデータベース
DocumentDB↓
Document を格納する DB
11
ドキュメントと言えば…
12
ドキュメントと言えば…
違います
13
じゃあ…
14
じゃあ…
違います
15
これです
JSON です
16
DocumentDB とは
17
DocumentDB とは
18
スキーマフリー
NoSQL ドキュメントデータベースサービス
スキーマフリー
スケーラブル
一貫性
19
スキーマフリーRDB の場合はテーブル定義に沿ったデータのみ格納
name age sex birthday tel url山田太郎 29 male 1985/12/24 09097948706 NULL
name address tel urlあじゅーるパン工房 福岡県福岡市中央区天神… 0921234567 NULL
20
スキーマフリーDocumentDB は異なるデータも一纏めに格納
21
データの追加方法
どうやってデータを格納するの?
22
データの追加方法
Azure Portal を利用
ドキュメントエクスプローラー
プログラムで作成(各種 SDK )を利用
データインポートツールを使用
DocumentDB Data Migration Tool
23
データのインポート
DocumentDB Data Migration Tool
GitHub で公開されてます
バイナリは Microsoft ダウンロードセンターで!
https://github.com/azure/azure-documentdb-datamigrationtool
24
DocumentDB Data Migration Tool
多くのデータソースに対応
JSON / CSV / MongoDB / Amazon DynamoDB
Azure Table Storage / HBase / DocumentDB
25
スケーラブル
NoSQL ドキュメントデータベースサービス
スキーマフリー
スケーラブル
一貫性
26
スケーラブル
お馴染みのポータルから変更
27
お金の話
気になる料金は…
28
お金の話
コレクション単位での時間課金
2,500 円 / 月 (S1) ~ 10,000 円 / 月 (S3)
29
整合性
NoSQL ドキュメントデータベースサービス
スキーマフリー
スケーラブル
整合性
30
整合性ポータルから規定の整合性を変更
整合性レベル
Strong( 強固 )
Bounded staleness( 制限あり)
Session( セッション )
Eventual( 最終的 )
一貫性 強い 弱い
パフォーマンス 悪い 良い
31
データの検索方法
どうやってデータを検索するの?
32
データの検索方法
Azure Portal を利用
クエリエクスプローラー
プログラムで(各種 SDK )を利用
.NET だと LINQ が使えるので便利
33
クエリエクスプローラー
ブラウザから SQL Like なクエリを発行できる
34
SQL 構文
RDB と同じような SQL でデータ検索を行う
SELECT / FROM / WHERE / ORDER
組み込み関数 / 演算子 / ユーザー定義関数 (UDF)SELECT * FROM c WHERE c.name = " 山田太郎 "
35
SQL 構文
SQL 構文といっても RDB と同じではない
WHERE 句の条件は5つまで
ORDER 句の複数カラムソートはできない
JOIN はできない
https://azure.microsoft.com/ja-jp/documentation/articles/documentdb-sql-query/
36
インデックスインデックス作成モード
同期 (Consistent) インデックスは常に同期
非同期 (Lazy) インデックスを非同期更新
なし (None) 更新しない
37
インデックスインデックスの種類
Hash 等値クエリ( =) に使用
Range 範囲クエリ (>,<,>=,<=,!=) に使用Order By をサポート
Spatial 空間クエリとして使用可能
38
検索時に困った事が日付の検索がうまくいかない…
SELECT *FROM cWHERE c.creteDateTime >= “2015-08-01"
39
検索時に困った事が
40
検索時に困った事が
41
エポック時間で解決
public static int ToEpoch(this DateTime date){ if (date == null) return int.MinValue; DateTime epoch = new DateTime(1970, 1, 1); TimeSpan epochTimeSpan = date - epoch; return (int)epochTimeSpan.TotalSeconds;}
DateTime からエポック時間を得られる拡張メソッドを用意
int epoch = DateTime.Now.ToEpoch();
42
エポック時間で解決
public class DatetimeEpoch{ public DateTime Date { get; set; }
public int Epoch { get { return (this.Date.Equals(null) || this.Date.Equals(DateTime.MinValue)) ? int.MinValue : this.Date.ToEpoch(); } }}
DateTime と Epoch を保持するクラスを用意
43
エポック時間で解決
public class Item{ [JsonProperty(PropertyName="id")] public string Id { get; set; }
[JsonProperty(PropertyName = "name")] public string Name { get; set; }
[JsonProperty(PropertyName = "description")] public string Description { get; set; }
[JsonProperty(PropertyName = "isComplete")] public bool Completed { get; set; }
[JsonProperty(PropertyName = "createdDatetimeEpoch")] public DatetimeEpoch CreatedDatetimeEpoch { get; set; }}
JSON のモデルクラスに DatetimeEpoch クラスのプロパティを指定
44
エポック時間で解決 JSON の中に Epoch 時間 (int) をもつので検索ができるようになる
{ "id": “XXXXXXX", "name": " 懇親会 ", "description": " ここからが本番 ", "isComplete": false, "createdDatetimeEpoch": { "Date": "2015-08-29T10:41:45.4245053+09:00", "Epoch": 1440844905 }}
Client.CreateDocumentQuery<Item>(Collection.DocumentsLink) .Where(r => r.CreatedDatetimeEpoch.Epoch >= DateTime.Now.ToEpoch()) .AsEnumerable();
45
Demo
とりあえず見てみましょう!
46
終わりに
DocumentDB で管理するのは JSON と javascript
課金は Collection 単位の時間課金
SQL Like な検索
様々なデータソースからのインポート
DocumentDB を始めてみましょう
47
終わりに
ご清聴ありがとうございました