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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for yuyhiraka yuyhiraka
October 22, 2022
300

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

Avatar for yuyhiraka

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名変更について • プライベートリンクで時間を溶かした話について • 作業中⽌中の作業について • ユーザ作成 • バックアップ