Data management of cosmos db using apache gremlin
- 3. マルチモデル + マルチ APIなのか?
システムの変遷
N層システム
• DBを正規化しデータ層のパ
フォーマンスを最大化するこ
とでシステム全体のスペック
を向上
• ORマップによって業務に近い
データセットを作成
• エンティティの一括シリアラ
イズ、モデルのリゾルバ等を
駆使しファットコントロー
ラーにならないよう分離設計
マッシュアップ
• Web API同士が連携してソ
リューションを構成すること
で、ひとつのシステムの責務
を縮小させRDBにおける複雑
なテーブル間のリレーショナ
ルを排除
• RESTfulなAPIにより、業務のス
テートを永続化層とUI間で転
送
• ユーザー操作に対する応答を
分割することでUIの処理を軽
量化
サーバーレス・コンピューティン
グ
• 永続化層から業務を徹底排除
したKVS(Key Value Store)の
実装である各種分散DB
(Hadoop等)
• 並列でリアルタイムなクエリ
によるバッチ分析等によりOR
マップの必要性を低減
• クエリAPIに依存しないことで
マイクロサービスの実装を容
易にする
永続化層に業務が入り込む APIの調整コスト大、変更に弱い APIの調整コスト無し、柔軟性大
- 5. Cosmos DBはアトム レコード シーケンス(Atom Record
Sequence)でスキーマを構成するように設計されている
↓
そのため、さまざまなクエリに対して動的に適したデータモ
デルに変換することが可能です。
Cosmos DBのデータのシーケンス
アトム
プリミティブ型のデータ配列
数値
数値
…
文字
列
文字
列
…
ブー
ル値
ブー
ル値
…
…
…
…
レコード
構造体
… … …
シーケンス
アト
ム
レ
コー
ド
シー
ケン
ス
シー
ケン
ス
Transact SQL →SQL API ← テーブル・モデル
Gremlin →Graph API ← グラフ・モデル
Mongo DB →MongoDB API ← ドキュメント・モデル
Cassandra →Cassandra API ← 列ファミリ・モデル等
Table Storage→Table API ← キーバリュー・モデル
https://azure.microsoft.com/ja-jp/blog/a-technical-overview-of-azure-cosmos-db/
- 15. •Amazon Neptune - Fully-managed graph database service.
•Bitsy - A small, fast, embeddable, durable in-memory graph database.
•Blazegraph - RDF graph database with OLTP support.
•CosmosDB - Microsoft's distributed OLTP graph database.
•ChronoGraph - A versioned graph database.
•DSEGraph - DataStax graph database with OLTP and OLAP support.
•GRAKN.AI - Distributed OLTP/OLAP knowledge graph system.
•Hadoop (Spark) - OLAP graph processor using Spark.
•HGraphDB - OLTP graph database running on Apache HBase.
•Huawei Graph Engine Service - Fully-managed, distributed, at-scale graph query and
analysis service that provides a visualized interactive analytics platform.
•IBM Graph - OLTP graph database as a service.
•JanusGraph - Distributed OLTP and OLAP graph database with BerkeleyDB, Apache
Cassandra and Apache HBase support.
•JanusGraph (Amazon) - The Amazon DynamoDB Storage Backend for JanusGraph.
•Neo4j - OLTP graph database (embedded and high availability).
•neo4j-gremlin-bolt - OLTP graph database (using Bolt Protocol).
•OrientDB - OLTP graph database
•Apache S2Graph - OLTP graph database running on Apache HBase.
•Sqlg - OLTP implementation on SQL databases.
•Stardog - RDF graph database with OLTP and OLAP support.
•TinkerGraph - In-memory OLTP and OLAP reference implementation.
•Titan - Distributed OLTP and OLAP graph database with BerkeleyDB, Apache
Cassandra and Apache HBase support.
•Titan (Amazon) - The Amazon DynamoDB storage backend for Titan.
•Titan (Tupl) - The Tupl storage backend for Titan.
•Unipop - OLTP Elasticsearch and JDBC backed graph.
•cypher-for-gremlin - A Cypher to Gremlin traversal transpiler.
•Ferma (java/dsl) - An ORM / OGM for Apache TinkerPop.
•Goblin (python/dsl) - Goblin OGM for the TinkerPop 3 Gremlin Server.
•Gremlin.Net (.NET - C#/variant) - Gremlin hosted in C# for use with any .NET-based VM.
•gremlin-javascript (js) - Gremlin hosted in JavaScript for use with Node.js.
•gremlin-orm (javascript) Gremlin ORM for Node.js.
•gremlin-python (python/variant) - Gremlin hosted in Python for use with any Python-based VM.
•gremlin-py (python/variant) - Write pure Python Gremlin that can be sent to Gremlin Server.
•gremlin-scala (scala/variant) - A Scala-based Gremlin language variant for TinkerPop3.
•gremlin-objects (java/dsl) - An Object Graph Mapping Library For Gremlin.
•gremlin-template-string (js/variant) - A Gremlin language builder.
•ipython-gremlin (python/variant) - Gremlin in IPython and Jupyter.
•kotlin-gremlin-ogm (kotlin/dsl) - An Object Graph Mapping Library for Kotlin and Gremlin.
•ogre (clojure/variant) - A Clojure language wrapper for TinkerPop3.
•Peapod (java/dsl) - An object-graph-wrapper.
•sparql-gremlin (sparql/distinct) - A SPARQL to Gremlin traversal compiler.
•spring-data-gremlin (java/dsl) - Spring Data support for TinkerPop-enabled graph systems.
•sql-gremlin (sql/distinct) - An SQL to Gremlin traversal compiler.
Apache TinkerPop™ is a graph computing framework for both graph databases (OLTP) and graph analytic systems (OLAP).
Graph Systems Query Languages
- 16. Azure Cosmos DB の概要
https://docs.microsoft.com/ja-jp/azure/cosmos-db/introduction
Azure Cosmos DB の調整可能なデータの一貫性レベル
https://docs.microsoft.com/ja-jp/azure/cosmos-db/consistency-levels
Making A Simple Recommender System - Azure Cosmos DB And Apache Tinkerpop
https://www.c-sharpcorner.com/article/making-a-simple-recommender-system-azure-cosmos-db-
and-apache-tinkerpop/
Graphs with Azure Cosmos DB Gremlin API
https://channel9.msdn.com/Shows/Azure-Friday/Graphs-with-Azure-Cosmos-DB-Gremlin-API
.NET を使用して Azure Table Storage と Azure Cosmos DB Table API を使用する
https://docs.microsoft.com/ja-jp/azure/cosmos-db/table-storage-how-to-use-dotnet
Azure Cosmos DB: Gremlin API を使用して .NET Framework アプリケーションまたは .NET Core アプリ
ケーションを構築する
https://docs.microsoft.com/ja-jp/azure/cosmos-db/create-graph-dotnet
Apache TinkerPop™ The Gremlin Graph Traversal Machine and Language
https://tinkerpop.apache.org/gremlin.html
Editor's Notes
- Cosmos DBはグローバル分散に最適化されたデータベースなので、本日のお話はCosmos DBの使い方の中でもニッチな解説なのかもしれません。ただし、Cosmos DBの特長のひとつであるマルチモデル + マルチ APIという特長が最も伝わり安いセッションだと思います。この特長は調達仕様の策定から要件定義、設計および実装や運用に至るまで非常にインパクトの強い特長で、開発者のスキルが顕在化しやすい部分でもあります。
グローバル分散に関しては、一貫性のバリエーションについて学習されると調達時の役に立つと思います。本セッションでも軽くふれますが、本資料の巻末にリンク集を付けてありますのでそちらを参照ください。
本日はマルチモデル + マルチ APIのお話、そしてその中でもGraphデータモデルのお話になります。
- 自己紹介です。
- Cosmos DBのようなグローバル分散の永続化層が出てきた背景は、システムの変遷をみると理解できるかもしれません。N層システムからマッシュアップ、サーバーレスコンピューティングという流れの観点でお話しすると、それぞれの永続化層、ミドルウェア、UIについてスライドのようなことが言えます。
【スライドを読む】
【クリック】N層システムでは…
【クリック】マッシュアップでは…
【クリック】サーバーレスコンピューティングでは…
- 【クリック】分散アーキテクチャとそうでない場合を説明するためにリポジトリをデータストアとスキーマに分けてお話しします。
【クリック】分散アーキテクチャではない場合、データストアは物理的に同じ場所にあるのでAPIを取り換えることでUIからの様々なクエリに対応することができます。
【クリック】N層の場合はそのようなことを考える必要はありませんが、マッシュアップの場合は各種インターフェイスを用意する必要があるかもしれません。
【クリック】この場合はスキーマにも影響が出る場合がありますがデータストアには影響がありません。
【クリック】分散アーキテクチャの場合はデータストアが物理的に異なりますからスキーマやAPIを通して同期させる必要があります。
【クリック】さらにマイクロサービスの場合はUIとAPIの間にステートフルミドルウェアを形成する方法が採られます。また、別の会社、別の国にまたがったソリューションの場合、APIは複数の種類のクエリに対応する必要があるケースや様々な���ータモデルを扱う必要があるケースも考えられます。
- 結果的に、マイクロサービスや分散コンピューティングでサーバーレスコンピューティングをインプリメンテーションする場合、マルチモデル + マルチAPIでリスクを軽減させる方法は有用と考えます。
マルチモデル + マルチAPIを簡単に説明するとCosmos DBコンテナーと呼ばれるデータストアーで図のようなことが行われています。
【クリック】プリミティブ型のデータシーケンスをCosmos DBコンテナーが各スキーマを使って各モデルに射影します。
【クリック】各モデルをもう少し詳しくお話しします。一番下のAzure table storageを扱うTable APIと紛らわしいのですが、HadoopをHbaseで扱う際の列ファミリによるテーブルモデルをイメージしてください。
Azure table storageは、シンプルなキーバリュークエリに対応します。
次の、グラフモデルと言っているのはNode and Edge型のスキーマを指します。
また、ドキュメントモデルはMongoDB APIのほかにもDocumentDB SQL APIを使って扱えるドキュメント型のコレクションを指します。
Cassandraは、列ファミリで形成されたテーブルモデル以外にもKVSが表現できるモデルを扱えますが、グラフとの違いは必ずワンホップでデータにたどり着くという部分です。
たとえば、ある人の友人はワンホップで到達しますが、ある人の友人の友人とか、ある人が購入した音楽のアーティスト名といったクエリが必要な場合はグラフを使用します。
このようにARSを採用しデータの一貫性を保ちながらマルチモデル + マルチAPIに対応しているため、サーバーレスコンピューティングの効果を最大限に引き出せるようになっています。
Cosmos DBコンテナーは5つの一貫性レベルを持っています。この一貫性については分散アーキテクチャとしてAzure Functionsと同じくAzure Service Fabricを基盤としています。
- distributed graph database for real-time queries and, in parallel, a Big(Graph)Data processor for batch analytics
- vertices and edgesとかnodes and edgesとか言われている
Apache2 license.
- Atomic entity and storable for complex relations
複雑な推論が可能、頂点のカテゴライズとランキング、サブグラフの識別
柔軟で直観的なデータ構造
- http://tinkerpop.apache.org/