GAE 採用的 Java 儲存技術

GAE 雲端程式

簡介

環境安裝

管理介面

資料庫

中文編碼

程式範例

Hello

Guestbook

WikiBox

TxtDBase

訊息

相關網站

參考文獻

最新修改

簡體版

English

簡介

為了適應雲端運算的網路特性,GAE 必須支援非常龐大的資料庫,這些資料分別儲存在許多不同的電腦中,並且能快速且平行的被儲存或取出。由於 Google 是以搜尋引擎起家的公司,擅長文件型資料的處理,因此 GAE 所支援的資料庫,並非傳統的關連性資料庫,而是基於反向索引 (Reverse Index) 的全文檢索型資料庫。

GAE 直接連接到 Google 雲端平台,採用 Map-Reduce 運算與 BigTable、NFS 等基於全文檢索技術的資料庫,因此並不支援下列的操作,像是 JOIN、GROUP 等操作。其根本原因是 GAE 採用基於反向索引 (Reverse Index) 的全文檢索型機制,而關聯式資料庫則採用基於 B-Tree 的機制。

B-Tree 是一種具有排序特性的索引結構,因此可以輕易的支援 >、<、JOIN、GROUP 等操作,但是 Reverse Index 則是一種使用赫序函數 (Hash Function) 的雜湊表結構,因此難以支援 >、< 等操作,只能支援 = 這樣的操作符號。

在 Google Apps Engine (GAE) 雲端運算平台中,採用了 Java Data Object (JDO) 和 Java Persistence API (JPA) 等儲存技術。這種儲存技術乃是根據資料庫的概念進一步延伸而來的,讓任何 Java 物件都可以輕易的被「儲存、修改、刪除、查詢」。

GAE 的資料庫支援交易 (transaction),以便處理多人同時進行交易的情況,因此您可以在 GAE 的資料庫中使用 commit 機制,以確保交易的原子特性 (要嘛全都完成,要嘛全都放棄)。

物件的儲存

GAE 的資料儲存單元是一種稱為實體 (entity) 的物件 (object),每個實體具有許多個屬性 (properties)。這些物件的儲存並非像傳統關聯式資料庫採用表格與欄位的方式,而是採用一種非結構性 (schemaless) 的儲存方式,直接由儲存引擎取出整個區塊後,再由應用層的 JDO 與 JPA 去對應到 Java 物件中。

JDO 與 JPA 的角色,主要是將非結構性區塊對應到 Java 物件,讓這些區塊能在 Java 程式中以物件的形式被使用,這也正是 GAE 採用 JDO 與 JPA 的主要原因。

參考文獻

  1. Google 應用服務引擎

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License