Azure Cosmos DB の概要:Gremlin APIIntroduction to Azure Cosmos DB: Gremlin API

Azure Cosmos DB は、ミッション クリティカルなアプリケーション向けの、Microsoft のグローバル分散マルチモデル データベース サービスです。Azure Cosmos DB is the globally distributed, multi-model database service from Microsoft for mission-critical applications. これはマルチモデル データベースであり、ドキュメント、キー値、グラフ、列ファミリのデータ モデルがサポートされています。It is a multi-model database and supports document, key-value, graph, and column-family data models. Azure Cosmos DB Gremlin API は、あらゆるスケール向けに設計されたフル マネージド データベース サービスで、グラフ データを格納および操作するために使用されます。The Azure Cosmos DB Gremlin API is used to store and operate with graph data on a fully managed database service designed for any scale.

Azure Cosmos DB グラフ アーキテクチャ

この記事では、Azure Cosmos DB Gremlin API の概要と、これを使用して何十億もの頂点と辺のある大規模なグラフを保存する方法について説明します。This article provides an overview of the Azure Cosmos DB Gremlin API and explains how you can use it to store massive graphs with billions of vertices and edges. ミリ秒の待機時間でグラフを照会したり、グラフ構造を簡単に改善したりできます。You can query the graphs with millisecond latency and evolve the graph structure easily. Azure Cosmos DB の Gremlin API は Apache TinkerPop  グラフ データベース標準に基づいており、Gremlin クエリ言語を使用します。Azure Cosmos DB's Gremlin API is based on the Apache TinkerPop graph database standard, and uses the Gremlin query language.

Azure Cosmos DB の Gremlin API は、グラフ データベース アルゴリズムの機能を非常にスケーラブルなマネージド インフラストラクチャと結合して、柔軟性の不足に関連する最も一般的なデータの問題への一意で柔軟な解決策と、リレーショナル アプローチを提供します。Azure Cosmos DB's Gremlin API combines the power of graph database algorithms with highly scalable, managed infrastructure to provide a unique, flexible solution to most common data problems associated with lack of flexibility and relational approaches.

Azure Cosmos DB グラフ データベースの機能Features of Azure Cosmos DB graph database

Azure Cosmos DB は、グローバル配布、ストレージとスループットのエラスティック スケーリング、自動インデックス作成とクエリ、調整可能な整合性レベルを提供し、TinkerPop 標準をサポートする、完全に管理されたグラフ データベースです。Azure Cosmos DB is a fully managed graph database that offers global distribution, elastic scaling of storage and throughput, automatic indexing and query, tunable consistency levels, and support for the TinkerPop standard.

Azure Cosmos DB Gremlin API で提供される差別化された機能は、次のとおりです。The following are the differentiated features that Azure Cosmos DB Gremlin API offers:

  • 弾力的にスケーラブルなスループットとストレージElastically scalable throughput and storage

    実際のグラフは、1 つのサーバーの容量を超えてスケールする必要があります。Graphs in the real world need to scale beyond the capacity of a single server. Azure Cosmos DB では、ストレージとプロビジョニングされたスループットの観点で実質的に無制限のサイズを持つことができる、水平方向にスケーラブルなグラフ データベースがサポートされています。Azure Cosmos DB supports horizontally scalable graph databases that can have a virtually unlimited size in terms of storage and provisioned throughput. グラフ データベースのスケールが大きくなるにつれて、データはグラフのパーティション分割を使用して自動的に分散されます。As the graph database scale grows, the data will be automatically distributed using graph partitioning.

  • 複数リージョンのレプリケーションMulti-region replication

    Azure Cosmos DB では、世界中の任意の Azure リージョンにグラフ データを自動的にレプリケートできます。Azure Cosmos DB can automatically replicate your graph data to any Azure region worldwide. グローバル レプリケーションを使用すると、データへのグローバル アクセスを必要とするアプリケーションの開発を簡素化できます。Global replication simplifies the development of applications that require global access to data. Azure Cosmos DB は、世界中の任意の場所で読み取りと書き込みの待機時間を最小化するだけでなく、リージョン内でサービスが中断するまれなケースにおいて、アプリケーションの継続性を確保できるリージョン内の自動リージョン内フェールオーバー メカニズムを提供します。In addition to minimizing read and write latency anywhere around the world, Azure Cosmos DB provides automatic regional failover mechanism that can ensure the continuity of your application in the rare case of a service interruption in a region.

  • 最も広く採用されているグラフ クエリ標準を使用した高速なクエリとトラバーサルFast queries and traversals with the most widely adopted graph query standard

    異種の頂点と辺を格納し、使い慣れた Gremlin 構文を使用してこれらのクエリを実行します。Store heterogeneous vertices and edges and query them through a familiar Gremlin syntax. Gremlin は、一般的なグラフ アルゴリズムを実装するために豊富なインターフェイスを提供する命令型で関数型のクエリ言語です。Gremlin is an imperative, functional query language that provides a rich interface to implement common graph algorithms.

    Azure Cosmos DB では、スキーマのヒント、セカンダリ インデックス、またはビューを指定しなくても、豊富なリアルタイム クエリとトラバーサルが可能です。Azure Cosmos DB enables rich real-time queries and traversals without the need to specify schema hints, secondary indexes, or views. 詳細については、Gremlin を使用したグラフの照会に関する記事を参照してください。Learn more in Query graphs by using Gremlin.

  • フル マネージドのグラフ データベースFully managed graph database

    Azure Cosmos DB を使用すると、データベースやコンピューター リソースを管理する手間がかかりません。Azure Cosmos DB eliminates the need to manage database and machine resources. ほとんどの既存のグラフ データベース プラットフォームは、そのインフラストラクチャの制限事項に縛られ、多くの場合、その運用を確実に行うために高度なメンテナンスが必要になります。Most existing graph database platforms are bound to the limitations of their infrastructure and often require a high degree of maintenance to ensure its operation.

    フル マネージド サービスとして、Cosmos DB では、仮想マシンの管理、ランタイム ソフトウェアの更新、シャーディングやレプリケーションの管理、複雑なデータ層のアップグレードの操作を行う必要がなくなります。As a fully managed service, Cosmos DB removes the need to manage virtual machines, update runtime software, manage sharding or replication, or deal with complex data-tier upgrades. すべてのグラフが自動的にバックアップされ、リージョンの障害から保護されます。Every graph is automatically backed up and protected against regional failures. このような保証により、開発者はグラフ データベースの運用と管理ではなく、アプリケーションの価値の提供に専念できます。These guarantees allow developers to focus on delivering application value instead of operating and managing their graph databases.

  • インデックスの自動作成Automatic indexing

    既定では、Azure Cosmos DB はグラフのノードおよび辺内のすべてのプロパティのインデックスを自動的に作成するため、スキーマや、セカンダリ インデックスの作成は不要です。By default, Azure Cosmos DB automatically indexes all the properties within nodes and edges in the graph and doesn't expect or require any schema or creation of secondary indices. 詳細については、Azure Cosmos DB のインデックス作成に関する記事をご覧ください。Learn more about indexing in Azure Cosmos DB.

  • Apache TinkerPop との互換性Compatibility with Apache TinkerPop

    Azure Cosmos DB では、オープン ソースの Apache TinkerPop 標準がサポートされています。Azure Cosmos DB supports the open-source Apache TinkerPop standard. Tinkerpop 標準には、Azure Cosmos DB の Gremlin API と簡単に統合できるアプリケーションおよびライブラリの豊富なエコシステムがあります。The Tinkerpop standard has an ample ecosystem of applications and libraries that can be easily integrated with Azure Cosmos DB's Gremlin API.

  • 調整可能な整合性レベルTunable consistency levels

    Azure Cosmos DB では、ご利用のアプリケーションに対する整合性とパフォーマンスの間の最適なトレードオフを実現するために、適切に定義された 5 つの整合性レベルが提供されます。Azure Cosmos DB provides five well-defined consistency levels to achieve the right tradeoff between consistency and performance for your application. Azure Cosmos DB では、クエリと読み取り操作に関して、強固、有界整合性制約、セッション、一貫性のあるプレフィックス、最終的の 5 種類の整合性レベルを提供します。For queries and read operations, Azure Cosmos DB offers five distinct consistency levels: strong, bounded-staleness, session, consistent prefix, and eventual. 明確に定義されたきめ細かな整合性レベルにより、整合性、可用性、待機時間の適切なトレードオフを行うことができます。These granular, well-defined consistency levels allow you to make sound tradeoffs among consistency, availability, and latency. 詳しくは、「Azure Cosmos DB の調整可能なデータの一貫性レベル」をご覧ください。Learn more in Tunable data consistency levels in Azure Cosmos DB.

Gremlin API を使用できるシナリオScenarios that can use Gremlin API

Azure Cosmos DB のグラフ サポートが役立つ場合があるいくつかのシナリオを以下に示します。Here are some scenarios where graph support of Azure Cosmos DB can be useful:

  • ソーシャル ネットワーク/Customer 365Social networks/Customer 365

    顧客に関するデータと顧客による他のユーザーとのやり取りに関するデータを組み合わせることで、パーソナライズされたエクスペリエンスを開発したり、顧客の行動を予測したりできます。また、ユーザーを同じような興味を持つ他のユーザーと結び付けることもできます。By combining data about your customers and their interactions with other people, you can develop personalized experiences, predict customer behavior, or connect people with others with similar interests. Azure Cosmos DB を使用して、ソーシャル ネットワークを管理し、顧客の嗜好やデータを追跡できます。Azure Cosmos DB can be used to manage social networks and track customer preferences and data.

  • 推奨エンジンRecommendation engines

    このシナリオは、小売業界で一般的に使用されます。This scenario is commonly used in the retail industry. 製品、ユーザー、ユーザー インタラクション (商品の購入、閲覧、評価など) に関する情報を組み合わせることで、カスタマイズされたレコメンデーションを構築できます。By combining information about products, users, and user interactions, like purchasing, browsing, or rating an item, you can build customized recommendations. 低待機時間、エラスティック スケール、グラフのネイティブ サポートを実現する Azure Cosmos DB は、これらのシナリオに最適です。The low latency, elastic scale, and native graph support of Azure Cosmos DB is ideal for these scenarios.

  • 地理空間Geospatial

    通信、物流、旅行プランニングの各分野の多くのアプリケーションでは、エリア内で対象となる場所を見つけたり、2 つの場所間の最短ルートや最適ルートを見つけたりする必要があります。Many applications in telecommunications, logistics, and travel planning need to find a location of interest within an area or locate the shortest/optimal route between two locations. Azure Cosmos DB はこれらの問題に自然に適合します。Azure Cosmos DB is a natural fit for these problems.

  • モノのインターネット (IoT)Internet of Things

    ネットワークと、グラフとしてモデル化された IoT デバイス間の接続により、デバイスと資産の状態について理解を深めることができます。With the network and connections between IoT devices modeled as a graph, you can build a better understanding of the state of your devices and assets. さらに、ネットワークのある部分の変更が別の部分に及ぼす可能性のある影響についても学習できます。You also can learn how changes in one part of the network can potentially affect another part.

グラフ データベースの概要Introduction to graph databases

実世界で出現するデータは、自然に結び付けられています。Data as it appears in the real world is naturally connected. 従来のデータ モデリングでは、エンティティを個別に定義して、実行時にそれらのリレーションシップを計算することに焦点が当てられています。Traditional data modeling focuses on defining entities separately and computing their relationships at runtime. このモデルにはその利点がありますが、緊密に接続されたデータをその制約の下で管理するのは困難な場合があります。While this model has its advantages, highly connected data can be challenging to manage under its constraints.

グラフ データベース アプローチは、代わりに、ストレージ層でリレーションシップを持続することに依存します。これで、グラフ取得の操作が非常に効率的になります。A graph database approach relies on persisting relationships in the storage layer instead, which leads to highly efficient graph retrieval operations. Azure Cosmos DB の Gremlin API では、プロパティ グラフ モデルがサポートされています。Azure Cosmos DB's Gremlin API supports the property graph model.

プロパティ グラフのオブジェクトProperty graph objects

プロパティ グラフとは、頂点で構成された構造です。A property graph is a structure that's composed of vertices and edges. 両方のオブジェクトで、プロパティとして任意の数のキーと値のペアを持つことができます。Both objects can have an arbitrary number of key-value pairs as properties.

  • 頂点 - 頂点は、人、場所、イベントなどの個々のエンティティを表します。Vertices - Vertices denote discrete entities, such as a person, a place, or an event.

  • - 辺は、頂点間のリレーションシップを表します。Edges - Edges denote relationships between vertices. たとえば、あるユーザーは、別のユーザーと知り合いで、あるイベントに関連があり、ある場所に最近行ったような場合です。For example, a person might know another person, be involved in an event, and recently been at a location.

  • プロパティ - プロパティは頂点と辺に関する情報を表します。Properties - Properties express information about the vertices and edges. 頂点または辺のいずれかに任意の数のプロパティが存在する可能性があり、それらをクエリ内のオブジェクトの記述やフィルター処理に使用できます。There can be any number of properties in either vertices or edges, and they can be used to describe and filter the objects in a query. プロパティの例には、名前と年齢を持つ頂点、タイムスタンプや重みを持つことができる辺などがあります。Example properties include a vertex that has name and age, or an edge, which can have a time stamp and/or a weight.

グラフ データベースは、スキーマまたは制約付きデータ モデルへの依存関係がないため、多くの場合、NoSQL または非リレーショナル データベース カテゴリ内に含まれています。Graph databases are often included within the NoSQL or non-relational database category, since there is no dependency on a schema or constrained data model. このようにスキーマが無いことにより、接続されている構造体を自然かつ効率的にモデリングして格納できます。This lack of schema allows for modeling and storing connected structures naturally and efficiently.

Gremlin の例Gremlin by example

サンプル グラフを使用して、Gremlin でクエリを表現する方法を理解しましょう。Let's use a sample graph to understand how queries can be expressed in Gremlin. 次の図は、ユーザー、関心事、デバイスに関するデータを管理するビジネス アプリケーションをグラフの形で示しています。The following figure shows a business application that manages data about users, interests, and devices in the form of a graph.

ユーザー、デバイス、関心事を示すサンプル データベース

このグラフには、次の頂点の種類 (Gremlin では "ラベル" と呼ばれます) が含まれています。This graph has the following vertex types (called "label" in Gremlin):

  • ユーザー: このグラフには、Robin、Thomas、Ben の 3 人のユーザーが含まれています。People: The graph has three people, Robin, Thomas, and Ben
  • 関心: 各ユーザーの関心事。この例では、フットボールの試合です。Interests: Their interests, in this example, the game of Football
  • [デバイス] : ユーザーが使用しているデバイスです。Devices: The devices that people use
  • オペレーティング システム: 各デバイスが実行されているオペレーティング システムです。Operating Systems: The operating systems that the devices run on

次のの種類/ラベルによって、これらのエンティティの関係を表しています。We represent the relationships between these entities via the following edge types/labels:

  • 知り合い: たとえば、"Thomas は Robin を知っている" ことが示されています。Knows: For example, "Thomas knows Robin"
  • 関心あり: このグラフの各ユーザーの関心事を表します。たとえば、"Ben はフットボールに関心がある" ことが示されています。Interested: To represent the interests of the people in our graph, for example, "Ben is interested in Football"
  • RunsOS: ノート PC で Windows OS が実行されています。RunsOS: Laptop runs the Windows OS
  • 使用: ユーザーが使用しているデバイスを表します。Uses: To represent which device a person uses. たとえば、Robin はシリアル番号が 77 の Motorola Phone を使用しています。For example, Robin uses a Motorola phone with serial number 77

Gremlin コンソールを使用して、このグラフに対していくつかの操作を実行しましょう。Let's run some operations against this graph using the Gremlin Console. これらの操作は、任意のプラットフォーム (Java、Node.js、Python、または .NET) で Gremlin ドライバーを使用して実行することもできます。You can also perform these operations using Gremlin drivers in the platform of your choice (Java, Node.js, Python, or .NET). Azure Cosmos DB でサポートされているものを確認する前に、構文に慣れるために例をいくつか見てみましょう。Before we look at what's supported in Azure Cosmos DB, let's look at a few examples to get familiar with the syntax.

まず、CRUD を見てみます。First let's look at CRUD. 次の Gremlin ステートメントでは、グラフに "Thomas" 頂点を挿入します。The following Gremlin statement inserts the "Thomas" vertex into the graph:

:> g.addV('person').property('id', 'thomas.1').property('firstName', 'Thomas').property('lastName', 'Andersen').property('age', 44)

次の Gremlin ステートメントでは、Thomas と Robin の間に "knows" 辺を挿入します。Next, the following Gremlin statement inserts a "knows" edge between Thomas and Robin.

:> g.V('thomas.1').addE('knows').to(g.V('robin.1'))

次のクエリは、ユーザーの姓の降順で "person" 頂点を返します。The following query returns the "person" vertices in descending order of their first names:

:> g.V().hasLabel('person').order().by('firstName', decr)

グラフが強調表示されている場合、"Thomas の友人が使用しているオペレーティング システムは何か" というような質問に答える必要があります。Where graphs shine is when you need to answer questions like "What operating systems do friends of Thomas use?". 次の Gremlin トラバーサルを実行することで、グラフからこの情報を取得できます。You can run this Gremlin traversal to get that information from the graph:

:> g.V('thomas.1').out('knows').out('uses').out('runsos').group().by('name').by(count())

次のステップNext steps

Azure Cosmos DB のグラフ サポートの詳細については、以下をご覧ください。To learn more about graph support in Azure Cosmos DB, see: