Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
今から始めるDocumentDB
Japan Azure User Group
濱本 一慶(Hamamoto Kazunori)
2015/08/29
自己紹介
2
濱本 一慶(はまもと かずのり)
@airish9
アプリケーションエンジニア
DocumentDB始めました
Document指向DBはDocumentDBが初めて!
ふくあずの二次元担当
気が付いた
3
気が付いた
4
気が付いた
5
さて。。。
6
今日のお話しについて
7
初めての方向けのお話しです
難しい話はしません
DocumentDBって言葉を覚えてもらえれば…
DocumentDBとは
8
2014/08/21 Preview
2015/04/08 GA
各種SDK
.NET / Java / node.js / Python / JS
DocumentDBとは
9
NoSQLドキュメントデータベースサービス
スキーマフリー
スケーラブル
一貫性
ドキュメントデータベース
10
ドキュメントと言えば…
11
ドキュメントと言えば…
12
じゃあ…
13
じゃあ…
14
これです
15
DocumentDBとは
16
DocumentDBとは
17
スキーマフリー
18
NoSQLドキュメントデータベースサービス
スキーマフリー
スケーラブル
一貫性
スキーマフリー
19
RDBの場合はテーブル定義に沿ったデータのみ格納
name age sex birthday tel url
山田太郎 29 male 1985/12/24 09097948706 NULL
name address t...
スキーマフリー
20
DocumentDBは異なるデータも一纏めに格納
データの追加方法
21
データの追加方法
22
Azure Portalを利用
ドキュメントエクスプローラー
プログラムで作成(各種SDK)を利用
データインポートツールを使用
DocumentDB Data Migration Tool
データのインポート
23
DocumentDB Data Migration Tool
GitHubで公開されてます
バイナリはMicrosoftダウンロードセンターで!
https://github.com/azure/azure-do...
DocumentDB Data Migration Tool
24
多くのデータソースに対応
JSON / CSV / MongoDB / Amazon DynamoDB
Azure Table Storage / HBase / Docu...
スケーラブル
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なクエリを発行できる
SQL構文
34
RDBと同じようなSQLでデータ検索を行う
SELECT / FROM / WHERE / ORDER
組み込み関数 / 演算子 / ユーザー定義関数(UDF)
SELECT * FROM c WHERE c.name ...
SQL構文
35
SQL構文といってもRDBと同じではない
WHERE句の条件は5つまで
ORDER句の複数カラムソートはできない
JOINはできない
https://azure.microsoft.com/ja-
jp/documen...
インデックス
36
インデックス作成モード
同期(Consistent) インデックスは常に同期
非同期(Lazy) インデックスを非同期更新
なし(None) 更新しない
インデックス
37
インデックスの種類
Hash 等値クエリ(=)に使用
Range
範囲クエリ(>,<,>=,<=,!=)に使用
Order Byをサポート
Spatial 空間クエリとして使用可能
検索時に困った事が
38
日付の検索がうまくいかない…
SELECT
*
FROM c
WHERE
c.creteDateTime >= “2015-08-01"
検索時に困った事が
39
検索時に困った事が
40
エポック時間で解決
41
public static int ToEpoch(this DateTime date)
{
if (date == null) return int.MinValue;
DateTime epoch = new D...
エポック時間で解決
42
public class DatetimeEpoch
{
public DateTime Date { get; set; }
public int Epoch
{
get
{
return (this.Date.Eq...
エポック時間で解決
43
public class Item
{
[JsonProperty(PropertyName="id")]
public string Id { get; set; }
[JsonProperty(PropertyNa...
エポック時間で解決
44
 JSONの中にEpoch時間(int)をもつので検索ができるようになる
{
"id": “XXXXXXX",
"name": "懇親会",
"description": "ここからが本番",
"isComplete...
Demo
45
終わりに
46
DocumentDBで管理するのはJSONとjavascript
課金はCollection単位の時間課金
SQL Likeな検索
様々なデータソースからのインポート
終わりに
47
Upcoming SlideShare
Loading in …5
×

今から始めるDocument db

1,967 views

Published on

Japan Azure User Group Fukuoka(ふくあず)
DocumentDBを今から初めても遅くない!

Published in: Environment
  • Be the first to comment

今から始めるDocument db

  1. 1. 今から始めるDocumentDB Japan Azure User Group 濱本 一慶(Hamamoto Kazunori) 2015/08/29
  2. 2. 自己紹介 2 濱本 一慶(はまもと かずのり) @airish9 アプリケーションエンジニア DocumentDB始めました Document指向DBはDocumentDBが初めて! ふくあずの二次元担当
  3. 3. 気が付いた 3
  4. 4. 気が付いた 4
  5. 5. 気が付いた 5
  6. 6. さて。。。 6
  7. 7. 今日のお話しについて 7 初めての方向けのお話しです 難しい話はしません DocumentDBって言葉を覚えてもらえれば…
  8. 8. DocumentDBとは 8 2014/08/21 Preview 2015/04/08 GA 各種SDK .NET / Java / node.js / Python / JS
  9. 9. DocumentDBとは 9 NoSQLドキュメントデータベースサービス スキーマフリー スケーラブル 一貫性
  10. 10. ドキュメントデータベース 10
  11. 11. ドキュメントと言えば… 11
  12. 12. ドキュメントと言えば… 12
  13. 13. じゃあ… 13
  14. 14. じゃあ… 14
  15. 15. これです 15
  16. 16. DocumentDBとは 16
  17. 17. DocumentDBとは 17
  18. 18. スキーマフリー 18 NoSQLドキュメントデータベースサービス スキーマフリー スケーラブル 一貫性
  19. 19. スキーマフリー 19 RDBの場合はテーブル定義に沿ったデータのみ格納 name age sex birthday tel url 山田太郎 29 male 1985/12/24 09097948706 NULL name address tel url あじゅーるパン工房 福岡県福岡市中央区天神… 0921234567 NULL
  20. 20. スキーマフリー 20 DocumentDBは異なるデータも一纏めに格納
  21. 21. データの追加方法 21
  22. 22. データの追加方法 22 Azure Portalを利用 ドキュメントエクスプローラー プログラムで作成(各種SDK)を利用 データインポートツールを使用 DocumentDB Data Migration Tool
  23. 23. データのインポート 23 DocumentDB Data Migration Tool GitHubで公開されてます バイナリはMicrosoftダウンロードセンターで! https://github.com/azure/azure-documentdb-datamigrationtool
  24. 24. DocumentDB Data Migration Tool 24 多くのデータソースに対応 JSON / CSV / MongoDB / Amazon DynamoDB Azure Table Storage / HBase / DocumentDB
  25. 25. スケーラブル 25 NoSQLドキュメントデータベースサービス スキーマフリー スケーラブル 一貫性
  26. 26. スケーラブル 26
  27. 27. お金の話 27
  28. 28. お金の話 28 コレクション単位での時間課金 2,500円/月(S1) ~ 10,000円/月(S3)
  29. 29. 整合性 29 NoSQLドキュメントデータベースサービス スキーマフリー スケーラブル 整合性
  30. 30. 整合性 30 ポータルから規定の整合性を変更 整合性 レベル Strong (強固) Bounded staleness (制限あり) Session (セッション) Eventual (最終的) 一貫性 強い 弱い パフォーマンス 悪い 良い
  31. 31. データの検索方法 31
  32. 32. データの検索方法 32 Azure Portalを利用 クエリエクスプローラー プログラムで(各種SDK)を利用 .NETだとLINQが使えるので便利
  33. 33. クエリエクスプローラー 33 ブラウザからSQL Likeなクエリを発行できる
  34. 34. SQL構文 34 RDBと同じようなSQLでデータ検索を行う SELECT / FROM / WHERE / ORDER 組み込み関数 / 演算子 / ユーザー定義関数(UDF) SELECT * FROM c WHERE c.name = "山田太郎"
  35. 35. SQL構文 35 SQL構文といってもRDBと同じではない WHERE句の条件は5つまで ORDER句の複数カラムソートはできない JOINはできない https://azure.microsoft.com/ja- jp/documentation/articles/documentdb-sql-query/
  36. 36. インデックス 36 インデックス作成モード 同期(Consistent) インデックスは常に同期 非同期(Lazy) インデックスを非同期更新 なし(None) 更新しない
  37. 37. インデックス 37 インデックスの種類 Hash 等値クエリ(=)に使用 Range 範囲クエリ(>,<,>=,<=,!=)に使用 Order Byをサポート Spatial 空間クエリとして使用可能
  38. 38. 検索時に困った事が 38 日付の検索がうまくいかない… SELECT * FROM c WHERE c.creteDateTime >= “2015-08-01"
  39. 39. 検索時に困った事が 39
  40. 40. 検索時に困った事が 40
  41. 41. エポック時間で解決 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. 42. エポック時間で解決 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. 43. エポック時間で解決 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. 44. エポック時間で解決 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. 45. Demo 45
  46. 46. 終わりに 46 DocumentDBで管理するのはJSONとjavascript 課金はCollection単位の時間課金 SQL Likeな検索 様々なデータソースからのインポート
  47. 47. 終わりに 47

×