今から始めるdocument db

47
今今今今今今 DocumentDB Japan Azure User Group 今今 (Hamamoto Kazunori) 2015/08/29

Upload: kazunori-hamamoto

Post on 12-Apr-2017

1.289 views

Category:

Environment


0 download

TRANSCRIPT

Page 1: 今から始めるDocument db

今から始める DocumentDB

Japan Azure User Group

濱本 一慶 (Hamamoto Kazunori)2015/08/29

Page 2: 今から始めるDocument db

2

自己紹介濱本 一慶(はまもと かずのり)@airish9

アプリケーションエンジニア

DocumentDB 始めました

Document 指向 DB は DocumentDB が初めて!

ふくあずの二次元担当

Page 3: 今から始めるDocument db

3

気が付いた

スライドを作り出して気が付きました…

Page 4: 今から始めるDocument db

4

気が付いた

今回で 20 回目の登壇です系も多いですがネタ …

Page 5: 今から始めるDocument db

5

気が付いた

記念すべき 20 回ですが特にオチはありません

Page 6: 今から始めるDocument db

6

さて。。。

DocumentDB の話をしましょう

Page 7: 今から始めるDocument db

7

今日のお話しについて

初めての方向けのお話しです

難しい話はしません

DocumentDB って言葉を覚えてもらえれば…

Page 8: 今から始めるDocument db

8

DocumentDB とは

2014/08/21 Preview

2015/04/08 GA

各種 SDK

.NET / Java / node.js / Python / JS

Page 9: 今から始めるDocument db

9

DocumentDB とは

NoSQL ドキュメントデータベースサービス

スキーマフリー

スケーラブル

一貫性

Page 10: 今から始めるDocument db

10

ドキュメントデータベース

DocumentDB↓

Document を格納する DB

Page 11: 今から始めるDocument db

11

ドキュメントと言えば…

Page 12: 今から始めるDocument db

12

ドキュメントと言えば…

違います

Page 13: 今から始めるDocument db

13

じゃあ…

Page 14: 今から始めるDocument db

14

じゃあ…

違います

Page 15: 今から始めるDocument db

15

これです

JSON です

Page 16: 今から始めるDocument db

16

DocumentDB とは

Page 17: 今から始めるDocument db

17

DocumentDB とは

Page 18: 今から始めるDocument db

18

スキーマフリー

NoSQL ドキュメントデータベースサービス

スキーマフリー

スケーラブル

一貫性

Page 19: 今から始めるDocument db

19

スキーマフリーRDB の場合はテーブル定義に沿ったデータのみ格納

name age sex birthday tel url山田太郎 29 male 1985/12/24 09097948706 NULL

name address tel urlあじゅーるパン工房 福岡県福岡市中央区天神… 0921234567 NULL

Page 20: 今から始めるDocument db

20

スキーマフリーDocumentDB は異なるデータも一纏めに格納

Page 21: 今から始めるDocument db

21

データの追加方法

どうやってデータを格納するの?

Page 22: 今から始めるDocument db

22

データの追加方法

Azure Portal を利用

ドキュメントエクスプローラー

プログラムで作成(各種 SDK )を利用

データインポートツールを使用

DocumentDB Data Migration Tool

Page 23: 今から始めるDocument db

23

データのインポート

DocumentDB Data Migration Tool

GitHub で公開されてます

バイナリは Microsoft ダウンロードセンターで!

https://github.com/azure/azure-documentdb-datamigrationtool

Page 24: 今から始めるDocument db

24

DocumentDB Data Migration Tool

多くのデータソースに対応

JSON / CSV / MongoDB / Amazon DynamoDB

Azure Table Storage / HBase / DocumentDB

Page 25: 今から始めるDocument db

25

スケーラブル

NoSQL ドキュメントデータベースサービス

スキーマフリー

スケーラブル

一貫性

Page 26: 今から始めるDocument db

26

スケーラブル

お馴染みのポータルから変更

Page 27: 今から始めるDocument db

27

お金の話

気になる料金は…

Page 28: 今から始めるDocument db

28

お金の話

コレクション単位での時間課金

2,500 円 / 月 (S1) ~ 10,000 円 / 月 (S3)

Page 29: 今から始めるDocument db

29

整合性

NoSQL ドキュメントデータベースサービス

スキーマフリー

スケーラブル

整合性

Page 30: 今から始めるDocument db

30

整合性ポータルから規定の整合性を変更

整合性レベル

Strong( 強固 )

Bounded staleness( 制限あり)

Session( セッション )

Eventual( 最終的 )

一貫性 強い 弱い

パフォーマンス 悪い 良い

Page 31: 今から始めるDocument db

31

データの検索方法

どうやってデータを検索するの?

Page 32: 今から始めるDocument db

32

データの検索方法

Azure Portal を利用

クエリエクスプローラー

プログラムで(各種 SDK )を利用

.NET だと LINQ が使えるので便利

Page 33: 今から始めるDocument db

33

クエリエクスプローラー

ブラウザから SQL Like なクエリを発行できる

Page 34: 今から始めるDocument db

34

SQL 構文

RDB と同じような SQL でデータ検索を行う

SELECT / FROM / WHERE / ORDER

組み込み関数 / 演算子 / ユーザー定義関数 (UDF)SELECT * FROM c WHERE c.name = " 山田太郎 "

Page 35: 今から始めるDocument db

35

SQL 構文

SQL 構文といっても RDB と同じではない

WHERE 句の条件は5つまで

ORDER 句の複数カラムソートはできない

JOIN はできない

https://azure.microsoft.com/ja-jp/documentation/articles/documentdb-sql-query/

Page 36: 今から始めるDocument db

36

インデックスインデックス作成モード

同期 (Consistent) インデックスは常に同期

非同期 (Lazy) インデックスを非同期更新

なし (None) 更新しない

Page 37: 今から始めるDocument db

37

インデックスインデックスの種類

Hash 等値クエリ( =) に使用

Range 範囲クエリ (>,<,>=,<=,!=) に使用Order By をサポート

Spatial 空間クエリとして使用可能

Page 38: 今から始めるDocument db

38

検索時に困った事が日付の検索がうまくいかない…

SELECT *FROM cWHERE c.creteDateTime >= “2015-08-01"

Page 39: 今から始めるDocument db

39

検索時に困った事が

Page 40: 今から始めるDocument db

40

検索時に困った事が

Page 41: 今から始めるDocument db

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();

Page 42: 今から始めるDocument db

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 を保持するクラスを用意

Page 43: 今から始めるDocument db

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 クラスのプロパティを指定

Page 44: 今から始めるDocument db

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();

Page 45: 今から始めるDocument db

45

Demo

とりあえず見てみましょう!

Page 46: 今から始めるDocument db

46

終わりに

DocumentDB で管理するのは JSON と javascript

課金は Collection 単位の時間課金

SQL Like な検索

様々なデータソースからのインポート

DocumentDB を始めてみましょう

Page 47: 今から始めるDocument db

47

終わりに

ご清聴ありがとうございました