View a markdown version of this page

RDF のプールモデル - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

RDF のプールモデル

Resource Description Framework (RDF) には、名前付きグラフの概念があり、データを論理的に分離する方法を提供します。Amazon Neptune には、デフォルトの名前付きグラフとユーザー定義の名前付きグラフがあります。名前付きグラフは必要な数だけ作成できます。総称して、RDF データセットと呼ばれます。デフォルトまたはユーザー定義のすべての名前付きグラフは、RDF データセット内の国際化リソース識別子 (IRI) によって定義されます。Neptune では、ユーザーがデータの書き込み時に名前付きグラフを宣言しない限り、すべてのトリプルはデフォルトの名前付きグラフの一部と見なされます。

名前付きグラフには複数のユースケースがあります。

  • データパーティショニングとデータ分離

  • データ出典

  • バージョニング

  • 推論

このガイドでは、データパーティショニングのユースケースに焦点を当てています。テナントごとに 1 つのユーザー定義の名前付きグラフを作成することをお勧めします。

Graph Store HTTP Protocol を使用した SPARQL クエリオプション

次のクエリ例では、SPARQL プロトコルと RDF クエリ言語 (SPARQL) と Graph Store HTTP プロトコルを使用して、テナントの名前付きグラフをクエリまたは作成します。

  • HTTP GET ‒ テナントの特定のグラフを取得するには:

    curl --request GET 'https://your-neptune-endpoint:port/sparql/gsp/?graph=http%3A//www.example.com/named/tenant1'
  • HTTP PUT ‒ 特定の名前付きグラフを作成またはリクエストで指定されたペイロードに置き換えるには:

    curl --request PUT -H "Content-Type: text/turtle" \ --data-raw "@prefix ex: http://example.com/ . ex:subject ex:predicate ex:object ." \ 'https://your-neptune-endpoint:port/sparql/gsp/?graph=http%3A//www.example.com/named/tenant1'

    RDF では、オブジェクトはトリプルです。

  • HTTP POST ‒ 名前付きグラフが存在しない場合は新しいグラフを作成するか、既存のグラフとマージするには:

    curl --request POST -H "Content-Type: text/turtle" \ --data-raw "@prefix ex: http://example.com/ . ex:subject ex:predicate ex:object ." \ 'https://your-neptune-endpoint:port/sparql/gsp/?graph=http%3A//www.example.com/named/tenant1'

RDF のテナント分離

アプリケーションレイヤーに必要なガードレールがあるデータを論理的に分離するには、テナントとユーザー定義の名前付きグラフ間のマッピングを作成します。RDF データセットのマルチテナンシーを設計する場合は、RDF と SPARQL の次の側面に注意してください。

  • Neptune では、名前付きグラフを指定せずにクエリを実行すると、データベース内のすべての名前付きグラフでパターンに一致するすべてのトリプルを取得します。

  • RDF では、異なる名前付きグラフのノード間の接続に制約はありません。例えば、前の図では、 のノードを エッジを介して G2のノードに接続:G1できます。

たとえば、特定のテナントのエンドユーザーが API にクエリを送信する場合、API は Neptune データベースにクエリを送信する前に次の要件を検証する必要があります。

  • 単一のテナントを対象とするクエリでは、名前付きグラフを指定する必要があります。そうしないと、テナント間でデータが漏洩するリスクがあります。

  • 更新または削除クエリでは、常に名前付きグラフを指定する必要があります。

  • エッジまたはリレーションシップの両側にあるノードは、常に正しい名前付きグラフに属している必要があります。

ベストプラクティスの詳細については、Neptune ドキュメントを参照してください。