Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Petunjuk kueri SPARQL evaluationStrategy
Petunjuk kueri evaluationStrategy
untuk memberi tahu mesin Amazon Neptune bahwa fragmen kueri yang dianotasi harus dievaluasi dari bawah ke atas sebagai unit independen. Ini berarti bahwa tidak ada solusi dari langkah-langkah evaluasi sebelumnya yang digunakan untuk menghitung fragmen kueri. Fragmen kueri dievaluasi sebagai unit mandiri, dan solusi yang dihasilkan digabungkan dengan sisa kueri setelah dihitung.
Menggunakan petunjuk kueri evaluationStrategy
menyiratkan rencana kueri (non-pipelined) pemblokiran, yang berarti bahwa solusi dari fragmen yang dianotasi dengan petunjuk kueri dimeterialisasikan dan di-buffer dalam memori utama. Menggunakan petunjuk kueri ini mungkin secara signifikan meningkatkan jumlah memori utama yang diperlukan untuk mengevaluasi kueri, terutama jika fragmen kueri yang dianotasi menghitung sejumlah besar hasil.
Sintaks petunjuk SPARQ evaluationStrategy
Petunjuk kueri evaluationStrategy
ditentukan sebagai pola tripel yang disetakan dalam kueri SPARQL.
Untuk kejelasan, sintaks berikut menggunakan awalan hint
yang didefinisikan dan disertakan dalam kueri untuk menentukan namespace petunjuk kueri Neptune:
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> hint:SubQuery hint:evaluationStrategy "BottomUp" .
Cakupan yang Tersedia
hint:SubQuery
catatan
Petunjuk kueri ini didukung hanya dalam subqueries nested.
Untuk informasi lebih lanjut tentang cakupan petunjuk kueri, lihat Cakupan petunjuk kueri SPARQL di Neptune.
Contoh petunjuk SPARQL evaluationStrategy
Bagian ini menunjukkan kueri yang ditulis dengan dan tanpa petunjuk kueri evaluationStrategy
dan optimasi terkait.
Untuk contoh ini, anggaplah set data memiliki karakteristik sebagai berikut:
Berisi 1.000 edge berlabel
:connectedTo
.Setiap node
component
terhubung ke rata-rata 100 nodecomponent
lainnya.Jumlah umum koneksi siklus empat hop antara node adalah sekitar 100.
Tidak Ada Petunjuk Kueri
Kueri SPARQL berikut mengekstrak semua component
node yang terhubung secara siklus satu sama lain melalui empat hop:
PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . }
Pendekatan mesin kueri Neptune adalah mengevaluasi kueri ini menggunakan langkah-langkah berikut:
Ekstrak kesemua 1.000 edge
connectedTo
dalam grafik.-
Perluas dengan 100x (jumlah edge
connectedTo
keluar dari component2).Hasil antara: 100.000 node.
-
Perluas dengan 100x (jumlah edge
connectedTo
keluar dari component3).Hasil antara: 10.000.000 node.
Pindai 10.000.000 node untuk siklus menutup.
Hal ini menyebabkan rencana kueri streaming, yang memiliki jumlah konstan memori utama.
Petunjuk Kueri dan Subqueries
Anda mungkin ingin menukar ruang memori utama untuk komputasi yang lebih cepat. Dengan menulis ulang kueri menggunakan petunjuk kueri evaluationStrategy
, Anda dapat memaksa mesin untuk menghitung gabungan antara dua subset kecil yang dimaterialisasi.
PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . } } { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . } } }
Alih-alih mengevaluasi pola triple secara berurutan sembari secara iteratif menggunakan hasil dari pola triple sebelumnya sebagai input untuk pola yang akan datang, petunjuk evaluationStrategy
menyebabkan dua subqueries dievaluasi secara independen. Kedua subqueries menghasilkan 100.000 node untuk hasil antara, yang kemudian digabungkan bersama-sama untuk membentuk output akhir.
Secara khusus, ketika Anda menjalankan Neptune pada tipe instans yang lebih besar, menyimpan sementara kedua 100.000 subset ini dalam memori utama meningkatkan penggunaan memori sebagai akibat dari secara signifikan mempercepat evaluasi.