Petunjuk kueri SPARQL evaluationStrategy - Amazon Neptune

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 node component 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.