Saat ini saya akan develop aplikasi yang mature dan dapat diandalkan, sehingga saya mencari tahu cara yang terbaik untuk melakukan koneksi dan query terhadap Database Mysql. Saat ini yang tersedia (bawaan) dari PHP ada 3, yaitu koneksi mysql biasa (biasa disebut Raw Mysql, contoh mysql_connect()), PDO (PHP Data Object) dan Mysqli (OOP dan Procedural). Disamping ketiganya masih banyak lagi aplikasi 3rd party yang dapat digunakan untuk melakukan koneksi ke database Mysql seperti Doctrine (ORM) dkk. Show Setelah mencari tahu di internet, kebanyakan dari hasil Benchmark Raw Mysql yang menang. Sehingga saya juga tertarik untuk melakukan perbandingan mana yang paling cepat. Cara yang saya gunakan disini adalah, PHP melakukan koneksi dan query menggunakan looping tanpa menampilkan data hasil query ke halaman website. Mungkin kedepannya saya juga akan melakukan komparasi dengan cara lain, yaitu berapa waktu yg dibutuhkan untuk melakukan query pada data yang besar. Oke langsung saja saya jabarkan scriptnya disini. Listing Code mysql_compare.php <? /* File name : mysql_compare.php * Author : ofidz * Email : offiedz@majezty * Web : mocopat.wordpress.com */ ?> <html> <style> input { font-family: courier; text-align: right; } </style> <body style="font-family: courier;"> <table> <tr><td align="right">Running time : </td><td><input id="running" value='0' size="10"></td><td align="center">detik</td><td align="center">qry/dtk</td></tr> <tr style="background-color: bisque;"><td align="right">PDO Process : </td><td><input id="pdo" value='0' size="10"></td><td><input id="pdt"></td><td><input id="avgpdo" value='0' size="7"></td></tr> <tr style="background-color:lightcyan ;"><td align="right">Raw Process : </td><td><input id="raw" value='0' size="10"></td><td><input id="rdt"></td><td><input id="avgraw" value='0' size="7"></td></tr> <tr style='background-color: lightgreen;'><td align="right">Mysqli OOP Process : </td><td><input id="sqli" value='0' size="10"></td><td><input id="sqlit"></td><td><input id="avgsqli" value='0' size="7"></td></tr> <tr style='background-color: lavender;'><td align="right">Mysqli Proc Process : </td><td><input id="sqlip" value='0' size="10"></td><td><input id="sqlipt"></td><td><input id="avgsqlip" value='0' size="7"></td></tr> </table> <script> var milisec = 0 var seconds = 0 document.getElementById('running').value='0' function display(){ if (milisec >= 9){ milisec = 0 seconds += 1 } else milisec += 1 document.getElementById('running').value=seconds+"."+milisec+" detik" t = setTimeout("display()",100) } display() </script> <? set_time_limit(3600); $data = 1000; $server = "localhost"; $user = "root"; $pass = ""; $db = "nwind"; $sql = "SELECT * FROM order_details "; # Function function xtime($start) { return microtime(true) - $start; } # Begin Test PDO function pdo_test($server, $db, $user, $pass, $data, $sql) { $start = microtime(true); for ($i = 1; $i <= $data; ++$i) { try { $conn = new PDO("mysql:host=$server;dbname=$db", $user, $pass); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage() . "\n"; } $conn->query($sql); echo "<script>document.getElementById('pdo').value='$i/$data';</script>"; echo "<script>document.getElementById('pdt').value='" . xtime($start) . "';</script>"; echo "<script>document.getElementById('avgpdo').value='" . number_format($i / xtime($start), 2, ',', '') . "';</script>"; $conn = null; } echo "<tr style='background: bisque;'><td align='right'>PDO time : </td><td>" . xtime($start) . "</td></tr>"; echo "<br/>"; } # Begin mysql_* Test function mysql_test($server, $db, $user, $pass, $data, $sql) { $start = microtime(true); for ($i = 1; $i <= $data; ++$i) { $conn = mysql_connect($server, $user, $pass); mysql_select_db($db); mysql_query($sql); echo "<script>document.getElementById('raw').value='$i/$data';</script>"; echo "<script>document.getElementById('rdt').value='" . xtime($start) . "';</script>"; echo "<script>document.getElementById('avgraw').value='" . number_format($i / xtime($start), 2, ',', '') . "';</script>"; mysql_close($conn); } echo "<tr style='background-color:lightcyan ;'><td align='right'>Raw time : </td><td>" . xtime($start) . "</td></tr>"; } # Mysqli OOP test function mysqli_oop_test($server, $db, $user, $pass, $data, $sql) { $start = microtime(true); for ($i = 1; $i <= $data; ++$i) { $mysqli = new mysqli($server, $user, $pass, $db); $mysqli->query($sql); echo "<script>document.getElementById('sqli').value='$i/$data';</script>"; echo "<script>document.getElementById('sqlit').value='" . xtime($start) . "';</script>"; echo "<script>document.getElementById('avgsqli').value='" . number_format($i / xtime($start), 2, ',', '') . "';</script>"; $mysqli->close(); } echo "<tr style='background: lightgreen;'><td align='right'>Mysqli OOP time : </td><td>" . xtime($start) . "</td></tr>"; } # Mysqli Procedural Test function mysqli_proc_test($server, $db, $user, $pass, $data, $sql) { $start = microtime(true); for ($i = 1; $i <= $data; ++$i) { $mysqli = mysqli_connect($server, $user, $pass, $db); mysqli_query($mysqli, $sql); echo "<script>document.getElementById('sqlip').value='$i/$data';</script>"; echo "<script>document.getElementById('sqlipt').value='" . xtime($start) . "';</script>"; echo "<script>document.getElementById('avgsqlip').value='" . number_format($i / xtime($start), 2, ',', '') . "';</script>"; mysqli_close($mysqli); } echo "<tr style='background: lavender;'><td align='right'>Mysqli Proc time : </td><td>" . xtime($start) . "</td></tr>"; } # Jumlah baris data function jml_row($server,$user,$pass,$db,$sql){ $conn = mysql_connect($server,$user,$pass); mysql_selectdb($db); $xSql = mysql_query($sql); return mysql_num_rows($xSql); mysql_close($conn); } ?> <table> <tr><td align='right'><b>Result :</b></td><td><?= $data . " x ". jml_row($server, $user, $pass, $db, $sql)." row(s) execution"; ?></td></tr> <? pdo_test($server, $db, $user, $pass, $data, $sql); mysql_test($server, $db, $user, $pass, $data, $sql); mysqli_oop_test($server, $db, $user, $pass, $data, $sql); mysqli_proc_test($server, $db, $user, $pass, $data, $sql); ?> </table> <script> clearTimeout(t); </script> </body> </html> Pada script diatas, masing-masing driver menggunakan function, supaya kita lebih mudah dalam menempatkan driver yang lebih dulu akan dijalankan. Jumlah query yang akan dijalankan juga dapat disetting dengan mengganti nilai pada variabel $data. Berikut contoh hasil benchmark yang saya lakukan. Software dan Hardware yang saya gunakan pada saat benchmark.
Jika anda pernah melakukan benchmark juga, silahkan share disini. Saya juga minta pendapat anda mengenai script yang saya pakai untuk benchmark, mungkin kurang fair atau bagaimana, silahkan diluruskan jika kurang fair. Terima kasih. Bagaimana cara menghubungkan PHP dengan MySQL?Empat langkah menggunakan MySQLi untuk membuat koneksi database PHP ke MySQL:. Buka File Manager -> public_html.. Buat File Baru dengan mengklik ikon tambah file pada menu di atas layar.. Simpan dengan nama databaseconnect.php, atau nama lain yang Anda inginkan, tapi ekstensinya tetap .. Apa yang membedakan MySQL dengan MySQLi pada PHP?Perbedaan MySQL dan MySQLi adalah tipe dukungan yang disediakan. Jika MySQL hanya mendukung MySQL server sampai di versi 4.1.3, MySQLi dapat dipakai sampai dengan versi paling baru. Fiturnya pun lebih banyak bisa dipakai ketika menggunakan MySQLi dibandingkan menggunakan MySQL.
Apakah SQL dan MySQL berbeda?Pada dasarnya, perbedaan SQL dan MySQL cukup signifikan, di mana SQL adalah bahasa query, sedangkan MySQL adalah software yang menggunakan bahasa query tersebut (SQL). Kalau berbicara tentang MySQL, padanannya adalah SQL Server.
Apa yang dimaksud dengan PHP dan MySQL?PHP and MySQL merupakan kolaborasi antara bahasa pemrograman dan layanan database yang populer saat ini. Jumlah situs yang menggunakan PHP mencapai 78.9% (The Web Technology Surveys, 2019).
|