Administrasi NDB

Terdapat alat dan API untuk mempermudah pengelolaan data tersimpan aplikasi.

Konsol Google Cloud

Saat menggunakan konsol Google Cloud, perlu diingat bahwa NDB diimplementasikan melalui Datastore dan memcache. Ketika NDB "membaca" sebuah nilai, NDB akan memeriksa memcache terlebih dahulu. NDB hanya akan membaca dari Datastore jika tidak menemukan nilai dalam memcache.

Oleh karena itu, jika Anda menggunakan konsol Google Cloud untuk mengedit entity di Datastore, aplikasi mungkin masih menggunakan nilai "lama" jika nilai tersebut berada dalam memcache. Anda dapat mengatasi masalah ini dengan menghapus memcache secara permanen. Namun, hal ini dapat mengganggu. Jika Anda perlu menyesuaikan nilai "secara manual" dalam frekuensi yang sering, Anda mungkin perlu menyiapkan UI untuk hal ini dalam aplikasi yang menulis nilai melalui library klien NDB. Menulis melalui NDB akan menjaga Datastore dan memcache tetap sinkron.

Kueri metadata

NDB mendukung API kueri metadata. Hal ini memungkinkan aplikasi mendapatkan beberapa informasi umum tentang penggunaan Datastore. API ini terdapat dalam modul google.appengine.ext.ndb.metadata. API ini memiliki fungsi:

  • get_namespaces(start=None, end=None): menampilkan daftar nama namespace
  • get_kinds(start=None, end=None): menampilkan daftar nama jenis
  • get_properties_of_kind(kind, start=None, end=None): menampilkan daftar nama properti untuk nama jenis yang diberikan
  • get_representations_of_kind(kind, start=None, end=None): menampilkan nama properti pemetaan dict untuk nama jenis tertentu ke daftar nama representasi seperti 'STRING', 'BOOLEAN', atau 'INT64'.

Fungsi ini memiliki argumen start dan end opsional yang dapat digunakan untuk membatasi kueri ke rentang tertentu. Di sini, start bersifat inklusif dan end bersifat eksklusif. Keduanya ditetapkan secara default ke None. Misalnya, untuk mendapatkan semua namespace yang dimulai dengan huruf kecil, Anda dapat memanggil get_namespaces('a', chr(ord('z') + 1)). Semuanya kecuali get_namespaces() yang secara implisit dibatasi untuk namespace saat ini. Metadata gets dan queries ditagih dengan cara yang sama seperti Datastore gets dan queries.

Kueri statistik

Datastore menyimpan statistik tentang data yang disimpan untuk suatu aplikasi, seperti berapa banyak entity yang ada dari jenis tertentu, atau berapa banyak ruang yang digunakan oleh nilai properti dari jenis tertentu. Anda dapat melihat statistik ini di konsol Google Cloud, pada halaman Dasbor.

Anda juga dapat mengakses nilai ini secara terprogram dalam aplikasi dengan membuat kueri entity bernama khusus menggunakan Datastore API. Setiap statistik dapat diakses sebagai entity yang nama jenisnya diawali dan diakhiri dengan dua garis bawah. Misalnya, setiap aplikasi memiliki tepat satu entity dari jenis __Stat_Total__ yang mewakili statistik tentang semua entity di Datastore secara total. Setiap entity statistik memiliki properti berikut:

  • count, jumlah item yang dipertimbangkan oleh statistik (bilangan bulat panjang)
  • bytes, ukuran total item untuk statistik ini (bilangan bulat panjang)
  • timestamp, waktu update statistik terbaru (nilai tanggal dan waktu)

Beberapa jenis statistik juga memiliki properti tambahan, yang tercantum di bawah.

Aplikasi dapat menggunakan class model yang disediakan oleh google.appengine.ext.ndb.stats paket untuk mengakses entity statistik.

from google.appengine.ext.ndb import stats

global_stat = stats.GlobalStat.query().get()
print 'Total bytes stored: %d' % global_stat.bytes
print 'Total entities stored: %d' % global_stat.count

Saat membuat entity statistik baru, sistem statistik tidak langsung menghapus entity statistik lama. Cara terbaik untuk mendapatkan tampilan statistik yang konsisten adalah dengan membuat kueri untuk entity GlobalStat dengan timestamp terbaru, lalu menggunakan nilai stempel waktu tersebut sebagai filter saat mengambil entity statistik lainnya.

Entity statistik disertakan dalam nilai statistik yang dihitung. Entity statistik menggunakan ruang berdasarkan jumlah jenis dan nama properti unik yang digunakan oleh aplikasi.

Sistem statistik juga akan membuat statistik khusus untuk setiap namespace Perlu diperhatikan bahwa jika aplikasi tidak menggunakan namespace Datastore, statistik khusus namespace tidak akan dibuat. Statistik khusus namespace dapat ditemukan di namespace yang khusus untuknya. Nama jenis untuk statistik khusus namespace diawali dengan __Stat_Ns_ dan memiliki akhiran yang sama dengan jenis statistik untuk seluruh aplikasi.

Aplikasi dengan ribuan namespace, jenis, atau nama properti memerlukan entity statistik dalam jumlah yang sangat besar. Untuk menjaga beban penyimpanan dan pembaruan statistik yang wajar, Datastore akan menurunkan entity statistik secara bertahap dalam urutan berikut:

  • statistik per namespace, per jenis, dan per properti: __Stat_Ns_PropertyName_Kind__, __Stat_Ns_PropertyType_PropertyName_Kind__
  • statistik per jenis dan per properti: __Stat_PropertyName_Kind__, __Stat_PropertyType_PropertyName_Kind__
  • statistik per namespace dan per jenis: __Stat_Ns_Kind__, __Stat_Ns_Kind_IsRootEntity__, __Stat_Ns_Kind_NotRootEntity__, __Stat_Ns_PropertyType_Kind__
  • statistik per jenis: __Stat_Kind__, __Stat_Kind_IsRootEntity__, __Stat_Kind_NotRootEntity__, __Stat_PropertyType_Kind__
  • statistik per namespace: __Stat_Namespace__, __Stat_Ns_Kind_CompositeIndex__, __Stat_Ns_PropertyType__, __Stat_Ns_Total__

Entity statistik ringkasan (__Stat_Kind_CompositeIndex__, __Stat_PropertyType__, __Stat_Total__) tidak pernah dihapus.

Berikut adalah daftar lengkap statistik yang tersedia:

Statistik Jenis Entity Statistik Deskripsi
semua entity __Stat_Total__
Class Python: GlobalStat
Entri khusus namespace:
__Stat_Ns_Total__
Class Python: NamespaceGlobalStat
Semua entity. Properti tambahan:

entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan dalam entri indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.
composite_index_bytes: Penyimpanan dalam entri indeks komposit yang diukur dalam byte.
composite_index_count: Jumlah entri indeks komposit.
semua entity dalam namespace __Stat_Namespace__
Class Python: NamespaceStat
Perhatikan bahwa entity __Stat_Namespace__ dibuat untuk setiap namespace yang ditemukan dan hanya ditemukan dalam namespace string kosong.
Semua entity dalam namespace.

subject_namespace, namespace yang direpresentasikan (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan dalam entri indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.
composite_index_bytes: Penyimpanan dalam entri indeks komposit yang diukur dalam byte.
composite_index_count: Jumlah entri indeks komposit.
semua entri dalam indeks yang ditentukan aplikasi __Stat_Kind_CompositeIndex__
Entri khusus namespace: __Stat_Ns_Kind_CompositeIndex__

Class Python: KindStat
Entri di tabel indeks komposit; satu entity statistik untuk setiap jenis entity yang disimpan. Properti tambahan:

index_id, ID indeks.
kind_name, nama jenis yang direpresentasikan (string)
entity sejenis __Stat_Kind__
Class Python: KindStat
Entri khusus namespace:
__Stat_Ns_Kind__
Class Python: NamespaceKindStat
Entity sejenis; satu entity statistik untuk setiap jenis entity yang disimpan. Properti tambahan:

kind_name, nama jenis yang direpresentasikan (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan dalam entri indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.
composite_index_bytes: Penyimpanan dalam entri indeks komposit yang diukur dalam byte.
composite_index_count: Jumlah entri indeks komposit.
root entity sejenis __Stat_Kind_IsRootEntity__
Class Python: KindRootEntityStat
Entri khusus namespace:
__Stat_Ns_Kind_IsRootEntity__
Class Python: NamespaceKindRootEntityStat
Entity sejenis yang merupakan root entity dari entity group (tidak memiliki induk ancestor); satu entity statistik untuk setiap jenis entity yang disimpan. Properti tambahan:

kind_name, nama dari jenis yang direpresentasikan (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
non-root entity sejenis __Stat_Kind_NotRootEntity__
Class Python: KindNotRootEntityStat
Entri khusus namespace:
__Stat_Ns_Kind_NotRootEntity__
Class Python: NamespaceKindNotRootEntityStat
Entity sejenis yang bukan merupakan root entity dari entity group (memiliki induk ancestor); satu entity statistik untuk setiap jenis entity yang disimpan. Properti tambahan:

kind_name, nama dari jenis yang direpresentasikan (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
properti dari suatu jenis __Stat_PropertyType__
Class Python: PropertyTypeStat
Entri khusus namespace:
__Stat_Ns_PropertyType__
Class Python: NamespacePropertyTypeStat
Properti jenis nilai di semua entity; satu entity statistik per jenis nilai. Properti tambahan:

property_type, nama jenis nilai (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan dalam entri indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.
properti dari suatu jenis per jenis __Stat_PropertyType_Kind__
Class Python: KindPropertyTypeStat
Entri khusus namespace:
__Stat_Ns_PropertyType_Kind__
Class Python: NamespaceKindPropertyTypeStat
Properti jenis nilai di seluruh entity dari jenis tertentu; satu entity statistik per kombinasi jenis dan jenis properti. Properti tambahan:

property_type, nama jenis nilai (string)
kind_name, nama jenis yang direpresentasikan (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan di indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.
properti dengan nama __Stat_PropertyName_Kind__
Class Python: KindPropertyNameStat
Entri khusus namespace:
__Stat_Ns_PropertyName_Kind__
Class Python: NamespaceKindPropertyNameStat
Properti dengan nama tertentu di seluruh entity dari jenis tertentu; satu entity statistik per kombinasi nama dan jenis properti yang unik. Properti tambahan:

property_name, nama properti (string)
kind_name, nama dari jenis yang direpresentasikan (string)
entity_bytes: Penyimpanan di tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan dalam entri indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.
properti dari suatu jenis dan dengan nama __Stat_PropertyType_PropertyName_Kind__
Class Python: KindPropertyNamePropertyTypeStat
Entri khusus namespace:
__Stat_Ns_PropertyType_PropertyName_Kind__
Class Python: NamespaceKindPropertyNamePropertyTypeStat
Properti dengan nama tertentu dan jenis nilai tertentu di seluruh entity dari jenis tertentu; satu entity statistik per kombinasi nama properti, jenis nilai, dan jenis yang ada di Datastore. Properti tambahan:

property_type, nama jenis nilai (string)
property_name, nama properti (string)
kind_name, nama jenis yang direpresentasikan (string)
entity_bytes: Penyimpanan dalam tabel entity yang diukur dalam byte.
builtin_index_bytes: Penyimpanan dalam entri indeks bawaan yang diukur dalam byte.
builtin_index_count: jumlah entri indeks bawaan.

Beberapa statistik merujuk pada jenis nilai properti Datastore berdasarkan nama, sebagai string. Berikut adalah nama-nama tersebut:

  • "Blob"
  • "BlobKey"
  • "Boolean"
  • "Category"
  • "Date/Time"
  • "Email"
  • "Float"
  • "GeoPt"
  • "IM"
  • "Integer"
  • "Key"
  • "Link"
  • "NULL"
  • "PhoneNumber"
  • "PostalAddress"
  • "Rating"
  • "ShortBlob"
  • "String"
  • "Text"
  • "User"