View a markdown version of this page

Hasil kueri caching di Amazon Neptune Gremlin - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Hasil kueri caching di Amazon Neptune Gremlin

Amazon Neptune mendukung cache hasil untuk kueri Gremlin.

Anda dapat mengaktifkan cache hasil kueri dan kemudian menggunakan petunjuk kueri untuk menyimpan hasil kueri read-only Gremlin.

Setiap pengoperasian ulang kueri kemudian mengambil hasil yang di-cache dengan latensi rendah dan tanpa I/O biaya, selama masih dalam cache. Ini berfungsi untuk kueri yang dikirimkan baik pada titik akhir HTTP dan menggunakan Websocket, baik sebagai kode byte atau dalam bentuk string.

catatan

Kueri yang dikirim ke titik akhir profil tidak di-cache bahkan ketika cache kueri diaktifkan.

Anda dapat mengontrol bagaimana cache hasil kueri Neptunus berperilaku dalam beberapa cara. Contoh:

  • Anda bisa mendapatkan hasil yang di-cache dipaginasi, dalam blok.

  • Anda dapat menentukan waktu hidup (TTL) untuk kueri tertentu.

  • Anda dapat menghapus cache untuk kueri tertentu.

  • Anda dapat menghapus seluruh cache.

  • Anda dapat mengatur agar diberi tahu jika hasil melebihi ukuran cache.

Cache dipertahankan menggunakan kebijakan yang paling jarang digunakan (LRU), yang berarti bahwa setelah ruang yang dialokasikan untuk cache penuh, hasil yang paling jarang digunakan akan dihapus untuk memberi ruang ketika hasil baru sedang di-cache.

penting

Cache hasil kueri tidak tersedia pada t3.medium atau jenis t4.medium instance.

Mengaktifkan cache hasil kueri di Neptunus

Cache hasil kueri dapat diaktifkan di semua instance dalam cluster atau per instance. Untuk mengaktifkan cache hasil pada semua instance dalam cluster, atur neptune_result_cache parameter di cluster cluster-parameter-group ke1. Untuk mengaktifkan ini pada instance tertentu, atur neptune_result_cache parameter dalam instance instance-parameter-group ke1. Pengaturan grup parameter cluster akan mengganti nilai grup parameter instance.

Restart diperlukan pada setiap instans yang terpengaruh agar pengaturan parameter cache hasil diterapkan. Meskipun Anda dapat mengaktifkan cache hasil di semua instance dalam cluster melaluicluster-parameter-group, setiap instance mempertahankan cache-nya sendiri. Fitur cache hasil kueri bukanlah cache seluruh cluster.

Setelah cache hasil diaktifkan, Neptunus menyisihkan sebagian memori saat ini untuk caching hasil kueri. Semakin besar jenis instance yang Anda gunakan dan semakin banyak memori yang tersedia, semakin banyak memori yang disisihkan Neptunus untuk cache.

Jika memori cache hasil terisi, Neptunus secara otomatis menghapus hasil cache yang paling jarang digunakan (LRU) untuk memberi jalan bagi yang baru.

Anda dapat memeriksa status cache hasil saat ini menggunakan Status instans perintah.

Menggunakan petunjuk untuk menyimpan hasil kueri

Setelah cache hasil kueri diaktifkan, Anda menggunakan petunjuk kueri untuk mengontrol caching kueri. Semua contoh di bawah ini berlaku untuk traversal kueri yang sama, yaitu:

g.V().has('genre','drama').in('likes')

Menggunakan aktifkan ResultCache

Dengan cache hasil kueri diaktifkan, Anda dapat menyimpan hasil kueri Gremlin menggunakan petunjuk ku enableResultCache eri, sebagai berikut:

g.with('Neptune#enableResultCache', true) .V().has('genre','drama').in('likes')

Neptunus kemudian mengembalikan hasil kueri kepada Anda, dan juga menyimpannya. Kemudian, Anda dapat mengakses hasil cache dengan mengeluarkan kueri yang persis sama lagi:

g.with('Neptune#enableResultCache', true) .V().has('genre','drama').in('likes')

Kunci cache yang mengidentifikasi hasil cache adalah string kueri itu sendiri, yaitu:

g.V().has('genre','drama').in('likes')

Menggunakan aktifkan ResultCacheWithTTL

Anda dapat menentukan berapa lama hasil kueri harus di-cache dengan menggunakan petunjuk ku enableResultCacheWithTTL eri. Misalnya, kueri berikut menentukan bahwa hasil kueri harus kedaluwarsa setelah 120 detik:

g.with('Neptune#enableResultCacheWithTTL', 120) .V().has('genre','drama').in('likes')

Sekali lagi, kunci cache yang mengidentifikasi hasil cache adalah string kueri dasar:

g.V().has('genre','drama').in('likes')

Dan lagi, Anda dapat mengakses hasil cache menggunakan string kueri itu dengan petunjuk ku enableResultCache eri:

g.with('Neptune#enableResultCache', true) .V().has('genre','drama').in('likes')

Jika 120 detik atau lebih telah berlalu sejak hasil di-cache, kueri itu akan mengembalikan hasil baru, dan men-cache mereka, tanpa waktu untuk hidup.

Anda juga dapat mengakses hasil cache dengan mengeluarkan kueri yang sama lagi dengan petunjuk ku enableResultCacheWithTTL eri. Contoh:

g.with('Neptune#enableResultCacheWithTTL', 140) .V().has('genre','drama').in('likes')

Sampai 120 detik berlalu (yaitu, TTL saat ini berlaku), kueri baru ini menggunakan petunjuk ku enableResultCacheWithTTL eri mengembalikan hasil yang di-cache. Setelah 120 detik, itu akan mengembalikan hasil baru dan men-cache mereka dengan waktu hidup 140 detik.

catatan

Jika hasil untuk kunci kueri sudah di-cache, maka kunci kueri yang sama dengan enableResultCacheWithTTL tidak menghasilkan hasil baru dan tidak berpengaruh pada waktu hidup dari hasil yang saat ini di-cache.

  • Jika hasil sebelumnya di-cache menggunakanenableResultCache, cache harus dibersihkan terlebih dahulu sebelum enableResultCacheWithTTL menghasilkan hasil baru dan menyimpannya untuk TTL yang ditentukannya.

  • Jika hasil sebelumnya di-cache menggunakanenableResultCachewithTTL, TTL sebelumnya harus kedaluwarsa terlebih dahulu sebelum enableResultCacheWithTTL menghasilkan hasil baru dan menyimpannya untuk TTL yang ditentukannya.

Menggunakan invalid ResultCacheKey

Anda dapat menggunakan petunjuk invalidateResultCacheKey kueri untuk menghapus hasil cache untuk satu kueri tertentu. Contoh:

g.with('Neptune#invalidateResultCacheKey', true) .V().has('genre','drama').in('likes')

Kueri itu menghapus cache untuk kunci kueri,g.V().has('genre','drama').in('likes'), dan mengembalikan hasil baru untuk kueri itu.

Anda juga dapat menggabungkan invalidateResultCacheKey dengan enableResultCache atauenableResultCacheWithTTL. Misalnya, kueri berikut menghapus hasil cache saat ini, menyimpan hasil baru, dan mengembalikannya:

g.with('Neptune#enableResultCache', true) .with('Neptune#invalidateResultCacheKey', true) .V().has('genre','drama').in('likes')

Menggunakan invalid ResultCache

Anda dapat menggunakan petunjuk invalidateResultCache kueri untuk menghapus semua hasil cache dalam cache hasil kueri. Contoh:

g.with('Neptune#invalidateResultCache', true) .V().has('genre','drama').in('likes')

Kueri itu menghapus seluruh cache hasil dan mengembalikan hasil baru untuk kueri.

Anda juga dapat menggabungkan invalidateResultCache dengan enableResultCache atauenableResultCacheWithTTL. Misalnya, kueri berikut menghapus seluruh cache hasil, menyimpan hasil baru untuk kueri ini, dan mengembalikannya:

g.with('Neptune#enableResultCache', true) .with('Neptune#invalidateResultCache', true) .V().has('genre','drama').in('likes')

Memaginasi hasil kueri cache

Misalkan Anda telah menyimpan sejumlah besar hasil seperti ini:

g.with('Neptune#enableResultCache', true) .V().has('genre','drama').in('likes')

Sekarang misalkan Anda mengeluarkan kueri rentang berikut:

g.with('Neptune#enableResultCache', true) .V().has('genre','drama').in('likes').range(0,10)

Neptunus pertama-tama mencari kunci cache penuh, yaitug.V().has('genre','drama').in('likes').range(0,10). Jika kunci itu tidak ada, Neptunus selanjutnya mencari untuk melihat apakah ada kunci untuk string kueri itu tanpa rentang (yaitug.V().has('genre','drama').in('likes')). Ketika menemukan kunci itu, Neptunus kemudian mengambil sepuluh hasil pertama dari cache-nya, seperti yang ditentukan rentang.

catatan

Jika Anda menggunakan petunjuk invalidateResultCacheKey kueri dengan kueri yang memiliki rentang di akhir, Neptunus menghapus cache untuk kueri tanpa rentang jika tidak menemukan kecocokan yang tepat untuk kueri dengan rentang.

Menggunakan num den ResultsCached gan .iterate ()

Dengan menggunakan numResultsCached petunjuk kueri, Anda dapat mengisi cache hasil tanpa mengembalikan semua hasil yang di-cache, yang dapat berguna ketika Anda lebih suka membuat paginasi sejumlah besar hasil.

Petunjuk numResultsCached kueri hanya berfungsi dengan kueri yang diakhiri denganiterate().

Misalnya, jika Anda ingin menyimpan 50 hasil pertama dari kueri sampel:

g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 50) .V().has('genre','drama').in('likes').iterate()

Dalam hal ini kunci query dalam cache adalah:g.with("Neptune#numResultsCached", 50).V().has('genre','drama').in('likes'). Anda sekarang dapat mengambil sepuluh pertama dari hasil cache dengan kueri ini:

g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 50) .V().has('genre','drama').in('likes').range(0, 10)

Dan, Anda dapat mengambil sepuluh hasil berikutnya dari kueri sebagai berikut:

g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 50) .V().has('genre','drama').in('likes').range(10, 20)

Jangan lupa untuk memasukkan petunjuk numResultsCached nya! Ini adalah bagian penting dari kunci kueri dan oleh karena itu harus ada untuk mengakses hasil yang di-cache.

Beberapa hal yang perlu diingat saat menggunakan num ResultsCached
  • Nomor yang Anda numResultsCached berikan diterapkan di akhir kueri.   Ini berarti, misalnya, bahwa kueri berikut sebenarnya menyimpan hasil cache dalam rentang: (1000, 1500)

    g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 500) .V().range(1000, 2000).iterate()
  • Jumlah yang Anda berikan numResultsCached menentukan jumlah maksimum hasil untuk cache.   Ini berarti, misalnya, bahwa kueri berikut sebenarnya menyimpan hasil cache dalam rentang: (1000, 2000)

    g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 100000) .V().range(1000, 2000).iterate()
  • Hasil yang di-cache oleh kueri yang diakhiri dengan .range().iterate() memiliki rentang sendiri.   Misalnya, Anda menyimpan hasil cache menggunakan kueri seperti ini:

    g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 500) .V().range(1000, 2000).iterate()

    Untuk mengambil 100 hasil pertama dari cache, Anda akan menulis kueri seperti ini:

    g.with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 500) .V().range(1000, 2000).range(0, 100)

    Seratus hasil itu akan setara dengan hasil dari kueri dasar dalam kisaran(1000, 1100).

Kunci cache kueri yang digunakan untuk menemukan hasil yang di-cache

Setelah hasil query di-cache, kueri berikutnya dengan kunci cache query yang sama mengambil hasil dari cache daripada menghasilkan yang baru. Kunci cache kueri dari kueri dievaluasi sebagai berikut:

  1. Semua petunjuk kueri terkait cache diabaikan, kecuali untuk. numResultsCached

  2. iterate()Langkah terakhir diabaikan.

  3. Sisa kueri diurutkan sesuai dengan representasi kode byte-nya.

String yang dihasilkan dicocokkan dengan indeks hasil kueri yang sudah ada di cache untuk menentukan apakah ada hit cache untuk kueri.

Misalnya, ambil kueri ini:

g.withSideEffect('Neptune#typePromotion', false).with("Neptune#enableResultCache", true) .with("Neptune#numResultsCached", 50) .V().has('genre','drama').in('likes').iterate()

Ini akan disimpan sebagai versi kode byte dari ini:

g.withSideEffect('Neptune#typePromotion', false) .with("Neptune#numResultsCached", 50) .V().has('genre','drama').in('likes')

Pengecualian terkait dengan cache hasil

Jika hasil kueri yang Anda coba cache terlalu besar untuk muat dalam memori cache bahkan setelah menghapus semua yang sebelumnya di-cache, Neptunus menimbulkan QueryLimitExceededException kesalahan. Tidak ada hasil yang dikembalikan, dan pengecualian menghasilkan pesan kesalahan berikut:

The result size is larger than the allocated cache, please refer to results cache best practices for options to rerun the query.

Anda dapat menekan pesan ini menggunakan petunjuk ku noCacheExceptions eri, sebagai berikut:

g.with('Neptune#enableResultCache', true) .with('Neptune#noCacheExceptions', true) .V().has('genre','drama').in('likes')