Back to IF3140 Sistem Basis Data

Topic

Questions/Cues

  • Kapan sorting diperlukan?

  • Apa saja metode sorting untuk data besar?

  • Apa itu External Sort-Merge?

  • Tahap 1: Create Sorted Runs?

  • Tahap 2: Merge the Runs?

  • Bagaimana jika jumlah run lebih besar dari memori (N ≥ M)?

  • Analisis Biaya: Block Transfers?

  • Analisis Biaya: Seeks?

Reference Points

  • Slides 19-25

Kebutuhan dan Metode Sorting

Sorting (pengurutan) adalah operasi fundamental yang sering dibutuhkan dalam database, misalnya untuk klausa ORDER BY, beberapa implementasi JOIN, GROUP BY, dan eliminasi duplikat.

Metode Implementasi

  1. Menggunakan Indeks: Jika ada indeks pada atribut yang ingin diurutkan, sistem dapat membaca pointer dari leaf node indeks secara berurutan untuk mengambil data. Namun, metode ini bisa menjadi sangat mahal karena setiap tuple bisa berada di blok disk yang berbeda, menyebabkan satu I/O per tuple.

  2. In-Memory Sorting: Jika seluruh relasi muat di dalam memori, algoritma sorting standar seperti Quicksort dapat digunakan dengan sangat efisien.

  3. External Sort-Merge: Ini adalah algoritma pilihan ketika data relasi terlalu besar untuk muat di dalam memori.

External Sort-Merge

Algoritma ini bekerja dalam dua fase utama untuk mengurutkan data yang lebih besar dari RAM. Anggap M adalah ukuran memori yang tersedia (dalam jumlah blok/halaman).

Fase 1: Membuat Run Terurut (Create Sorted Runs)

  1. Baca M blok dari relasi ke dalam memori.

  2. Urutkan M blok tersebut di dalam memori (misalnya, menggunakan Quicksort).

  3. Tulis kembali hasil yang sudah terurut ke disk sebagai satu file sementara yang disebut “run”.

  4. Ulangi langkah 1-3 sampai semua blok dari relasi telah diproses, menghasilkan sejumlah N runs yang masing-masing sudah terurut secara internal.

Fase 2: Menggabungkan Run (Merge the Runs)

Setelah semua run terbentuk, fase ini menggabungkannya menjadi satu output akhir yang terurut.

  • N-Way Merge: Jika jumlah run (N) lebih kecil dari memori (M), penggabungan dapat dilakukan dalam satu kali jalan.

    • Alokasikan 1 blok memori sebagai buffer input untuk setiap run (total N blok).

    • Alokasikan 1 blok memori sebagai buffer output.

    • Secara berulang, ambil record terkecil dari semua buffer input, pindahkan ke buffer output.

    • Jika buffer output penuh, tulis ke disk. Jika buffer input kosong, isi kembali dari run yang bersangkutan di disk.

Penanganan Jika N ≥ M

Jika jumlah run lebih banyak dari blok memori yang tersedia, proses merge tidak bisa dilakukan sekali jalan. Diperlukan beberapa kali pass penggabungan (merge passes).

  • Pada setiap pass, gabungkan sekelompok (M-1) runs menjadi satu run baru yang lebih panjang.

  • Proses ini akan mengurangi jumlah run dengan faktor (M-1) pada setiap pass.

  • Ulangi proses ini sampai semua run berhasil digabung menjadi satu.

Analisis Biaya External Sort-Merge

Analisis biaya berfokus pada dua komponen utama: jumlah transfer blok dan jumlah seeks.

Biaya Transfer Blok

Setiap pass (baik itu pass pembuatan run awal maupun pass penggabungan) akan membaca seluruh $b_r$ blok dan menuliskan kembali seluruh $b_r$ blok.

  • Total transfer blok untuk keseluruhan proses (dengan asumsi output akhir tidak dihitung biaya tulisnya) dirumuskan sebagai:

    • $b_r$: Jumlah blok relasi.

    • M: Ukuran memori dalam blok.

    • $b_b$: Jumlah blok buffer yang dialokasikan per run saat merging.

    • $\lceil log_{...} \rceil$: Menghitung jumlah merge pass yang dibutuhkan.

Biaya Seeks

Seek terjadi setiap kali sistem perlu membaca atau menulis sekumpulan blok baru yang tidak berdekatan.

  • Saat pembuatan run: Membutuhkan $2 * \lceil b_r / M \rceil$ seeks (satu untuk membaca, satu untuk menulis setiap potongan berukuran M).

  • Saat merging: Jumlah seeks tergantung pada berapa banyak blok yang dibaca/ditulis sekaligus ($b_b$).

  • Total seeks dirumuskan sebagai:

Summary

External Sort-Merge adalah algoritma standar untuk mengurutkan relasi yang ukurannya melebihi memori utama, yang bekerja dalam dua fase: membuat sejumlah run terurut dan kemudian menggabungkan run-run tersebut. Jika jumlah run melebihi kapasitas memori, penggabungan dilakukan dalam beberapa pass. Biaya totalnya, yang diukur dalam transfer blok dan seeks, sangat bergantung pada ukuran memori (M) karena ini menentukan berapa banyak pass penggabungan yang diperlukan untuk menyelesaikan seluruh proses.