Panduan ini menunjukkan cara melakukan migrasi dari App Engine Datastore ke Firestore dalam mode Datastore (juga disebut sebagai Datastore).
Firestore dalam mode Datastore mirip dengan App Engine Datastore karena keduanya merujuk pada layanan Datastore dasar yang sama. Meskipun App Engine Datastore hanya dapat diakses melalui layanan paket lama App Engine, Firestore dalam mode Datastore adalah produk Google Cloud mandiri yang diakses melalui Library Klien Cloud.
Firestore dalam mode Datastore juga menawarkan paket gratis dan memungkinkan Anda mengelola database dokumen NoSQL yang sangat skalabel dan memberi Anda fleksibilitas di masa mendatang untuk bermigrasi ke Cloud Run atau platform hosting aplikasi Google Cloud lainnya.
Sebelum memulai
Tinjau berbagai mode database Firestore untuk memastikan Anda memahami kasus penggunaan terbaik untuk aplikasi Anda. Perhatikan bahwa panduan ini membahas cara bermigrasi ke mode Datastore.
Tinjau dan pahami pricing dan quotas Firestore dalam mode Datastore.
Firestore dalam mode Datastore menawarkan penggunaan gratis dengan batas harian, serta penyimpanan, operasi baca, dan tulis tanpa batas untuk akun berbayar. Meskipun dinonaktifkan, aplikasi App Engine tidak akan mendapatkan traffic yang menimbulkan biaya. Namun, penggunaan Datastore dapat ditagih jika melebihi batas kuota gratis.
Aktifkan API berikut dalam project yang berisi aplikasi Anda:
- Artifact Registry API untuk menyimpan dan mengelola artefak build Anda
- Cloud Build API untuk terus membangun, menguji, dan men-deploy aplikasi Anda.
Cloud Datastore API untuk bermigrasi dari Datastore yang dipaketkan di App Engine ke Firestore dalam mode Datastore.
Pastikan ada aplikasi App Engine yang menjalankan Java 8 atau 11 yang terhubung ke layanan App Engine Datastore.
Ringkasan proses
Pada tingkat tinggi, proses migrasi ke Firestore dalam mode Datastore dari App Engine Datastore terdiri dari langkah-langkah berikut:
Update file konfigurasi
Update file konfigurasi Anda untuk menggunakan library klien mode Datastore.
Update file pom.xml
aplikasi Java dasar pengukuran Anda:
Hapus impor
appengine-api-1.0-sdk
App Engine SDK, seperti berikut:<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> <version>2.0.4</version> </dependency>
Tambahkan klien
Datastore
, seperti berikut:<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-datastore</artifactId> <!-- Use latest version --> <version>2.2.9</version> </dependency>
Update aplikasi Java Anda
Update pernyataan impor
Ubah file aplikasi Anda dengan mengupdate baris impor dan inisialisasi:
Hapus pernyataan impor App Engine berikut untuk
com.google.appengine.api.datastore.*
App Engine Datastore:import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.FetchOptions; import com.google.appengine.api.datastore.Query;
Tambahkan impor
com.google.cloud.datastore.*
Firestore dalam mode Datastore berikut:import com.google.cloud.Timestamp; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.FullEntity; import com.google.cloud.datastore.KeyFactory; import com.google.cloud.datastore.Query; import com.google.cloud.datastore.QueryResults; import com.google.cloud.datastore.StructuredQuery;
Ubah cara aplikasi Anda mengakses layanan Datastore
Firestore dalam mode Datastore menggunakan class Datastore
, bukan DatastoreService
. Untuk mengubah cara aplikasi Anda mengakses layanan Datastore:
Temukan baris yang menggunakan metode
DatastoreServiceFactory.getDatastoreService()
, seperti berikut:// Initialize a client DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Ganti
DatastoreServiceFactory.getDatastoreService()
dengan metodeDatastoreOptions.getDefaultInstance().getService()
, seperti berikut:// Initialize a client Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
Dapatkan kunci yang dihasilkan Datastore
Setelah menginisialisasi klien, dapatkan kunci dengan membuat KeyFactory
baru dari
Kind
yang sesuai, lalu minta Datastore untuk membuatkannya untuk Anda. Untuk mendapatkan
kunci yang dihasilkan Datastore:
Buat
newKeyFactory
.Panggil metode
setKind()
untuk menentukankind
entity yang digunakan untuk kategorisasi kueri.Tambahkan metode
newKey()
untuk menghasilkan kunci Datastore://Prepare a new entity String kind = "visit"; Key key = datastore.allocateId(datastore.newKeyFactory().setKind(kind).newKey());
Ubah pembuatan entity
Setelah mendapatkan kunci Datastore, buat entity menggunakan metode berikut:
Gunakan
Entity.newBuilder
, dan teruskan kunci yang dihasilkan oleh Datastore.Temukan baris yang menggunakan panggilan konstruktor
Entity
, seperti berikut:Entity visit = new Entity(kind);
Ganti panggilan konstruktor
Entity
dengan panggilan konstruktorEntity.newBuilder
, seperti berikut:Entity visit = Entity.newBuilder(key);
Gunakan metode
set
untuk menetapkan properti pada entity.Parameter pertama adalah properti yang dimaksud, dan yang kedua adalah nilai. Dalam kasus properti
timestamp
, nilainya adalahTimestamp
, bukanInstant.toString()
.Temukan baris yang menggunakan metode
setProperty
, seperti berikut:visit.setProperty("user_ip", userIp); visit.setProperty("timestamp", Instant.now().toString());
Ganti metode
setProperty
dengan metodeset
, seperti berikut:Entity visit = Entity.newBuilder(key).set("user_ip", userIp).set("timestamp", Timestamp.now()).build();
Commit transaksi Anda
Library klien Firestore dalam mode Datastore menggunakan metode add()
untuk meng-commit transaksi. Untuk meng-commit transaksi Anda:
Temukan baris yang menggunakan metode
put()
, seperti berikut:// Save the entity datastore.put(visit);
Ganti metode
put()
dengan metodeadd()
, seperti berikut:// Save the entity datastore.add(visit);
Hasil Kueri
Kueri mengambil entities
yang memenuhi serangkaian kondisi tertentu. Anda dapat menggunakan metode berikut untuk
menampilkan hasil:
Metode
OrderBy
menampilkan hasil dalam urutan naik atau menurun.Metode
Limit
membatasi jumlah maksimum hasil yang diambil dalam builder yang sama.
Kueri menggunakan metode pola builder dengan variabel kind
. Variabel kind
disetel ke Visit
dari langkah Dapatkan kunci yang dihasilkan
Datastore.
Untuk mengambil 10 hasil pertama:
Temukan baris yang menggunakan metode
addSort()
, seperti berikut:// Retrieve the last 10 visits from the datastore, ordered by timestamp. Query query = new Query(kind).addSort("timestamp", Query.SortDirection.DESCENDING); List<Entity> results = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(10));
Ganti metode
addSort()
dengan metodesetOrderBy()
dan tambahkan metodesetLimit()
, seperti berikut:// Retrieve the last 10 visits from the datastore, ordered by timestamp. Query<Entity> query = Query.newEntityQueryBuilder() .setKind(kind) .setOrderBy(StructuredQuery.OrderBy.desc("timestamp")) .setLimit(10) .build();
Setelah kueri siap, jalankan kode menggunakan
datastore.run()
, dan kumpulkan hasilnya dalam koleksiQueryResultsEntity
.Objek
QueryResults
yang dihasilkan adalah iterator dengan fungsihasNext()
.Periksa apakah kumpulan hasil memiliki objek
next
untuk diproses, bukan melakukan loop pada daftar hasil. Contoh:QueryResults<Entity> results = datastore.run(query); resp.setContentType("text/plain"); PrintWriter out = resp.getWriter(); out.print("Last 10 visits:\n"); while (results.hasNext()) { Entity entity = results.next(); out.format( "Time: %s Addr: %s\n", entity.getTimestamp("timestamp"), entity.getString("user_ip")); }
Contoh
Untuk melihat contoh cara memigrasikan aplikasi Java 8 ke Firestore dalam mode Datastore, bandingkan Contoh kode App Engine Datastore untuk Java 8 dan Contoh kode Firestore dalam mode Datastore di GitHub.
Langkah selanjutnya
- Pelajari cara Menggunakan Firestore dalam mode Datastore.
- Lihat dokumentasi Firestore dalam mode Datastore untuk detail lebih lanjut.
- Pelajari cara Bermigrasi dari paket layanan lama untuk Java.