항목 만들기, 검색, 업데이트, 삭제

Datastore의 데이터 객체를 항목이라고 하며, 각 항목은 쿼리를 위해 특정한 종류로 분류됩니다. 예를 들어 인사 관리 애플리케이션을 작성하는 경우 각 직원을 Employee 종류의 항목으로 나타낼 수 있습니다. 항목 데이터 값의 형식은 속성이라는 점에 유의하세요. 항목에 대한 자세한 내용은 항목, 속성, 키 개념 문서를 참조하세요.

항목 생성 및 속성 설정

Go에서는 Go 구조체의 인스턴스를 구성하고 해당 필드를 채우고, datastore.Put을 호출하여 Datastore에 저장하는 방식으로 새 항목을 만듭니다. 내보낸 필드(대문자로 시작)만 Datastore에 저장됩니다. 비어 있지 않은 stringID 인수를 datastore.NewKey에 전달하여 항목의 키 이름을 지정할 수 있습니다.

다음 예시에서는 Employee 종류의 항목을 만들고 속성 값을 채우고 Datastore에 저장합니다.

import (
	"context"
	"time"

	"google.golang.org/appengine/datastore"
)

type Employee struct {
	FirstName          string
	LastName           string
	HireDate           time.Time
	AttendedHRTraining bool
}

func f(ctx context.Context) {
	// ...
	employee := &Employee{
		FirstName: "Antonio",
		LastName:  "Salieri",
		HireDate:  time.Now(),
	}
	employee.AttendedHRTraining = true

	key := datastore.NewIncompleteKey(ctx, "Employee", nil)
	if _, err := datastore.Put(ctx, key, employee); err != nil {
		// Handle err
	}
	// ...
}

Employee 유형은 데이터 모델에 FirstName, LastName, HireDate, AttendedHRTraining이라는 4개의 필드를 선언합니다.

비어 있는 키 이름을 제공하거나 datastore.NewIncompleteKey를 사용하면 Datastore가 항목 키의 숫자 ID를 자동으로 생성합니다.

employee := &Employee{
	FirstName: "Antonio",
	LastName:  "Salieri",
	HireDate:  time.Now(),
}
employee.AttendedHRTraining = true
key := datastore.NewIncompleteKey(ctx, "Employee", nil)
_, err = datastore.Put(ctx, key, employee)

항목 검색

특정 키로 식별되는 항목을 검색하려면 *datastore.Keydatastore.Get 함수에 인수로 전달합니다. datastore.NewKey 함수를 사용하여 *datastore.Key를 생성할 수 있습니다.

employeeKey := datastore.NewKey(ctx, "Employee", "asalieri", 0, nil)
addressKey := datastore.NewKey(ctx, "Address", "", 1, employeeKey)
var addr Address
err = datastore.Get(ctx, addressKey, &addr)

datastore.Get이 해당하는 Go 구조체의 인스턴스를 채웁니다.

항목 업데이트

기존 항목을 업데이트하려면 구조체의 속성을 수정한 후 datastore.Put을 호출합니다. 데이터가 기존 항목을 덮어씁니다. datastore.Put을 호출할 때마다 전체 객체가 Datastore로 전송됩니다.

항목 삭제

항목의 키가 제공되면 datastore.Delete 함수를 사용하여 항목을 삭제할 수 있습니다.

key := datastore.NewKey(ctx, "Employee", "asalieri", 0, nil)
err = datastore.Delete(ctx, key)

대량 항목 삭제

다수의 항목을 삭제해야 하는 경우 Dataflow를 사용하여 항목을 일괄 삭제하는 것이 좋습니다.

일괄 작업 사용

단일 Datastore 호출에서 여러 항목으로 작업을 수행하려면 다음 일괄 작업을 사용할 수 있습니다.

일괄 호출의 예시는 다음과 같습니다.

// A batch put.
_, err = datastore.PutMulti(ctx, []*datastore.Key{k1, k2, k3}, []interface{}{e1, e2, e3})

// A batch get.
var entities = make([]*T, 3)
err = datastore.GetMulti(ctx, []*datastore.Key{k1, k2, k3}, entities)

// A batch delete.
err = datastore.DeleteMulti(ctx, []*datastore.Key{k1, k2, k3})

일괄 작업을 수행해도 비용에 변화는 없습니다. 각 키가 있는지 여부와 관계없이 일괄 처리된 작업에서 모든 키에 요금이 부과됩니다. 작업과 관련된 항목 크기는 비용에 영향을 주지 않습니다.