Cara menggunakan reactphp/mysql

Hari ini, kami dengan senang hati mengumumkan ketersediaan rilis beta besar berikutnya dari friends-of-reactphp/mysql, klien database async MySQL untuk ReactPHP. 🎉

Sekarang v0. 5. 0 telah diberi tag dan dirilis hari ini, mari kita lihat mengapa kami yakin API baru ini menyediakan fitur baru yang signifikan yang memerlukan peningkatan versi utama. Meskipun kode yang ada akan terus berfungsi tanpa perubahan, Anda sangat disarankan untuk mempertimbangkan penggunaan koneksi lambat yang baru seperti yang dijelaskan di bawah ini. Baiklah, mari bermalas-malasan

Koneksi basis data yang bersemangat

friends-of-reactphp/mysql menyediakan implementasi PHP murni untuk mengakses database MySQL yang ada dengan ReactPHP. Ini memungkinkan Anda untuk terhubung secara asinkron ke database Anda dan mengirim kueri ke sana. Bergantung pada kasus penggunaan Anda, Anda dapat menggunakan beberapa koneksi bersamaan atau menggunakan ekosistem ReactPHP yang luas untuk mengakses layanan lain secara bersamaan (pada waktu yang sama). Jika Anda ingin mempelajari lebih lanjut tentang dasar-dasarnya, Anda mungkin ingin melihat salah satu postingan blog terbaru yang memperkenalkan streaming MySQL dengan ReactPHP

Meskipun proyek ini menggunakan implementasi protokol yang sangat efisien, tidak dapat disangkal bahwa operasi tertentu hanya akan memakan waktu. membuat koneksi ke basis data jarak jauh melalui tautan yang lambat atau mengirim pernyataan SQL besar ke basis data yang sibuk sebagian besar akan dibatasi oleh seberapa cepat basis data dapat mengembalikan hasilnya. Karena itu, operasi semacam ini diwakili oleh janji yang memungkinkan Anda untuk bereaksi ketika hasilnya tersedia. Dengan kata lain, ini memungkinkan Anda untuk menunggu resolusinya. Untuk mendapatkan pemahaman yang lebih baik, mari kita lihat seperti apa kueri rata-rata dengan API berbasis promise yang ada

$uri = 'test:test@localhost/test';
$factory->createConnection($uri)->then(function (ConnectionInterface $connection) {
    $connection->query('SELECT * FROM book')->then(
        function (QueryResult $command) {
            echo count($command->resultRows) . ' row(s) in set' . PHP_EOL;
        },
        function (Exception $error) {
            echo 'Error: ' . $error->getMessage() . PHP_EOL;
        }
    );

    $connection->quit();
});

Koneksi database yang malas

Rilis baru sekarang menyediakan metode createLazyConnection() baru untuk terhubung dengan lambat sesuai permintaan dan secara otomatis mengantri semua permintaan yang belum selesai hingga koneksi yang mendasarinya siap. Selain itu, ini menerapkan batas waktu "menganggur" untuk menutup koneksi dasar saat tidak digunakan selama beberapa waktu dan secara otomatis akan membuat koneksi dasar baru sesuai permintaan lagi. Mari kita lihat seperti apa kueri di atas dengan API koneksi lambat yang baru

$uri = 'test:test@localhost/test';
$connection = $factory->createLazyConnection($uri);

$connection->query('SELECT * FROM book')->then(
    function (QueryResult $command) {
        echo count($command->resultRows) . ' row(s) in set' . PHP_EOL;
    },
    function (Exception $error) {
        echo 'Error: ' . $error->getMessage() . PHP_EOL;
    }
);

$connection->quit();
_

Metode ini segera mengembalikan koneksi "virtual" yang mengimplementasikan ConnectionInterface yang ada yang dapat digunakan untuk berinteraksi dengan database MySQL Anda. Dari sisi konsumen, ini berarti Anda dapat mulai mengirim kueri ke database segera sementara koneksi yang mendasarinya mungkin masih belum selesai. Karena membuat koneksi yang mendasari ini mungkin memakan waktu lama, ini akan mengantrekan semua perintah yang belum selesai dan akan memastikan bahwa semua perintah akan dijalankan dalam urutan yang benar setelah koneksi siap. Dengan kata lain, koneksi "virtual" ini berperilaku seperti koneksi "nyata" seperti yang dijelaskan dalam ConnectionInterface dan membebaskan Anda dari keharusan berurusan dengan resolusi asinkronnya

Kesimpulan

Bergantung pada kasus penggunaan khusus Anda, Anda mungkin lebih suka metode ini atau createConnection() yang mendasari yang diselesaikan dengan janji. Untuk banyak kasus penggunaan sederhana, mungkin lebih mudah membuat koneksi lambat karena ini membebaskan Anda dari mengelola status koneksi secara manual dan memedulikan waktu tunggu koneksi serta menghubungkan kembali untuk aplikasi yang berjalan lama. Dengan menggunakan kembali ConnectionInterface yang ada, Anda dapat mulai menggunakan metode createLazyConnection() baru dan menggunakan koneksi "virtual" ini tanpa harus berurusan dengan resolusi asinkronnya lagi

Dengan menggunakan antarmuka yang ada, rilis baru ini sekarang dapat diintegrasikan lebih mudah dengan ekosistem yang ada dan beberapa teknologi menarik yang telah saya perkenalkan di posting blog terakhir. Selain itu, ada rencana untuk menggunakan fitur ini sebagai dasar untuk kumpulan koneksi di masa mendatang untuk secara otomatis mengelola beberapa koneksi (pengaturan load-balancing atau ketersediaan tinggi), tetapi saya akan meninggalkan ini untuk posting lain dalam waktu yang tidak terlalu lama. Tapi pertama-tama, pastikan untuk mengunjungi friends-of-reactphp/mysql dan mari rayakan rilis ini 🎉

Jika Anda memiliki umpan balik atau hanya ingin menghubungi dan menyapa, saya senang mendengar kembali dan menghargai umpan balik. Gunakan opsi kontak di bagian bawah dan mari kita berhubungan

Baru saja merilis friends-of-reactphp/mysql v0. 5. 0. 🎉 Sekarang mendukung koneksi database lambat dengan koneksi ulang otomatis dan waktu tunggu menganggur, membuat aplikasi database yang berjalan lama dengan @ReactPHP menjadi lebih mudah. 🐘💪 #async #php https. //t. co/YQtr57mnc0

— Christian Luck (@another_clue) 28. November 2018

Sekali lagi saya ingin berterima kasih kepada @geertvanbommel, sesama arsitek perangkat lunak yang berspesialisasi dalam pemrosesan kumpulan basis data dan pengembangan API, untuk mensponsori sebagian besar pengembangan ini. 🎉 Berkat sponsor seperti ini, yang memahami pentingnya pengembangan sumber terbuka, saya dapat membenarkan menghabiskan waktu dan fokus pada pengembangan sumber terbuka daripada pekerjaan berbayar tradisional. Jika Anda mengikuti posting saya lebih teratur, saya yakin Anda akan mengingat namanya. Dan jika Anda berencana untuk mengikuti postingan saya selanjutnya, saya yakin ada lebih banyak pengumuman menarik untuk diikuti di masa mendatang...

Tahukah Anda bahwa saya menawarkan layanan pengembangan khusus dan mengeluarkan faktur untuk sponsor rilis dan untuk kontribusi?