Slide 1

Slide 1 text

1 NoSQL初⼼者の私が Cosmos DBを触ってみた yuyhiraka

Slide 2

Slide 2 text

2 1. ⾃⼰紹介 2. 私とNoSQL 3. 私のNoSQLの理解 4. 私のCosmos DBの理解 5. Gremlin API 6. MongoDB API

Slide 3

Slide 3 text

© 2022 NTT TechnoCross Corporation 3 ⾃⼰紹介 yuyhiraka • 10年⽬のシステムエンジニア • 3年︓アプリケーションエンジニア • 5年 ︓PoCエンジニア • 1年+︓インフラおよびクラウドエンジニア (※Azureチーム所属) • Cosmos DB (Gremlin API) 関連PoC • k8s with Cosmos DB (MongoDB API) 等基盤移⾏ • ⼤規模内製組織でコンテナセキュリティ中⼼のSRE、Ubuntuサポートエンジニア 実は↓当選者 引⽤元︓https://shenghaohuang.com/2021/05/27/microsoft-build-2021-cloud-skills- challenge/ Ms. Erin Chapple (Vice President)

Slide 4

Slide 4 text

© 2022 NTT TechnoCross Corporation 4 私とNoSQL HDFS、HiveQL(※) HBase、Kudu、HDFS • Gremlin API • データの持ち⽅の検討、集計の検討、可視化の検討、検証 • 都合により今回は詳細の⼤部分を省略します • MongoDB API • Database名変更 (デフォルトのtestから変更)、インデックス移⾏ • プライベートリンクでの接続 ⼀旦作業中⽌ → ユーザ作成 、バックアップ検討 ※NoSQLではない

Slide 5

Slide 5 text

© 2022 NTT TechnoCross Corporation 5 私の中のNoSQLの理解 引⽤︓NoSQL, NewSQL and Beyond (infoq.com) 参考︓2020年現在のNewSQLについて - Qiita • リレーショナルではない • マルチモデル • Cosmos DB • Marklogic • Document • MongoDB系 • GraphDB • Neo4J • TinkerPop系 • Oracle Autonomous Database • TigerGraph • Key-Value • Redis • Big tables • HBase

Slide 6

Slide 6 text

© 2022 NTT TechnoCross Corporation 6 私の中のCosmos DBの理解 • マルチモデルである • それぞれをAPIと表現している • Core (SQL) API・・・通常は推奨︖ • MongoDB ⽤ API • Cassandra API・・・・・・OLTP⽤︖(OLAP⽤は使えない︖) • Gremlin API・・・OLTP⽤︖(OLAP⽤は使えない︖) • Table API・・・OLTP⽤︖(OLAP⽤は使えない︖) • Postgres New • API間での変換はできるか不明 • MongoDBとして⼊れてGremlinとして取り出すイメージ • できなさそう︖ https://learn.microsoft.com/ja-jp/azure/cosmos-db/choose-api

Slide 7

Slide 7 text

7 Gremlin API

Slide 8

Slide 8 text

© 2022 NTT TechnoCross Corporation 8 Gremlin APIに関して取り組んでいること • データの持ち⽅ • 集計の検討 • 可視化の検討、検証

Slide 9

Slide 9 text

© 2022 NTT TechnoCross Corporation 9 データの持ち⽅検討 結局のところグラフDBの可視化ツールがどのような構造を取れるかによってくるが 可視化ツールをフルスクラッチで作ることまで視野に⼊れて以下のような⽅式を検 討

Slide 10

Slide 10 text

© 2022 NTT TechnoCross Corporation 10 集計処理の検討 • Gremlin Queryで頑張る • できそうなことはマイクロソフト社の回答も含めてわかっ たが⼤変複雑... • Gremlin QueryはSQLほど⾼機能ではない認識 • Cypher • 実際のクエリについては省略 • Python + Gremlin Queryの組み合わせ • C# + Gremlin Queryの組み合わせ • 可視化ツールで頑張る Apache TinkerPop

Slide 11

Slide 11 text

© 2022 NTT TechnoCross Corporation 11 可視化ツール検討、検証 • そもそもTinkerPop (≒GremlinAPI)って可視化ツー ルとどうやってつなぐの︖ • JDBCやODBC︖あるいは独⾃プロトコル/ライブラリ︖ • どうやらWebSocketらしい • 加えて、.NET SDK URI (HTTPS) • よく使われていそうな可視化ツール • Linkurious Enterprise • Tom Sawyer • Graphlytic • Cytoscape.js • yWorks etc... パートナー ソリューションを使⽤して、 Azure Cosmos DB Gremlin API データを視 覚化する | Microsoft Learn

Slide 12

Slide 12 text

© 2022 NTT TechnoCross Corporation 12 可視化ツール検討 (没) • フルスクラッチ案 • 最後の⼿段 • Jupyter Notebook/Jupyter Lab • Cosmos DB内蔵のNotebook機能はプレビュー • マイクロソフト社サポートに依頼すると有効化できる • (セッションが切れるとデータが消える...) • PowerBI • 対応しているが... • Tableau • 対応してなさそう • Yellowfin • 対応してなさそう

Slide 13

Slide 13 text

© 2022 NTT TechnoCross Corporation 13 WebSocket補⾜ WebSockets Standard (whatwg.org)によると、 1. Introduction This section is non-normative. To enable web applications to maintain bidirectional communications with server-side processes, this specification introduces the interface. つまり、WebサーバとHTTPクライアント (Web ブラウザ etc...) の双⽅向通信の規格 AjaxだとずっとポーリングしていたのがWebサー バからプッシュできる

Slide 14

Slide 14 text

14 MongoDB API

Slide 15

Slide 15 text

© 2022 NTT TechnoCross Corporation 15 MongoDB APIに関して取り組んでいること • Database名変更 • プライベートリンクでの接続 • 作業中⽌系のタスク • ユーザ作成 • バックアップ⽅式

Slide 16

Slide 16 text

© 2022 NTT TechnoCross Corporation 16 Database名変更 • そもそもの話 Azure基盤移⾏のときにMongoDB APIを触ることになった • (旧環境) MongoDB API → (新環境)MongoDB API • アプリチームより旧環境のMongoDB API から取得したインデックス 情報 (Robo 3Tでdump) を受け取る • X転送不可のCLI (Azure Cloud Shellではない某Webターミナル) な のでRobo 3Tは使えない • そこで、MongoDB APIのバージョンにあうMongoDB Shellを使ってイン ポートすることにした • 起きたこと • testというデフォルトのDB名に対してインデックス情報がインポート されてしまった • use <つけたいデータベース名>してからでないと期待通りインポー トできなかった • MongoDBの経験が浅すぎて30分くらい時間を溶かしました...orz

Slide 17

Slide 17 text

© 2022 NTT TechnoCross Corporation 17 プライベートリンクでの接続 • そもそもの話 • 旧環境のMongoDB API では対向システムのパブリックIPアドレスに 絞ったパブリックアクセスだった • 新環境のMongoDB APIではプライベートリンク接続にしたいよね︕ という話があった • 起きたこと • 証明書エラーによる接続関連で時間を溶かした (※) • 成功︓mongosh 「プライベートIP」:10255 -u 「ユーザ名」 -p 「アク セスキー」 --ssl –sslAllowInvalidCertificates • 失敗︓ mongosh mongodb://「ユーザ名」:<アクセスキー>==@「プ ライベートIP 」:10255/?ssl=true • 原因︓FQDN接続を前提としておりプライベートIPアドレスの時 mongodbスキーマでは接続できない(接続⽅法がわからない) • AzureプライベートDNSゾーンにて対処 • (Azure Database for MySQLへのプライベートリンク疎通ではプライベート IPでも証明書エラーなどは出ずに接続できた) ※mongoshは細かくパラメータを渡す接続パターンとmongodbスキーマのURIを渡す接続パターンがある

Slide 18

Slide 18 text

© 2022 NTT TechnoCross Corporation 18 ⼀旦作業中⽌系の話 • ユーザ作成 • Cosmos DB (MongoAPI) のユーザ作成はMongoDBの通 常のユーザ作成とは異なりそう。 • マイクロソフト社のサポートによると以下の⽅法で作れる とのこと • MongoDBデータベース⽤(プレビュー)Azure Cosmos DB APIの ロールベースのアクセス制御を構成する | Microsoft Learn • GitHub - SubhMSFT/CosmosDBPostmanGuide: Step-by-step guidance for testing Azure Cosmos DB resources using REST API with Postman

Slide 19

Slide 19 text

© 2022 NTT TechnoCross Corporation 19 ⼀旦作業中⽌系の話 • バックアップ⽅式 • 定期バックアップと継続的バックアップ (新機能) がある • それぞれメリットデメリットがある。 • 定期バックアップ⽅式 • (メリット)継続的バックアップよりリソースのコストが安そう • (デメリット)バックアップ/リストアに時間がかかる • サポートチケットでの対応が必要 • 問題の種類︓バックアップと復元 • 問題のサブタイプ︓アカウントのデータ復元 • 継続的バックアップ⽅式 • (メリット)任意のタイミングでバックアップ • (デメリット)定期バックアップに戻せない • (デメリット)定期バックアップよりコストが⾼そう (X万円︖) • (︖)⼀意なインデックスは使えない • マイクロソフト社サポートによると性能改善・性能劣化の過去事例 はないらしい

Slide 20

Slide 20 text

20 まとめ

Slide 21

Slide 21 text

© 2022 NTT TechnoCross Corporation 21 まとめ • NoSQLについて⾃分の経験や理解を紹介しました。 • Gremlin APIの取り組みについて紹介しました。 • データの持ち⽅の検討 • 集計処理の検討 • 可視化ツールの検討 • MongoDB APIの取り組みについて紹介しました。 • Database名変更について • プライベートリンクで時間を溶かした話について • 作業中⽌中の作業について • ユーザ作成 • バックアップ

Slide 22

Slide 22 text

© 2022 NTT TechnoCross Corporation 22 商標・登録商標 • 本スライドの中に登場する「商標・登録商標」につ いては各社・各団体の「商標・登録商標」です。

Slide 23

Slide 23 text

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