Google Cloud Datastore 提供了程式化的中繼資料存取機制,除了有利於支援元程式設計 (Metaprogramming)、導入後端管理功能之外、它還能提供簡單而一致的快取方式等類似的功能;舉例來說,您可以運用它建構自訂的應用程式資料庫檢視器。可用的中繼資料包括應用程式所用實體群組、命名空間、實體種類及屬性的相關資訊,也包括每項屬性的屬性表示法。
GCP 主控台中的 Cloud Datastore 資訊主頁也提供一些與應用程式相關的中繼資料,但就某些重要層面而言,該處顯示的資料不同於這些函式所傳回的資料。
- 時效性: 使用 API 讀取中繼資料會傳回最新資料,資訊主頁中的資料每天只更新一次。
- 內容: 無法透過 API 讀取資訊主頁中的某些中繼資料;反之亦然。
- 速度: 中繼資料取得和查詢作業的計費方式與資料庫取得和查詢作業的計費方式相同。擷取命名空間、種類及屬性相關資訊的中繼資料查詢作業,執行速度通常較慢。根據經驗法則,一項中繼資料查詢傳回 N 個實體所需的時間,大約相當於 N 項一般查詢各自傳回單一實體所需的時間。再者,屬性表示法查詢 (非純金鑰屬性查詢) 的速度比純金鑰屬性查詢慢。中繼資料取得實體群組中繼資料的速度略快於取得一般實體的速度。
中繼資料查詢
中繼資料查詢可使用三種預留的特殊實體種類:
| 實體 | 說明 |
|---|---|
__namespace__ |
用於尋找應用程式實體中使用的所有命名空間。 |
__kind__ |
用於查詢特定種類。 |
__property__ |
用於查詢特定屬性類型的中繼資料。 |
這些種類不會與應用程式中可能已經存在的其他同名種類發生衝突。查詢這些特殊種類即可擷取包含所需中繼資料的實體。
中繼資料查詢傳回的實體是根據 Datastore 現狀而動態產生的。您可以建立 __namespace__、__kind__ 或 __property__ 種類的本機實體物件,但無法在 Datastore 中儲存這些物件。
命名空間查詢
您可以使用「命名空間查詢」尋找應用程式實體中使用的所有命名空間。您可以透過這種方式執行活動,例如跨多個命名空間的管理功能。
命名空間查詢會傳回屬於特殊種類 __namespace__ 的實體,其金鑰名稱為命名空間的名稱 (標註空字串 "" 的預設命名空間是例外情形:空字串並非有效的金鑰名稱,因此,這個命名空間的金鑰會改以數字 ID 1 表示)。此類查詢只支援篩選特殊虛擬屬性 __key__,其值即為實體的金鑰。可以按 __key__ 值遞增排序結果 (不能按遞減排序)。__namespace__ 實體沒有屬性,因此,純金鑰查詢和非純金鑰查詢傳回的資訊會是一樣的。
以下範例會傳回應用程式命名空間清單,其範圍介於 startNamespace 和 endNamespace 變數的指定值之間:
C#
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore C# API 參考說明文件。
Go
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Go API 參考說明文件。
Java
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Java API 參考說明文件。
Node.js
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Node.js API 參考文件。
PHP
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore PHP API 參考說明文件。
Python
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Python API 參考說明文件。
Ruby
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Ruby API 參考說明文件。
GQL
SELECT __key__ FROM __namespace__ WHERE __key__ >= KEY(__namespace__, 'namespace-a') AND __key__ < KEY(__namespace__, 'namespace-b')
種類查詢
「種類查詢」會傳回金鑰名稱為實體種類名稱的 __kind__ 種類實體。這種類型的查詢間接受限於目前的命名空間,且支援限定 __key__ 虛擬屬性範圍的篩選作業。結果可依照 __key__ 值的遞增順序排序 (但無法依照遞減順序排序)。__kind__ 實體沒有屬性,因此,純金鑰查詢和非純金鑰查詢都會傳回相同的資訊。
以下範例會顯示應用程式所用種類的清單:
C#
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore C# API 參考說明文件。
Go
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Go API 參考說明文件。
Java
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Java API 參考說明文件。
Node.js
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Node.js API 參考文件。
PHP
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore PHP API 參考說明文件。
Python
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Python API 參考說明文件。
Ruby
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Ruby API 參考說明文件。
GQL
SELECT __key__ FROM __kind__
屬性查詢
「屬性查詢」會傳回表示實體種類相關屬性的 __property__ 種類實體 (不含未建立索引的屬性)。表示「K」種類屬性「P」的實體以下列方式建構:
- 實體金鑰的種類是
__property__,金鑰名稱是「p」。 - 實體父項金鑰的種類是
__kind__,金鑰名稱是「k」。 - 實體的
property_representation陣列屬性包含該實體的所有表示法。
例如,若您的資料庫只包含屬性分別是 name 和 done 的兩個 Task 實體:
Key: 'Task:1'
name: 'Read some properties'
done: true
Key: 'Task:2'
name: 'Climb'
done: null
__property__ 查詢傳回的兩個實體就會是:
Key: '__kind__:Task/__property__:name'
property_representation: [ 'STRING' ]
Key: '__kind__:Task/__property__:done'
property_representation: [ 'BOOLEAN', 'NULL' ]
屬性查詢間接受限於目前的命名空間,而且支援使用祖系或針對某個範圍的 __key__ 虛擬屬性進行限定篩選。
「純金鑰」屬性查詢比非純金鑰查詢更有效率,因為前者不需要收集屬性的表示法。以下範例擷取應用程式所有實體種類的名稱,以及各個名稱的關聯屬性:
C#
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore C# API 參考說明文件。
Go
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Go API 參考說明文件。
Java
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Java API 參考說明文件。
Node.js
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Node.js API 參考文件。
PHP
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore PHP API 參考說明文件。
Python
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Python API 參考說明文件。
Ruby
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Ruby API 參考說明文件。
GQL
SELECT __key__ FROM __property__
屬性查詢:屬性表示法
非純金鑰屬性查詢亦稱為「屬性表示法查詢」,會傳回各屬性所用值類型的其他相關資訊。實體中的 property_representation 屬性表示「k」種類的「p」屬性,這個屬性是陣列,包含任何「k」種類實體中「p」屬性的所有「表示法」。
每個值各自使用以下「表示法」 (請注意,有些值類型使用相同的表示法):
| 值類型 | 表示法 |
|---|---|
| 整數 | INT64 |
| 浮點數 | DOUBLE |
| 布林值 | BOOLEAN |
| 文字字串 | STRING |
| 位元組字串 | STRING |
| 日期和時間 | INT64 |
| Datastore 金鑰 | REFERENCE |
| 嵌入實體 | STRING |
| 陣列 | 陣列元素的表示法 |
| 地理點 | POINT |
| 空值 | NULL |
以下範例使用祖系屬性查詢尋找 Task 種類屬性的所有表示法:
C#
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore C# API 參考說明文件。
Go
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Go API 參考說明文件。
Java
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Java API 參考說明文件。
Node.js
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Node.js API 參考文件。
PHP
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore PHP API 參考說明文件。
Python
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Python API 參考說明文件。
Ruby
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Ruby API 參考說明文件。
GQL
SELECT * FROM __property__ WHERE __key__ HAS ANCESTOR KEY(__kind__, 'Task')
屬性查詢:篩選
屬性查詢支援以 __kind__ 或 __property__ 金鑰進行祖系篩選,可將查詢結果限制在單一種類或屬性,如前述的屬性表示法查詢所示。
也可以使用虛擬屬性 __key__ 範圍篩選屬性查詢,其中金鑰表示 __kind__ 或 __property__ 實體。可以按 __key__ 值遞增排序結果 (不能按遞減排序)。篩選功能適用於種類-屬性對組,先按種類排序,再按屬性排序。例如,假設您的實體包含以下屬性:
Task種類,屬性包括:createdprioritytags
TaskList種類,屬性包括:created
以下純金鑰屬性查詢:
C#
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore C# API 參考說明文件。
Go
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Go API 參考說明文件。
不適用Java
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Java API 參考說明文件。
Node.js
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Node.js API 參考文件。
不適用PHP
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore PHP API 參考說明文件。
Python
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Python API 參考說明文件。
不適用Ruby
如要瞭解如何安裝及使用 Cloud Datastore 所需的用戶端程式庫,請參閱 Cloud Datastore 用戶端程式庫一文。詳細資訊請參閱 Cloud Datastore Ruby API 參考說明文件。
GQL
SELECT __key__ FROM __property__ WHERE __key__ >= KEY(__kind__, 'Task', __property__, 'priority')
會收集以下種類、屬性名稱對組:
Task, priority
Task, tags
TaskList, created
請注意,結果包含 Task 種類和 TaskList 種類的屬性,但不包含 Task 種類的 created 屬性,因為這個屬性不在查詢所指定的範圍內。