

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

# Tips Peningkatan Kinerja
<a name="performance-improvement-tips"></a>

Bagian ini menyediakan lima strategi pengoptimalan kinerja untuk Amazon DocumentDB untuk meningkatkan efisiensi aplikasi dan eksekusi kueri.

## 1. Gunakan $match sebagai Tahap Pertama di Agregation Pipelines
<a name="tip-match-first-stage"></a>

Selalu tempatkan $match sebagai tahap pertama untuk memfilter di pipeline agregasi Anda untuk memaksimalkan kinerja. Amazon DocumentDB akan menggunakan indeks secara efektif saat $match memimpin pipeline, memungkinkan database untuk memfilter data lebih awal dan mengurangi overhead pemrosesan.

```
// Optimized approach
db.orders.aggregate([
  { $match: { status: "active", category: "electronics" } }, // Index utilization
  { $group: { _id: "$category", total: { $sum: "$price" } } },
  { $sort: { total: -1 } }
])
```

**Dampak:** Pemfilteran awal mengurangi jumlah dokumen yang diproses pada tahap pipeline berikutnya, menghasilkan eksekusi kueri yang lebih cepat dan konsumsi sumber daya yang lebih rendah.

## 2. Gunakan $project di Agregation Pipeline untuk Meminimalkan Ukuran Data Pipeline
<a name="tip-project-minimize-data"></a>

Bawa hanya bidang penting melalui tahapan alur agregasi Anda untuk meminimalkan ukuran data dan meningkatkan kinerja. Gunakan $project secara strategis untuk memasukkan hanya data yang Anda butuhkan.

```
// Efficient pipeline design
db.orders.aggregate([
  { $match: { orderDate: { $gte: new Date("2024-01-01") } } },
  { $project: { customerId: 1, totalAmount: 1, status: 1 } }, // Only needed fields
  { $group: { _id: "$customerId", totalSpent: { $sum: "$totalAmount" } } }
])
```

**Dampak:** Dokumen yang lebih kecil mengurangi penggunaan memori dan meningkatkan efisiensi pemrosesan pipa, menghasilkan peningkatan kinerja kueri secara keseluruhan.

## 3. Aktifkan Kompresi Dokumen untuk Biaya Penyimpanan yang Lebih Rendah, I/O Biaya, dan Peningkatan Kinerja Kueri
<a name="tip-document-compression"></a>

Aktifkan kompresi dokumen dari grup parameter cluster untuk menurunkan biaya penyimpanan, I/O biaya, dan meningkatkan kinerja kueri. Amazon DocumentDB menyimpan dokumen terkompresi pada disk serta RAM, mengurangi jejak memori dan biaya. I/O 

**Dampak:**
+ Lebih banyak dokumen sesuai dengan memori yang tersedia
+ Akses data lebih cepat dengan pembacaan disk yang dikurangi
+ Biaya penyimpanan yang lebih rendah, I/O biaya, dan peningkatan kinerja kueri

**catatan**  
Amazon DocumentDB tidak mengaktifkan kompresi secara default untuk versi 5.0. Anda dapat [mengaktifkan kompresi](doc-compression.md) pada koleksi atau tingkat cluster untuk 5.0 cluster. Gunakan utilitas tinjauan kompresi Amazon DocumentDB untuk menganalisis rasio kompresi untuk koleksi Anda.  
Untuk Amazon DocumentDB 8.0[, kompresi](dict-compression.md) diaktifkan secara default.

## 4. Indeks Leverage untuk Kinerja Kueri Optimal
<a name="tip-leverage-indexes"></a>

Pastikan kueri Anda selalu menggunakan indeks untuk kinerja yang optimal. Amazon DocumentDB menawarkan beberapa jenis indeks untuk mencocokkan kasus penggunaan yang berbeda.

**Prinsip pengindeksan:**
+ Setiap kueri harus memanfaatkan indeks yang sesuai
+ [Amazon DocumentDB menyediakan beberapa jenis indeks](index-types.md)
+ Indeks majemuk menawarkan fleksibilitas paling besar dengan mendukung berbagai bentuk kueri dengan satu indeks
+ Merancang indeks untuk mendukung operasi penyortiran dan penyaringan bersama

**Memahami Awalan Indeks: Indeks gabungan bekerja melalui awalan indeks - Amazon DocumentDB dapat menggunakan subset kiri-ke-kanan** bidang indeks. Misalnya, indeks `{ category: 1, price: -1, inStock: 1 }` membuat awalan yang dapat digunakan ini:
+ `{ category: 1 }`- Mendukung query penyaringan berdasarkan kategori saja
+ `{ category: 1, price: -1 }`- Mendukung pemfilteran kueri berdasarkan kategori dan harga sorting/filtering 
+ `{ category: 1, price: -1, inStock: 1 }`- Mendukung kueri senyawa lengkap

Kueri pada harga, InStock, atau InStock saja tidak akan menggunakan indeks ini karena tidak dimulai dengan bidang pertama (kategori).

**Cara Mengidentifikasi Kueri yang Tidak Menggunakan Indeks:** Gunakan metode explain () untuk menganalisis eksekusi kueri dan mengidentifikasi kueri yang melakukan pemindaian koleksi alih-alih menggunakan indeks.

**Dampak:** Kueri tanpa pemanfaatan indeks menghasilkan pemindaian koleksi, menyebabkan peningkatan memori dan tekanan CPU pada instance dan latensi kueri yang meningkat.

## 5. Optimalkan Model Data Berdasarkan Pola Kueri
<a name="tip-optimize-data-models"></a>

Sejajarkan model data Anda dengan cara kueri aplikasi Anda dan memperbarui data. Pemodelan data adalah dasar dari aplikasi Amazon DocumentDB berkinerja tinggi.

**Strategi optimasi:**

**Penyematan untuk Kinerja**
+ Menyimpan data terkait bersama-sama ketika sering diakses sebagai satu unit
+ Sematkan dokumen yang selalu diambil bersama
+ Cocokkan untuk hubungan satu-ke-sedikit

```
// Embedded approach for frequently accessed data
{
  _id: ObjectId("..."),
  customerName: "John Doe",
  address: {
    street: "123 Main St",
    city: "Seattle",
    zipCode: "98101"
  },
  recentOrders: [
    { orderId: "ORD001", amount: 99.99, date: "2024-01-15" }
  ]
}
```

**Referensi untuk Fleksibilitas**
+ Gunakan referensi untuk data besar atau jarang diakses
+ Direkomendasikan untuk hubungan satu-ke-banyak dengan kumpulan data besar
+ Mencegah pembongkahan dokumen dan meningkatkan kinerja pembaruan

**Strategi Pemisahan Koleksi**

Ketika hanya beberapa bidang dalam dokumen besar yang sering diperbarui, atau ketika data besar yang jarang diakses membengkak dokumen, pertimbangkan untuk membagi koleksi:
+ Simpan bidang yang sering diperbarui dalam koleksi terpisah yang lebih kecil
+ Menyimpan data statis atau jarang diakses di koleksi lain
+ Tautkan mereka dengan referensi saat dibutuhkan

```
// Before: Large document with mixed access patterns
{
  _id: ObjectId("..."),
  productId: "PROD123",
  name: "Wireless Headphones",        // Frequently accessed
  price: 99.99,                      // Frequently accessed
  inventory: 45,                     // Updated frequently
  lastSold: "2024-01-15",           // Updated frequently
  detailedSpecs: { /* large object */ }, // Infrequently accessed
  manualPDF: "base64...",           // Large, rarely accessed
  reviewHistory: [/* large array */] // Infrequently accessed
}

// After: Split into collections based on access patterns
// products collection (frequently accessed data)
{
  _id: ObjectId("..."),
  productId: "PROD123",
  name: "Wireless Headphones",
  price: 99.99,
  inventory: 45,
  lastSold: "2024-01-15"
}

// product_details collection (infrequently accessed data)
{
  _id: ObjectId("..."),
  productId: "PROD123",           // Reference to products collection
  detailedSpecs: { /* large object */ },
  manualPDF: "base64...",
  reviewHistory: [/* large array */]
}
```

**Perolehan kinerja:** Dokumen yang lebih kecil berarti pembaruan yang lebih cepat, penggunaan memori berkurang, dan efisiensi cache yang lebih baik.

**Dampak:** Pemodelan data yang tidak efisien menghasilkan kueri suboptimal, peningkatan ukuran dokumen, dan peningkatan penggunaan memori, yang menyebabkan kinerja aplikasi menurun dan biaya operasional yang lebih tinggi.