Mengembangkan kesadaran Pengumpulan Sambungan di Driver ODBC

Topik ini membahas detail pengembangan driver ODBC yang berisi informasi tentang bagaimana driver harus menyediakan layanan pengumpulan koneksi.

Mengaktifkan Kumpulan Koneksi sadar driver

Driver harus menerapkan fungsi Antarmuka Penyedia Layanan (SPI) ODBC berikut:

  • SQLSet Koneksi AttrForDbcInfo

  • SQLSet Koneksi Info

  • SQLSetDriver Koneksi Info

  • SQLGetPoolID

  • SQLRate Koneksi ion

  • SQLPool Koneksi

  • SQLCleanup Koneksi ionPoolID

Lihat Referensi Antarmuka Penyedia Layanan (SPI) ODBC untuk informasi selengkapnya.

Driver juga harus menerapkan fungsi yang ada berikut sehingga pengumpulan sadar driver dapat diaktifkan:

Function Fungsionalitas yang Ditambahkan
SQLAllocHandle

SQLFreeHandle

SQLGetDiagField

SQLGetDiagRec
Mendukung jenis handel baru: SQL_HANDLE_DBC_INFO_TOKEN (lihat deskripsi di bawah).
SQLSet Koneksi Attr Mendukung atribut koneksi set-only baru: SQL_ATTR_DBC_INFO_TOKEN untuk mengatur ulang koneksi (lihat deskripsi di bawah).

Catatan

Fungsi yang tidak digunakan lagi seperti SQLError dan SQLSet Koneksi Option tidak didukung untuk pengumpulan koneksi sadar driver.

ID Kumpulan

ID kumpulan adalah ID khusus driver panjang pointer untuk mewakili grup koneksi tertentu yang dapat digunakan secara bergantian. Mengingat serangkaian informasi koneksi, driver harus dapat dengan cepat menyimpulkan ID kumpulan yang sesuai.

Misalnya, ID kumpulan harus mengodekan nama server dan informasi kredensial. Namun, nama database tidak diperlukan karena driver mungkin dapat menggunakan kembali koneksi lalu mengubah database dalam waktu yang lebih singkat daripada membuat koneksi baru.

Driver harus menentukan sekumpulan atribut kunci, yang akan terdiri dari ID kumpulan. Nilai atribut kunci ini dapat berasal dari atribut koneksi, string koneksi, dan DSN. Jika ada konflik dalam sumber-sumber ini, kebijakan resolusi khusus driver yang ada harus digunakan untuk kompatibilitas mundur.

Driver Manager akan menggunakan kumpulan yang berbeda untuk ID kumpulan yang berbeda. Semua koneksi di kumpulan yang sama dapat digunakan kembali. Driver Manager tidak akan pernah menggunakan kembali koneksi dengan ID kumpulan yang berbeda.

Oleh karena itu driver harus menetapkan ID kumpulan unik untuk setiap grup koneksi dengan nilai yang sama dalam atribut kunci yang ditentukan. Jika driver menggunakan ID kumpulan yang sama untuk dua koneksi dengan nilai yang berbeda dalam atribut kuncinya, Manajer Driver akan tetap memasukkannya ke dalam kumpulan yang sama (Manajer Driver tidak tahu apa-apa tentang atribut kunci khusus driver). Ini berarti bahwa driver perlu melaporkan ke Driver Manager bahwa koneksi dengan serangkaian atribut kunci yang berbeda tidak dapat digunakan kembali di dalam Fungsi SQLRate Koneksi ion. Ini dapat mengurangi performa dan ini tidak disarankan.

Manajer Driver tidak akan menggunakan kembali koneksi yang dialokasikan dari lingkungan driver lain meskipun semua informasi koneksi cocok. Driver Manager akan menggunakan kumpulan yang berbeda untuk lingkungan yang berbeda, bahkan ketika koneksi memiliki ID kumpulan yang sama. Oleh karena itu, ID kumpulan bersifat lokal untuk lingkungan pengemudinya.

Fungsi untuk mendapatkan ID kumpulan dari driver adalah Fungsi SQLGetPoolID.

Peringkat Koneksi ion

Dibandingkan dengan membuat koneksi baru, Anda bisa mendapatkan performa yang lebih baik dengan mengatur ulang beberapa informasi koneksi (seperti DATABASE) dalam koneksi terkumpul. Jadi, Anda mungkin tidak ingin nama database berada di sekumpulan atribut kunci Anda. Jika tidak, Anda dapat memiliki kumpulan terpisah untuk setiap database, yang mungkin tidak baik dalam aplikasi tingkat menengah, di mana pelanggan menggunakan berbagai string koneksi yang berbeda.

Setiap kali Anda menggunakan kembali koneksi yang memiliki beberapa ketidakcocokan atribut, Anda harus mengatur ulang atribut yang tidak cocok berdasarkan permintaan aplikasi baru, sehingga koneksi yang dikembalikan identik dengan permintaan aplikasi (lihat diskusi atribut SQL_ATTR_DBC_INFO_TOKEN di SQLSet Koneksi FungsiAttr). Namun, mengatur ulang atribut tersebut dapat mengurangi performa. Misalnya, mengatur ulang database memerlukan panggilan jaringan ke server. Oleh karena itu, gunakan kembali koneksi yang sangat cocok, jika tersedia.

Fungsi peringkat pada driver dapat mengevaluasi koneksi yang ada dengan permintaan koneksi baru. Misalnya, fungsi peringkat driver dapat menentukan:

  • Jika koneksi yang ada sangat cocok dengan permintaan.

  • Jika hanya ada beberapa ketidakcocokan yang tidak signifikan, seperti batas waktu koneksi, yang tidak memerlukan komunikasi dengan server untuk mengatur ulang.

  • Jika ada beberapa atribut yang tidak cocok yang memerlukan komunikasi dengan server untuk direset tetapi masih akan menghasilkan performa yang lebih baik daripada membuat koneksi baru.

  • Jika ketidakcocokan terjadi untuk atribut yang sangat memakan waktu untuk mengatur ulang (pengembang driver dapat mempertimbangkan untuk menambahkan atribut ini ke dalam set atribut kunci, yang digunakan untuk menghasilkan ID kumpulan).

Skor antara 0 dan 100 dimungkinkan, di mana 0 berarti tidak digunakan kembali dan 100 berarti cocok dengan sempurna. SQLRate Koneksi ion adalah fungsi untuk memberi peringkat koneksi.

Handel ODBC Baru - SQL_HANDLE_DBC_INFO_TOKEN

Untuk mendukung pengumpulan koneksi sadar driver, driver memerlukan informasi koneksi untuk menghitung ID Kumpulan. Driver juga memerlukan informasi koneksi untuk membandingkan permintaan koneksi baru dengan koneksi di kumpulan. Setiap kali tidak ada koneksi di kumpulan yang dapat digunakan kembali, driver harus membuat koneksi baru, sehingga membutuhkan informasi koneksi.

Karena informasi koneksi dapat berasal dari beberapa sumber (string koneksi, atribut koneksi, dan DSN), driver mungkin perlu mengurai string koneksi dan mengatasi konflik antara sumber-sumber ini dalam setiap panggilan fungsi di atas.

Oleh karena itu, handel ODBC baru diperkenalkan: SQL_HANDLE_DBC_INFO_TOKEN. Dengan SQL_HANDLE_DBC_INFO_TOKEN, driver tidak perlu mengurai string koneksi dan mengatasi konflik dalam informasi koneksi lebih dari sekali. Karena ini adalah struktur data khusus driver, driver dapat menyimpan data seperti informasi koneksi atau ID kumpulan.

Handel ini hanya digunakan sebagai antarmuka antara Driver Manager dan driver. Aplikasi tidak dapat mengalokasikan handel ini secara langsung.

Handel induk dari handel ini berjenis SQL_HANDLE_ENV, yang berarti bahwa driver dapat memperoleh informasi lingkungan dari handel HENV selama resolusi informasi koneksi.

Setiap kali menerima permintaan koneksi baru, Driver Manager akan mengalokasikan handel jenis SQL_HANDLE_DBC_INFO_TOKEN untuk menyimpan informasi koneksi, setelah mengonfirmasi bahwa driver mendukung kesadaran kumpulan koneksi. Setelah selesai menggunakan handel (tetapi sebelum mengembalikan beberapa kode pengembalian selain SQL_STILL_EXECUTING dari SQLDriver Koneksi atau SQL Koneksi), Driver Manager akan membebaskan handel. Oleh karena itu, handel dibuat setelah panggilan SQLAllocHandle, dan dihancurkan setelah panggilan SQLFreeHandle. Driver Manager menjamin handel akan dibebaskan sebelum membebaskan HENV terkait (ketika SQLDriver Koneksi atau SQL Koneksi mengembalikan kesalahan).

Driver harus mengubah fungsi berikut untuk menerima jenis handel baru SQL_HANDLE_DBC_INFO_TOKEN:

  1. SQLAllocHandle

  2. SQLFreeHandle

  3. SQLGetDiagField

  4. SQLGetDiagRec

Driver Manager menjamin bahwa beberapa utas tidak akan menggunakan handel SQL_HANDLE_DBC_INFO_TOKEN yang sama secara bersamaan. Oleh karena itu, model sinkronisasi handel ini bisa sangat sederhana di dalam driver. Driver Manager tidak akan mengambil kunci lingkungan sebelum mengalokasikan dan membebaskan SQL_HANDLE_DBC_INFO_TOKEN.

SQLAllocHandle dan SQLFreeHandle Manajer Driver tidak akan menerima jenis handel baru ini.

SQL_HANDLE_DBC_INFO_TOKEN mungkin berisi informasi rahasia seperti kredensial. Oleh karena itu, driver harus menghapus buffer memori dengan aman (menggunakan SecureZeroMemory) yang berisi informasi sensitif sebelum melepaskan handel ini dengan SQLFreeHandle. Setiap kali handel lingkungan aplikasi ditutup, semua kumpulan koneksi terkait akan ditutup.

Algoritma Peringkat Kumpulan Driver Manager Koneksi ion

Bagian ini membahas algoritma peringkat untuk pengumpulan koneksi Driver Manager. Pengembang driver dapat menerapkan algoritma yang sama untuk kompatibilitas mundur. Algoritma ini mungkin bukan yang terbaik. Anda harus menyempurnakan algoritma ini berdasarkan implementasi Anda (jika tidak, tidak ada alasan untuk menerapkan fitur ini).

Driver Manager akan mengembalikan peringkat integral dari 0 hingga 100 untuk setiap koneksi dari kumpulan. 0 berarti koneksi tidak dapat digunakan kembali dan 100 menunjukkan kecocokan yang sempurna. Asumsikan permintaan koneksi diberi nama hRequest dan koneksi yang ada dari kumpulan dinamai sebagai hCandidate. Jika salah satu kondisi berikut salah, hCandidate koneksi yang dikumpulkan tidak dapat digunakan kembali untuk hRequest (Manajer Driver akan menetapkan peringkat 0).

  • hCandidate dan hRequest keduanya berasal dari API UNICODE (seperti SQLDriver Koneksi W) atau ANSI API (seperti SQLDriver Koneksi A). (Driver UNICODE dapat melakukan perilaku yang berbeda mengingat API ANSI dan API UNICODE (lihat atribut koneksi SQL_ATTR_ANSI_APP).)

  • hCandidate dan hRequest dibuat oleh fungsi yang sama; baik SQLDriver Koneksi atau SQL Koneksi.

  • string koneksi yang digunakan untuk membuka hCandidate harus sama dengan hRequest, ketika SQLDriver Koneksi digunakan.

  • ServerName (atau DSN), nama pengguna, dan kata sandi yang digunakan untuk membuka hCandidate harus sama dengan yang digunakan untuk membuka hRequest saat SQL Koneksi digunakan.

  • Pengidentifikasi keamanan (SID) dari utas saat ini harus sama dengan SID yang digunakan untuk membuka hCandidate.

  • Untuk driver yang mahal untuk mendaftar dan tidak mendaftar (lihat diskusi SQL_DTC_TRANSITION_COST di SQL Koneksi), menggunakan kembali hRequest tidak boleh memerlukan pendaftaran atau pembatalan pendaftaran tambahan.

Tabel berikut ini memperlihatkan penetapan skor untuk skenario yang berbeda.

Perbandingan pada atribut koneksi antara koneksi terkumpul dan permintaan Tidak Ada Pendaftaran / tidak ada pendaftaran Memerlukan Pendaftaran Ekstra / Tidak Terdaftar
Katalog (SQL_ATTR_CURRENT_CATALOG) berbeda 60 50
Beberapa atribut koneksi berbeda, tetapi katalognya sama 90 70
Semua atribut koneksi cocok dengan sempurna 100 80

Diagram Urutan

Diagram urutan ini menunjukkan mekanisme pengumpulan dasar yang dijelaskan dalam topik ini. Ini hanya menunjukkan penggunaan SQLDriver Koneksi tetapi kasus SQL Koneksi serupa.

Sequence Diagram

Diagram Status

Diagram status ini memperlihatkan objek token info koneksi, yang dijelaskan dalam topik ini. Diagram hanya memperlihatkan SQLDriver Koneksi tetapi kasus SQL Koneksi serupa. Karena Driver Manager mungkin perlu menangani kesalahan kapan saja, Manajer Driver dapat memanggil SQLFreeHandle untuk status apa pun.

State Diagram

Lihat Juga

Pengumpulan Koneksi sadar driver
Referensi Antarmuka Penyedia Layanan (SPI) ODBC