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 namespaceget_kinds(start=None, end=None)
: menampilkan daftar nama jenisget_properties_of_kind(kind, start=None, end=None)
: menampilkan daftar nama properti untuk nama jenis yang diberikanget_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"