Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NoSQL初心者の私が Cosmos DBを触ってみた

yuyhiraka
October 22, 2022
210

NoSQL初心者の私が Cosmos DBを触ってみた

yuyhiraka

October 22, 2022
Tweet

Transcript

  1. © 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)
  2. © 2022 NTT TechnoCross Corporation 4 私とNoSQL HDFS、HiveQL(※) HBase、Kudu、HDFS •

    Gremlin API • データの持ち⽅の検討、集計の検討、可視化の検討、検証 • 都合により今回は詳細の⼤部分を省略します • MongoDB API • Database名変更 (デフォルトのtestから変更)、インデックス移⾏ • プライベートリンクでの接続 ⼀旦作業中⽌ → ユーザ作成 、バックアップ検討 ※NoSQLではない
  3. © 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
  4. © 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
  5. © 2022 NTT TechnoCross Corporation 10 集計処理の検討 • Gremlin Queryで頑張る

    • できそうなことはマイクロソフト社の回答も含めてわかっ たが⼤変複雑... • Gremlin QueryはSQLほど⾼機能ではない認識 • Cypher • 実際のクエリについては省略 • Python + Gremlin Queryの組み合わせ • C# + Gremlin Queryの組み合わせ • 可視化ツールで頑張る Apache TinkerPop
  6. © 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
  7. © 2022 NTT TechnoCross Corporation 12 可視化ツール検討 (没) • フルスクラッチ案

    • 最後の⼿段 • Jupyter Notebook/Jupyter Lab • Cosmos DB内蔵のNotebook機能はプレビュー • マイクロソフト社サポートに依頼すると有効化できる • (セッションが切れるとデータが消える...) • PowerBI • 対応しているが... • Tableau • 対応してなさそう • Yellowfin • 対応してなさそう
  8. © 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サー バからプッシュできる
  9. © 2022 NTT TechnoCross Corporation 15 MongoDB APIに関して取り組んでいること • Database名変更

    • プライベートリンクでの接続 • 作業中⽌系のタスク • ユーザ作成 • バックアップ⽅式
  10. © 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
  11. © 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を渡す接続パターンがある
  12. © 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
  13. © 2022 NTT TechnoCross Corporation 19 ⼀旦作業中⽌系の話 • バックアップ⽅式 •

    定期バックアップと継続的バックアップ (新機能) がある • それぞれメリットデメリットがある。 • 定期バックアップ⽅式 • (メリット)継続的バックアップよりリソースのコストが安そう • (デメリット)バックアップ/リストアに時間がかかる • サポートチケットでの対応が必要 • 問題の種類︓バックアップと復元 • 問題のサブタイプ︓アカウントのデータ復元 • 継続的バックアップ⽅式 • (メリット)任意のタイミングでバックアップ • (デメリット)定期バックアップに戻せない • (デメリット)定期バックアップよりコストが⾼そう (X万円︖) • (︖)⼀意なインデックスは使えない • マイクロソフト社サポートによると性能改善・性能劣化の過去事例 はないらしい
  14. © 2022 NTT TechnoCross Corporation 21 まとめ • NoSQLについて⾃分の経験や理解を紹介しました。 •

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