Dalam aplikasi multithread, praktik yang baik adalah mengisolasi komponen akses ke database, pelanggaran praktik ini dapat menghasilkan kesalahan pelanggaran akses di antara kesalahan lainnya. Untuk membantu menyelesaikan masalah ini, Embarchadero telah menyediakan komponen, FDManager , yang bertanggung jawab atas definisi dan manajemen koneksi dan aman-aman (penggunaan aman di lingkungan multithread).
Sumber: https://docwiki.embarcadero.com/radstudio/sydney/en/multithreading_(fiedac)
Keuntungan Penggunaan FDManager
Definisi Perpustakaan Akses pelanggan ke database. [OPSIONAL]
Sentralisasi pengaturan koneksi dengan database.
Sentralisasi parametrizasi komponen TFDConnection. (Konfigurasi ini meluas ke semua FDConnection yang digunakan dalam aplikasi)
Selain menggunakan fdmanger praktik yang baik dan penggunaan teknik mengoptimalkan koneksi basis data, yang disebut kumpulan koneksi .
Ketika kita perlu melakukan operasi apa pun pada database, pertama -tama diperlukan untuk membuat koneksi dengannya, pembentukan koneksi ini biasanya terjadi melalui protokol TCP/IP , yang melibatkan biaya membuka dan menutup koneksi. Biaya ini sangat signifikan dalam aplikasi web di mana Anda dapat memiliki aliran ribuan permintaan konstan, dan masing -masing akan menghasilkan pembukaan dan penutupan koneksi database. Teknik sederhana untuk menghindari "sialan" koneksi yang konstan ini adalah dengan mempertahankan sejumlah koneksi yang selalu terbuka ( kumpulan koneksi) dan hanya menggunakan kembali bila perlu, sehingga Anda mengurangi sumber daya mesin yang dihabiskan dan waktu respons aplikasi Anda.
Biaya untuk membuat koneksi basis data ini dapat dilihat pada gambar di bawah ini menggunakan alat Wireshark kita dapat melihat jumlah paket yang digunakan untuk melakukan pilih sederhana.
Kita dapat melihat pada gambar di bawah perilaku kueri basis data menggunakan kumpulan koneksi:
Untuk mengonfigurasi kumpulan koneksi, kami akan menggunakan fdmanager , dan properti pool.
| Parameter | Keterangan | Contoh |
|---|---|---|
| Dikumpulkan | Mengaktifkan kumpulan koneksi untuk ConnectionOnDefName yang diinformasikan di FDManager.ConnectationNDefs. Untuk menggunakan kumpulan koneksi, definisi koneksi harus gigih atau pribadi. | BENAR |
| Pool_cleanuptimeout | Waktu dalam milidetik sampai FireDac menghapus koneksi yang tidak digunakan sampai waktu pool_expiretimeout. Nilai default adalah 30000 ms (30 detik). | 15000 ms 15 s |
| Pool_expiretimeout | Waktu dalam milidetik, setelah itu koneksi yang tidak aktif dapat dikecualikan dari kolam dan dihancurkan. Nilai default adalah 90000 ms (90 detik). | 60000 ms 60 s |
| Pool_maximumeMtes | Jumlah maksimum koneksi di kolam. Ketika aplikasi membutuhkan lebih banyak koneksi, pengecualian dihasilkan. Nilai defaultnya adalah 50. Ketika jumlah total koneksi yang ditentukan pada properti ini tercapai, pengecualian dihasilkan: | 100 |
Secara umum, FDManager menjaga kumpulan koneksi "fisik" terbuka saat:
Untuk menggunakan FDManager dengan database lain, periksa tautannya: Database Connectivity (FireDac) #Driver Linkage
| Database | Driver | Tfdconneneondefpass | Unit |
|---|---|---|---|
| Microsoft SQL Server | Mssql | Tfdphysmsssqlonneonefpass | Firedac.phys.mssqldef, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.mssql |
| Oracle Server | Sekarang | Tfdphysoracleconnecontefpass | Firedac.phys.oracledef, firedac.stan.intf, firedac.phys, firedac.phys.oracle |
| PostgreSQL | Hal | Tfdphyspgconneonecendefpass | Fiedac.phys.pgdef, firedac.stan.intf, firedac.phys, firedac.phys.pg; |
| Server mysql | Mysql | Tfdphysmysqlconneonefpass | Firedac.phys.mysqldef, firedac.stan.intf, firedac.phys, firedac.phys.mysql |
| IBM DB2 Server) | Db2 | Tfdphysdb2connectionAndefparams | Firedac.phys.db2def, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.db2 |
| Firebird | Fb | Tfdphysfbconneontefpass | Firedac.phys.fbdef, firedac.stan.intf, firedac.phys, firedac.phys.ibbase, firedac.phys.fb |
| Interbase | IB | Tfdphysibconneonecendefpass | Firedac.phys.ibdef, firedac.stan.intf, firedac.phys, firedac.phys.ibbase, firedac.phys.ib |
| Sqlite | Sqlite | Tfdphyssqliteconnection danfparams | Fiedac.stan.exprfuncs, firedac.phys.sqlitedef, firedac.stan.intf, firedac.phys, firedac.phys.sqlite |
| Mongodb | Mongo | Tfdphysmongoconneottondefpass | Firedac.phys.mongodbdef, firedac.stan.intf, firedac.phys, firedac.phys.mongodb |
| Odbc | Odbc | Tfdphysodbcconneonecendefpass | Firedac.phys.odbcdef, firedac.stan.intf, firedac.phys, firedac.phys.odbcbase, firedac.phys.odbc |
Terlampir pada proyek ada dua contoh menggunakan koneksi database di lingkungan multithread.
Contoh pertama, menggunakan koneksi di lingkungan multithreading untuk desktop .
Contoh ke -2, menggunakan koneksi di lingkungan multithreading untuk server web dengan kuda.
Kedua contoh menggunakan database Firebird