View a markdown version of this page

RDF 的集區模型 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

RDF 的集區模型

資源描述架構 (RDF) 具有具名圖形的概念,可提供分隔資料的邏輯方式。在 Amazon Neptune 中,您有預設的命名圖形和使用者定義的命名圖形。您可以視需要建立任意數量的具名圖形。統稱為 RDF 資料集。預設或使用者定義的所有具名圖形,都是由 RDF 資料集內的國際化資源識別符 (IRI) 定義。在 Neptune 中,除非使用者在寫入資料時宣告具名圖形,否則所有三元組都會被視為預設具名圖形的一部分。

具名圖形有多個使用案例:

  • 資料分割和資料隔離

  • 資料來源

  • 版本控制

  • Inference

本指南著重於資料分割使用案例。我們建議為每個租用戶建立一個使用者定義的具名圖形。

使用圖形存放區 HTTP 通訊協定的 SPARQL 查詢選項

下列範例查詢使用 SPARQL 通訊協定和 RDF 查詢語言 (SPARQL) 和圖形存放區 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 中,不同具名圖形節點之間的連線沒有限制。例如,在上圖中, 中的節點:G1可以透過 邊緣連接到 G2中的節點。

例如,如果特定租用戶的最終使用者提交查詢至 API,API 應先驗證下列要求,再將查詢提交至 Neptune 資料庫:

  • 在單一租用戶範圍的任何查詢都必須指定具名圖形。否則,您會面臨跨租用戶洩漏資料的風險。

  • 更新或刪除查詢應一律指定具名圖形。

  • 邊緣或關係任一端的節點應一律屬於正確的具名圖形。

如需最佳實務的其他資訊,請參閱 Neptune 文件