3 poin oleh GN⁺ 2024-11-16 | 1 komentar | Bagikan ke WhatsApp

Visualisasi indeks SQLite: struktur

  • Pentingnya indeks: SQLite adalah DBMS yang banyak digunakan di browser, aplikasi mobile, dan sistem operasi, sehingga cocok untuk memahami struktur indeks dan menelusuri cara penyimpanannya di disk dan memori.

Struktur node dan halaman

  • Struktur B-tree: Indeks SQLite disimpan dalam struktur B-tree, dan setiap node memiliki banyak anak.
  • Halaman dan sel: Halaman menyimpan data sel dan memiliki tautan ke halaman anak di sisi kanan. Sel mencakup data indeks, rowId, dan tautan ke halaman anak di sisi kiri.

Analisis kode sumber SQLite

  • Contoh kode: Menulis fungsi untuk menganalisis indeks. Misalnya, fungsi sqlite3DebugBtreeIndexDump membaca dan menampilkan isi indeks yang dipilih.
  • Penggunaan Docker: Docker dapat digunakan untuk menguji dump indeks.

Visualisasi indeks

  • Alat visualisasi: Sempat mencoba memvisualisasikan struktur indeks dengan pustaka d3-org-tree, tetapi menampilkan strukturnya dalam bentuk teks ternyata lebih sederhana.
  • PHP ImageMagick: Menggunakan ekstensi ImageMagick untuk PHP guna menghasilkan gambar dengan kontrol desain dan jarak yang lebih baik.

Berbagai contoh indeks

  • Indeks dasar: Indeks sederhana yang terdiri dari 1 record.
  • Jumlah record yang beragam: Indeks dengan 1.000 dan 1.000.000 record.
  • Perbandingan arah pengurutan: Membandingkan indeks dengan urutan ASC dan DESC.
  • Data berbasis ekspresi: Membuat indeks menggunakan ekspresi.
  • Indeks unik dengan nilai NULL: SQLite mendukung indeks unik yang berisi nilai NULL.
  • Indeks parsial: Membuat indeks dengan memfilter nilai NULL.
  • Indeks multikolom: Membuat indeks yang mencakup beberapa kolom.

Optimasi indeks

  • VACUUM dan REINDEX: Perintah yang digunakan untuk mengoptimalkan indeks yang sudah ada.
  • Data teks: String pendek disimpan langsung di dalam sel indeks, sedangkan teks panjang disimpan secara terpisah.
  • Data floating-point: Membuat indeks yang mencakup data floating-point.

Kesimpulan

  • Memahami struktur indeks: Memahami struktur indeks SQLite serta cara B-tree menyimpan dan mengakses data.
  • Pentingnya visualisasi: Melalui visualisasi, berbagai indeks dapat dianalisis dan dibandingkan.
  • Rencana ke depan: Berencana memvisualisasikan pencarian berbasis indeks dan mengeksplorasi kueri SQL yang menarik.

1 komentar

 
GN⁺ 2024-11-16
Komentar Hacker News
  • Setiap baris dalam tabel SQLite pada dasarnya memiliki rowId unik, yang berfungsi seperti primary key jika tidak didefinisikan secara eksplisit

    • Bahkan jika ada primary key sungguhan, rowId tetap digunakan
    • Akan menarik untuk memvisualisasikan indeks primary key pada tabel WITHOUT ROWID
    • Kedua indeks terlihat mirip, tetapi indeks kedua yang memiliki lebih sedikit halaman bisa jadi lebih cepat
    • Jumlah node yang lebih sedikit tidak selalu berarti "lebih cepat"
    • Yang paling penting adalah tinggi pohon
    • Hal terpenting kedua adalah apa yang terjadi setelah nilai ditemukan di indeks
    • Apakah sisanya harus dimuat dari tabel terpisah (rowid), atau datanya sudah ada di sana (tanpa ROWID), ini sangat penting terutama untuk query rentang
  • Ingin melihat bagaimana sistem manajemen basis data (DBMS) menyimpan dan mengambil indeks dari disk dan memori

    • Memilih SQLite sebagai objek eksperimen
    • SQLite punya beberapa keunikan dalam cara ia menangani semuanya
    • Ini особенно terasa dalam pemrosesan query
    • SQLite cenderung memilih kesederhanaan daripada performa, sehingga implementasinya berbeda dari basis data lain
    • SQLite tidak bersaing dengan basis data lain
    • Ia bersaing dengan file JSON dan XML untuk penyimpanan permanen
    • Ini berarti cara SQLite mengimplementasikan apa pun hampir tidak memberi gambaran tentang bagaimana basis data sebenarnya bekerja
  • Situs webnya sangat mudah dibaca, jadi ingin membacanya

  • "indexes" digunakan sebagai bentuk orang ketiga tunggal kala kini dari kata kerja "to index" dan juga sebagai bentuk jamak dari kata benda "index"

    • Sementara itu, "indices" adalah bentuk jamak tradisional yang особенно sering digunakan di bidang matematika dan sains
    • Dalam bahasa Inggris umum, "indexes" lazim dipakai, tetapi di bidang teknis "indices" lebih disukai untuk menjaga ketepatan bahasa
    • Menggunakan "indices" meningkatkan kejelasan dengan membedakan antara pekerjaan pengindeksan dan bentuk jamak dari indeks
  • Akan bagus untuk melihat bagaimana PostgreSQL melakukan hal yang sama, lalu membandingkannya dan menuliskan catatan

  • Bisa menghasilkan tgf untuk yEd agar mendapatkan lebih banyak variasi tata letak dengan lebih sedikit pekerjaan