

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

# Petunjuk kueri SPARQL `evaluationStrategy`
<a name="sparql-query-hints-evaluationStrategy"></a>

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`
<a name="sparql-query-hints-evaluationStrategy-syntax"></a>

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](sparql-query-hints.md#sparql-query-hints-scope).

## Contoh petunjuk SPARQL `evaluationStrategy`
<a name="sparql-query-hints-evaluationStrategy-example"></a>



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.

Sebagai contoh umum, petunjuk `evaluationStrategy` dapat membantu mengoptimalkan pola kueri yang mengandung siklus.

**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.