

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

# Cache paket kueri di Amazon Neptunus
<a name="access-graph-qpc"></a>

 Ketika kueri dikirimkan ke Neptunus, string kueri diurai, dioptimalkan, dan diubah menjadi rencana kueri, yang kemudian dieksekusi oleh mesin. Aplikasi sering didukung oleh pola kueri umum yang dipakai dengan nilai yang berbeda. Cache rencana kueri dapat mengurangi latensi keseluruhan dengan menyimpan paket kueri dan dengan demikian menghindari penguraian dan pengoptimalan untuk pola berulang tersebut. 

 Query Plan Cache dapat digunakan untuk **OpenCypher**kueri — baik kueri non-parameter maupun parameter. Ini diaktifkan untuk READ, dan untuk HTTP dan Bolt. Ini **tidak** didukung untuk kueri mutasi OC. Ini **tidak** didukung untuk kueri Gremlin atau SPARQL. 

## Cara memaksa mengaktifkan atau menonaktifkan cache rencana kueri
<a name="access-graph-qpc-enable"></a>

 Cache paket kueri diaktifkan secara default untuk kueri berparameter latensi rendah. **Rencana untuk kueri berparameter hanya di-cache ketika latensi lebih rendah dari ambang batas 100 ms.** Perilaku ini dapat diganti berdasarkan per-kueri (diparameterisasi atau tidak) oleh Petunjuk Kueri tingkat kueri. `QUERY:PLANCACHE` Itu perlu digunakan dengan `USING` klausa. Petunjuk kueri menerima `enabled` atau `disabled` sebagai nilai. 

------
#### [ AWS CLI ]

Memaksa rencana untuk di-cache atau digunakan kembali:

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --open-cypher-query "Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1"
```

Dengan parameter:

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --open-cypher-query "Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
  --parameters '{"arg": 123}'
```

Memaksa rencana untuk tidak di-cache atau digunakan kembali:

```
aws neptunedata execute-open-cypher-query \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --open-cypher-query "Using QUERY:PLANCACHE \"disabled\" MATCH(n) RETURN n LIMIT 1"
```

Untuk informasi selengkapnya, lihat [execute-open-cypher-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-query.html)di Referensi AWS CLI Perintah.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

# Forcing plan to be cached or reused
response = client.execute_open_cypher_query(
    openCypherQuery='Using QUERY:PLANCACHE "enabled" MATCH(n) RETURN n LIMIT 1'
)

print(response['results'])
```

Untuk contoh AWS SDK dalam bahasa lain, lihat[AWS SDK](access-graph-opencypher-sdk.md).

------
#### [ awscurl ]

Memaksa rencana untuk di-cache atau digunakan kembali:

```
awscurl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  --region {{us-east-1}} \
  --service neptune-db \
  -X POST \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1"
```

**catatan**  
Contoh ini mengasumsikan bahwa AWS kredenal Anda dikonfigurasi di lingkungan Anda. Ganti {{us-east-1}} dengan Wilayah cluster Neptunus Anda.

------
#### [ curl ]

Memaksa rencana untuk di-cache atau digunakan kembali:

```
curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1"
```

Dengan parameter:

```
curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
  -d "parameters={\"arg\": 123}"
```

Memaksa rencana untuk tidak di-cache atau digunakan kembali:

```
curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  -d "query=Using QUERY:PLANCACHE \"disabled\" MATCH(n) RETURN n LIMIT 1"
```

------

## Cara menentukan apakah suatu rencana di-cache atau tidak
<a name="access-graph-qpc-status"></a>

 Untuk HTTP READ, jika kueri dikirimkan dan paket di-cache, `explain` akan menampilkan detail yang relevan dengan cache rencana kueri. 

------
#### [ AWS CLI ]

```
aws neptunedata execute-open-cypher-explain-query \
  --endpoint-url https://{{your-neptune-endpoint}}:{{port}} \
  --open-cypher-query "Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \
  --explain-mode details
```

Untuk informasi selengkapnya, lihat [execute-open-cypher-explain-query](https://docs.aws.amazon.com/cli/latest/reference/neptunedata/execute-open-cypher-explain-query.html) di AWS CLI Command Reference.

------
#### [ SDK ]

```
import boto3
from botocore.config import Config

client = boto3.client(
    'neptunedata',
    endpoint_url='https://{{your-neptune-endpoint}}:{{port}}',
    config=Config(read_timeout=None, retries={'total_max_attempts': 1})
)

response = client.execute_open_cypher_explain_query(
    openCypherQuery='Using QUERY:PLANCACHE "enabled" MATCH(n) RETURN n LIMIT 1',
    explainMode='details'
)

print(response['results'].read().decode('utf-8'))
```

Untuk contoh AWS SDK dalam bahasa lain, lihat[AWS SDK](access-graph-opencypher-sdk.md).

------
#### [ awscurl ]

```
awscurl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  --region {{us-east-1}} \
  --service neptune-db \
  -X POST \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \
  -d "explain=details"
```

**catatan**  
Contoh ini mengasumsikan bahwa AWS kredenal Anda dikonfigurasi di lingkungan Anda. Ganti {{us-east-1}} dengan Wilayah cluster Neptunus Anda.

------
#### [ curl ]

```
curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
  -d "query=Using QUERY:PLANCACHE \"enabled\" MATCH(n) RETURN n LIMIT 1" \
  -d "explain=details"
```

------

Jika rencana di-cache, `explain` output menunjukkan:

```
Query: <QUERY STRING>
Plan cached by request: <REQUEST ID OF FIRST TIME EXECUTION>
Plan cached at: <TIMESTAMP OF FIRST TIME EXECUTION>
Parameters: <PARAMETERS, IF QUERY IS PARAMETERIZED QUERY>
Plan cache hits: <NUMBER OF CACHE HITS FOR CACHED PLAN>
First query evaluation time: <LATENCY OF FIRST TIME EXECUTION>

The query has been executed based on a cached query plan. Detailed explain with operator runtime statistics can be obtained by running the query with plan cache disabled (using HTTP parameter planCache=disabled).
```

 Saat menggunakan Bolt, fitur jelaskan tidak didukung. 

## Penggusuran
<a name="access-graph-qpc-eviction"></a>

 Rencana kueri diusir oleh cache time to live (TTL) atau ketika jumlah maksimum paket kueri cache telah tercapai. Saat paket kueri terpukul, TTL disegarkan. Defaultnya adalah: 
+  1000 - Jumlah maksimum paket yang dapat di-cache per instance. 
+  TTL - 300.000 milidetik atau 5 menit. Cache hit memulai ulang TTL, dan mengatur ulang kembali ke 5 menit. 

## Kondisi yang menyebabkan rencana tidak di-cache
<a name="access-graph-qpc-conditions"></a>

 Cache paket kueri tidak akan digunakan dalam kondisi berikut: 

1.  Saat kueri dikirimkan menggunakan petunjuk `QUERY:PLANCACHE "disabled"` kueri. Anda dapat menjalankan kembali kueri dan menghapus `QUERY:PLANCACHE "disabled"` untuk mengaktifkan cache rencana kueri. 

1.  Jika kueri yang dikirimkan bukan kueri berparameter dan tidak berisi petunjuk. `QUERY:PLANCACHE "enabled"` 

1.  Jika waktu evaluasi kueri lebih besar dari ambang latensi, kueri tidak di-cache dan dianggap sebagai kueri yang berjalan lama yang tidak akan mendapat manfaat dari cache paket kueri. 

1.  Jika kueri berisi pola yang tidak mengembalikan hasil apa pun. 
   +  yaitu `MATCH (n:nonexistentLabel) return n` ketika ada nol node dengan label yang ditentukan. 
   +  yaitu `MATCH (n {name: $param}) return n` dengan `parameters={"param": "abcde"}` ketika ada nol node yang mengandung`name=abcde`. 

1.  Jika parameter kueri adalah tipe komposit, seperti a `list` atau a`map`. 

   ```
   curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
     -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
     -d "parameters={\"arg\": [1, 2, 3]}"
   
   curl https://{{your-neptune-endpoint}}:{{port}}/openCypher \
     -d "query=Using QUERY:PLANCACHE \"enabled\" RETURN \$arg" \
     -d "parameters={\"arg\": {\"a\": 1}}"
   ```

1.  Jika parameter query adalah string yang belum menjadi bagian dari beban data atau operasi penyisipan data. Misalnya, jika `CREATE (n {name: "X"})` dijalankan untuk menyisipkan`"X"`, `RETURN "X"` maka di-cache, sementara tidak `RETURN "Y"` akan di-cache, karena `"Y"` belum dimasukkan dan tidak ada dalam database. 