Saya melihat banyak diskusi berkeliaran tentang kinerja db 'x' atau yang bergerak dari 'x' ke 'y' meningkatkan kinerja situs kami.
Saya belum melihat patok banding yang tepat yang berfungsi di berbagai jenis basis data.
Apakah mungkin untuk menulis tolok ukur yang bermakna yang dapat digunakan di berbagai jenis db, seperti Relasional, Berorientasi Dokumen, dll.
Bagaimana Anda mendesain tolok ukur seperti itu?
database
benchmarking
Dan McGrath
sumber
sumber
Jawaban:
Jawaban singkat
Ya , Anda dapat menulis tolok ukur yang bermakna dari kasus yang diteliti, jika Anda melakukannya dengan hati-hati, dan memahami bahwa jika relevan untuk kasus tertentu, itu mungkin tidak untuk kasus lain. Ini sama benarnya ketika membandingkan database dari tipe yang sama (database relasional vs database relasional lain) atau database dari tipe yang berbeda.
Tidak , Anda tidak dapat menulis patokan yang secara ajaib akan membuktikan bahwa basis data tertentu jauh lebih baik daripada yang lain dalam setiap kasus, untuk setiap aplikasi.
Jawaban panjang
Sangat mungkin untuk mengatakan bahwa "pindah dari database ke yang lain meningkatkan kinerja situs kami".
Anda mengukur kinerja database sebelumnya melalui profil atau statistik runtime dengan mengumpulkan informasi yang cukup tentang kueri dan seberapa cepat mereka.
Anda memindahkan aplikasi ke database baru.
Anda melakukan langkah yang sama.
Anda membandingkan.
Sebagai contoh, jika daftar lengkap 3 182 432 produk dimuat dalam 2,834 dtk. pada database lama dan memuat dalam 0,920 s. pada database baru, mengingat bahwa dalam kedua kasus, aplikasi memiliki cache kosong, itu adalah sebuah kemenangan: database baru meningkatkan kinerja situs Anda mengenai permintaan ini.
Sekarang, seperti metrik kinerja apa pun, itu bias:
Setuju, permintaan baru lebih cepat. Tapi tunggu, DBA Anda tidak tahu cara menggunakan database yang Anda miliki sebelumnya , jadi kueri yang memuat semua produk tidak dioptimalkan . Jika Anda menulis ulang seperti itu, Anda akan dapat memuat produk-produk tersebut dalam 0,855 s. bukannya 2,834.
Oke, Anda memiliki hasil yang lebih baik. Tetapi tidakkah Anda berpikir bahwa tidak adil untuk membandingkan suatu basis data dengan data baru saja menyiram ke basis data berumur 10 tahun yang rencana pemeliharaan terakhir dijalankan tiga tahun lalu? Omong-omong, bukankah Anda pikir Anda harus memperbarui produk database setidaknya sekali selama empat tahun terakhir?
Beberapa pertanyaan lebih cepat. Beberapa lebih lambat. Bagaimana Anda menghitung hasil rata-rata untuk mengetahui bahwa Anda memperoleh kinerja secara keseluruhan saat pindah ke database baru? Oke, waktu Anda memuat semua produk 3 182.432 lebih cepat. Tetapi apakah itu penting, sementara permintaan dieksekusi di situs web hanya dalam kasus yang jarang terjadi ketika seorang administrator melakukan beberapa tugas tertentu yang dia lakukan hanya dua kali dalam sepuluh tahun terakhir? Di sisi lain, menjalankan semua kueri di halaman beranda untuk pengguna baru menghabiskan 0,281 detik. dengan database baru, saat itu 0,207 s. dengan database lama. Hasil ini jauh lebih penting, terutama karena pertanyaan-pertanyaan itu tidak dapat di-cache untuk waktu yang lama, dan dieksekusi puluhan ribu kali per hari.
Kedua database harus diuji pada server yang sama, perangkat keras yang sama, struktur yang sama. Misalnya, Anda tidak dapat menguji satu database pada satu hard drive, dan yang lainnya pada RAID1 dua SSD. Saat Anda memigrasi proyek besar ke database baru, ada kemungkinan Anda hanya akan meng-host database baru di seratus server rak yang baru dikerahkan, ketika database sebelumnya akan tetap di mesin sebelumnya.
Untuk meringkas, Anda dapat membandingkan permintaan basis data suatu aplikasi, dan mendapatkan metrik yang tepat . Tapi kemudian, Anda harus memberi arti pada angka. Pada kondisi ini, tergoda untuk mengatakan bahwa Anda memperoleh kinerja situs: jika tidak, manajemen akan marah mengetahui bahwa Anda telah menghabiskan ribuan dolar dan bulan kerja hanya untuk membuat segalanya lebih lambat.
Kesalahan paling mengerikan adalah mengambil kesimpulan itu dari tolok ukur dan menyimpulkan beberapa kebodohan seperti "Microsoft SQL Server tiga kali lebih cepat daripada Oracle": mengatakan ini seperti mengatakan bahwa "Java lebih baik daripada PHP". Tentukan lebih baik. Lebih baik dalam hal apa? Untuk jenis aplikasi apa? Untuk tim pengembang apa?
Semakin Anda menafsirkan dan menggeneralisasi, semakin hal itu menjadi tidak relevan dan tidak berarti.
bermakna bagi pengembang, dan cukup tepat untuk mengetahui apa yang diuji, bagaimana, dan apa hasilnya. Ini menjawab pertanyaan Anda nomor 2.
Sayangnya, itu tidak masuk akal bagi manajemen. Sebagai gantinya:
adalah jibber-jabber pemasaran murni, dan, secara teknis, tidak berarti apa-apa, tetapi secara mengejutkan memiliki nilai untuk departemen manajemen dan pemasaran.
Akhirnya, dapatkah kita membandingkan berbagai jenis basis data? Saya akan mengatakan itu sangat mungkin. Katakanlah saya memiliki situs web yang menampung foto-foto besar. Foto-foto itu disimpan di
varbinary(max)
dalam Microsoft SQL Server 2005 (jadi saya tidak bisa menggunakanfilestream
). Saya khawatir tentang kinerja saat memuat foto-foto itu, jadi saya memutuskan untuk menyimpan foto sebagai file, menggunakan sistem file sebagai database baru saya. Pertama, file-file itu disimpan di mesin yang sama dari database. Saya profil solusi baru, dan mendapatkan hasil yang menunjukkan bahwa dalam kasus saya, file dimuat 4% lebih cepat dari sistem file daripada dari Microsoft SQL Server. Benchmarknya sangat jelas. Sekarang saya dapat berpikir tentang menggunakan dedicated server yang dioptimalkan untuk penyimpanan file langsung, daripada menggunakan server yang dioptimalkan untuk Microsoft SQL Server.sumber
Dengan semua uang yang dipertaruhkan dengan perusahaan-perusahaan basis data besar dan kelompok besar pengembang pada aplikasi open source db, jika ada cara untuk melakukannya, mereka pasti sudah mengetahuinya sekarang (Dan mengecam hasilnya di seluruh internet. ).
Saya tidak akan. Sebaliknya, buat tolok ukur khusus untuk kebutuhan dan lingkungan spesifik.
Pada titik tertentu, jumlah uang yang tersedia dan keahlian desainer dengan database tertentu dapat menentukan batasan lebih dari apa pun. Oracle dba yang baik akan menampilkan sebagian besar pengembang junior terlepas dari platform apa yang mereka pilih.
sumber
Tidak, perbedaan di antara mereka sedemikian rupa sehingga salah satu tolok ukur akan bias.
Yang mengatakan, mengembangkan situs seperti Computer Benchmarks Game Game , yang mencakup berbagai tes dan membuatnya mudah untuk membandingkan tes (baik tes bahasa-ke-bahasa, atau komposit dari banyak bahasa), akan bermanfaat. paling tidak di mata saya), terutama jika itu diatur sehingga masyarakat dapat mengirimkan solusi dan meningkatkan kekurangan dalam skema atau pertanyaan.
Dalam kasus situs benchmark DB, alih-alih menerapkan algoritma (seperti dalam kasus pemotretan bahasa), tes dapat terdiri dari data mentah yang harus disimpan dan kemudian diambil sesuai dengan batasan spesifik. Misalnya, mungkin ada satu set data mentah yang berisi informasi yang mewakili perwakilan skema sederhana tentang apa yang dapat digunakan perpustakaan komunitas untuk melacak pelanggan dan buku. Setiap DB harus menyimpan semua 1 juta catatan dan kemudian mengambil beberapa sub-set data yang memenuhi kendala. Kemudian, mungkin juga ada kumpulan data yang mewakili beberapa struktur / hubungan yang sangat sederhana (mungkin sistem komentar yang biasanya digunakan untuk situs-situs seperti ESPN, dll.) Yang berisi 100 juta catatan, dan memiliki serangkaian pertanyaan sendiri yang harus dilakukan . Dll
Menguji DB pada rangkaian data rentang luas (mulai dari hubungan kompleks hingga hubungan sederhana, kumpulan kecil hingga raksasa) dapat terbukti sangat membantu, karena Anda setidaknya akan dapat melihat kecenderungan umum untuk data yang memiliki kualitas serupa dengan proyek yang Anda tuju. sedang menilai.
sumber
Saya ingin menambahkan beberapa alasan lagi, mengapa Anda tidak dapat membandingkan semua jenis database.
Ada dua arah utama sistem basis data: OLAP dan OLTP (lihat perbandingan ).
Seperti yang Anda katakan, ada juga sistem basis data relasional dan berorientasi dokumen. Walaupun RDBS secara ketat mengikuti prinsip ACID , di sebagian besar DBS yang berorientasi pada dokumen, Anda dapat memutuskan bahwa data yang lemah cukup memadai untuk aplikasi Anda. Itu membuat penguncian dan penjadwalan jauh lebih mudah.
Singkatnya: Anda tidak akan berdebat, bahwa Lamborghini adalah mobil terbaik di dunia . Pikirkan volume bagasi, jumlah kursi, atau jarak tempuh.
Sebagai catatan: Berikut ini adalah patokan untuk sistem database OLTP.
sumber