Progress Acquires MarkLogic! Learn More
BLOG ARTICLE

MarkLogicにおけるGraphQLのご紹介

Back to blog
03.07.2023
0 minute read
Back to blog
03.07.2023
0 minute read

MarkLogic 11より、MarkLogicデータベースのビューに対してGraphQLクエリを実行できるようになりました。これにより、ますます人気が高まっているGraphQLに興味がある方、またはすでに使用している方が、このクエリ言語を使ってMarkLogicに対して安全にクエリを実行できるようになりました。

GraphQLとは何か

GraphQLは、API用のクエリ言語であり、既存のデータにクエリを実行するためのランタイムでもあります。GraphQLは、API内でデータを完全かつわかりやすく説明します。またクライアントが必要なものだけを要求する力を与え、時間の経過とともにAPIを進化させることを容易にし、強力な開発者ツールを可能にします。

https://graphql.org/

MarkLogicのビューにGraphQLを使用する

MarkLogicでは、SQLおよびOptic APIでマルチモデルデータのビューをクエリ可能ですが、今回これにGraphQLが加わりました。GraphQLクエリを実行するにはビューが必要です。MarkLogicでは、2種類のビューを定義しています。インデックスビューとクエリベースビューです。インデックスビューは、TDE(Template Driven Extraction)で実現されます。

TDEでは、ドキュメントがデータベースに書き込まれる際に、ビューインデックスをポピュレートします。これらのビューは、データベース内に格納されているレコードとトランザクション的な一貫性があります。

—TDEの詳細については、https://docs.marklogic.com/guide/app-dev/TDEを参照してください。

QBV(Query Based Views)は、クエリ時に評価されるビューです。これらのビューは、MarkLogicのOptic APIで記述された保存済みクエリです。複数のモデルを対象としてロバストなクエリを記述できます。

-Optic APIおよびGBVの詳細については、 https://docs.marklogic.com/guide/app-dev/OpticAPIを参照してください。

GraphQLクエリを記述する

GraphQLクエリを構築する場合、その内部構造を理解しておくことが重要です。GraphQLクエリは内部的に翻訳され、MarkLogicのOptic APIにより実行されます。これにより、あらゆる形やサイズのデータに対してリッチなクエリを実行できます。

以下は、「住宅ローン」に関する情報を探すクエリの例です。GraphQLがサポートするシンタックスすべてについて理解を深めるには、https://graphql.org/learn/queries/を参照してください。とりあえずここでは、この例を使ってその構造を理解していきます。

sample query - mortgages

操作タイプおよび操作名 – MarkLogicではGraphQLを使ってクエリできます。この例には、操作タイプ「query」および操作名「MortgageQuery」があります。操作のタイプと名前を指定することで、このコードの意味がはっきりするので、あとから見た人もクエリの意図をすぐ理解できるようになります。

スキーマとタイプ – GraphQLでは、オブジェクトのタイプとフィールドのリストを指定して、データをクエリできます。MarkLogicでは、Schema_Viewパターンでオブジェクトタイプを命名することで、このオブジェクトタイプがスキーマおよびビューにマッピングされます。上記の例では、Mortgage_Detailsオブジェクトタイプは、Mortgageスキーマ内のDetails ビューにマッピングされています。

フィルタリング – GraphQLでは、フィールドおよびマッチする値を指定することで、クエリ対象データを制限可能です。この例では、「LoanType」の値が「Conventional」である住宅ローンを検索します。

ページネーション – フィルタ内で「first」および「offset」フィールドを指定することで、結果の数やスキップするアイテムの数を指定可能です。

ソート – GraphQLでは@Sortを使って、ソートに使用するフィールドと方向を指定できます。この例では、住宅ローンの終了日をフィールドに指定し降順でソートしています。

フィールドの選択 – ビューに列がたくさんあった場合、フィールドを列挙することで、取得したいデータを指定可能です。

GraphQLクエリの送信

MarkLogicには、ビューデータとやり取りするためのAPIが複数標準装備されています。v1/rowsエンドポイントを使用すると、サポートされているいくつかのクエリ言語によりビューデータを取得できます。v1/rows/graphqlエンドポイントでは、GraphQLシンタックスを利用したクエリを送信できます。このRESTエンドポイントは、cURLのような単純なユーティリティでも、より高度なツールでも活用できます。

ファイルに保存されたGraphQLクエリを使用したcURLの例:

curl --location --request POST 
'http://localhost:8000/v1/rows/graphql' \ 
--header 'Content-Type: application/graphql' \ 
--data '@query.graphql'

GraphQLの結果を可視化する

多くのデータ可視化ソリューションが、データソースとしてのGraphQLエンドポイントに対応しています。以下の例では、人気の高い観測プラットフォームであるGrafanaが、MarkLogicにGraphQLクエリを送信し、結果を可視化する方法を示しています。

これを行うには、Grafana用のGraphQLプラグインが必要です。同社のマーケットプレイスには、いくつかのプラグインが用意されています。プラグインをインストールすると、MarkLogicで利用できる/v1/rows/graphqlエンドポイントに接続できます。

screenshot of GraphQL plug-in for Grafana

— GraphQLのプラグイン:https://grafana.com/grafana/plugins/fifemon-graphql-datasource/

データソースを設定したら、GraphQLデータソースを使用してパネルを追加できます。この例では、すべての住宅ローンのメタデータを表に表示しています。可視化の方法はいくかあります(グラフ、チャート、マップなど)。

screenshot of GraphQL powered mortgage dashboard - edit panel

全体が表示されているこのダッシュボードでは、MarkLogicサーバーへのライブ接続を利用することで、複数のGraphQLクエリを実行して、すべての情報を迅速かつ効果的にポピュレートします。ここではドキュメントビュー、グラフビュー(世帯)、地理情報といったマルチモデルデータが活用されていることがわかります。

screenshot of GraphQL powered mortgage dashboard

まとめ

GraphQLは、モダンなAPIのための標準化されたクエリ言語です。今回、MarkLogicがGraphQLに対応することで、成長し続ける企業内でリッチなマルチモデルデータセットを統合できる新たな機会が生まれます。

MarkLogicのGraphQLクエリサービスの詳細については、MarkLogic 11リリースノート内の「GraphQL new feature update」を参照してください。

Drew Wanczowski

Drew Wanczowski is a Principal Solutions Engineer at MarkLogic in North America. He has worked on leading industry solutions in Media & Entertainment, Publishing, and Research. His primary specialties surround Content Management, Metadata Standards, and Search Applications.

Read more by this author

Share this article

Read More

Related Posts

Like what you just read, here are a few more articles for you to check out or you can visit our blog overview page to see more.

Product

Semantics, Search, MarkLogic 11 and Beyond

Get info on recent and upcoming product updates from John Snelson, head of the MarkLogic product architecture team.

All Blog Articles
Product

Integrating MarkLogic with Kafka

The MarkLogic Kafka Connector makes it easy to move data between the two systems, without the need for custom code.

All Blog Articles
Product

Introduction to GraphQL with MarkLogic

MarkLogic 11 introduces support for GraphQL queries that run against views in your MarkLogic database. Customers interested in or already using GraphQL can now securely query MarkLogic via this increasingly popular query language.

All Blog Articles

Sign up for a Demo

Don’t waste time stitching together components. MarkLogic combines the power of a multi-model database, search, and semantic AI technology in a single platform with mastering, metadata management, government-grade security and more.

Request a Demo