建立、擷取、更新及刪除實體

Datastore 中的資料物件又稱為「實體」。為方便查詢,每個實體會分門別類到特定的「種類」中。舉例來說,人力資源應用程式可以用 Employee 種類的實體來代表每位員工。請注意,實體資料值採屬性形式。如要進一步瞭解實體,請參閱「實體、屬性和金鑰」概念文件。

建立實體及設定屬性

在 Java 中,您可以透過建構 Entity 類別的例項,建立新實體,並將實體的類型做為 Entity() 建構函式的引數。視需求填入實體的屬性後,將實體以引數的形式傳送給 DatastoreService.put() 方法,即可在資料儲存庫中儲存實體。您可以將實體的索引鍵名稱當做第二個引數傳送給建構函式,藉此為實體指定索引鍵名稱。

以下範例示範了如何建立 Employee 類型的實體、填入屬性值,然後儲存至資料儲存庫:

Entity employee = new Entity("Employee", "asalieri");
employee.setProperty("firstName", "Antonio");
employee.setProperty("lastName", "Salieri");
employee.setProperty("hireDate", new Date());
employee.setProperty("attendedHrTraining", true);

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(employee);

請注意,如果您沒有提供金鑰名稱,Datastore 會自動產生用於實體金鑰的數字 ID:

Entity employee = new Entity("Employee");
// Set the entity properties.
// ...
datastore.put(employee);

擷取實體

如要擷取指定金鑰所標示的實體,請將 Key 物件傳遞至 DatastoreService.get() 方法:

// Key employeeKey = ...;
Entity employee = datastore.get(employeeKey);

更新實體

如要更新現有實體,請修改實體物件的屬性,然後將物件傳送至 DatastoreService.put() 方法。物件資料會覆寫現有實體,每次呼叫 put() 時,系統會將整個物件傳送至 Datastore。

Entity employee = new Entity("Employee", "asalieri");
employee.setProperty("firstName", "Antonio");
employee.setProperty("lastName", "Salieri");
employee.setProperty("hireDate", new Date());
employee.setProperty("attendedHrTraining", true);

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(employee);

刪除實體

如果有實體的金鑰,您就可以透過 DatastoreService.delete() 方法刪除該實體:

// Key employeeKey = ...;
datastore.delete(employeeKey);

刪除大量實體

如果需要刪除大量的實體,建議您使用 Dataflow 大量刪除實體

使用批次作業

如果您想在單一 Datastore 呼叫中針對大量實體進行操作,可以使用批次作業。

以下是批次呼叫的範例:

Entity employee1 = new Entity("Employee");
Entity employee2 = new Entity("Employee");
Entity employee3 = new Entity("Employee");
// ...

List<Entity> employees = Arrays.asList(employee1, employee2, employee3);
datastore.put(employees);

這些批次作業會將所有實體或金鑰分為實體群組,然後在每個實體群組上同時執行要求的作業。比起針對個別實體分別進行呼叫,這種方法的效率更高,因為只會對一個服務呼叫造成負擔。如果批次作業使用到多個實體群組,則系統會在伺服器端針對所有群組同時執行作業。

put()delete() 批次呼叫可能對某些實體奏效,對其他實體卻無效。如果呼叫必須完全成功或完全失敗,請使用交易,且所有受影響的實體都須位在相同的實體群組。