في تطبيق Multithread ، تتمثل الممارسة الجيدة في عزل مكونات الوصول إلى قاعدة البيانات ، يمكن أن يؤدي انتهاك هذه الممارسة إلى توليد أخطاء انتهاك الوصول من بين أخطاء أخرى. للمساعدة في حل هذه المشكلة ، أتيحت شركة EncaraDero إلى توفر المكون ، FDMANAGER ، المسؤول عن تعريف الاتصالات وإدارتها وهي آمنة لخيط الخيط (الاستخدام الآمن في بيئات Multithread).
المصدر: https://docwiki.embarcadero.com/radstudio/sydney/en/multithreading_(fiedac)
مزايا استخدام Fdmanager
تعريف المكتبة وصول العملاء إلى قاعدة البيانات. [خياري]
مركزية إعدادات الاتصال مع قاعدة البيانات.
مركزية المعاملات من مكون TFDConnection. (يمتد هذا التكوين إلى جميع FDConnection المستخدم في التطبيق)
بالإضافة إلى استخدام FDManger ممارسة جيدة واستخدام تقنية تحسين اتصال قاعدة البيانات ، يسمى تجمع الاتصال .
عندما نحتاج إلى إجراء أي عملية على قاعدة بيانات ، من الضروري أولاً إنشاء اتصال بها ، فإن إنشاء هذا الاتصال يحدث عادة من خلال بروتوكول TCP/IP ، بما يتضمن تكلفة فتح الاتصال وإغلاقه . هذه التكلفة مهمة بشكل خاص في تطبيقات الويب حيث يمكنك الحصول على تدفق الآلاف من الطلبات الثابتة ، وسيقوم كل منها بإنشاء وفتح اتصال قاعدة البيانات. تتمثل هناك تقنية بسيطة لتجنب هذا "سخيف" الاتصالات المستمرة في الحفاظ على عدد معين من الاتصالات مفتوحة دائمًا ( تجمع اتصال) وببساطة إعادة استخدامها عند الضرورة ، لذلك تقوم بتقليل مورد الجهاز الذي يتم إنفاقه ووقت استجابة التطبيق الخاص بك.
يمكن رؤية هذه التكلفة لإنشاء اتصال قاعدة بيانات في الصورة أدناه باستخدام أداة Wireshark ، يمكننا رؤية كمية الحزم المستخدمة لأداء محدد بسيط.
يمكننا أن نرى في الصورة أدناه سلوك استعلامات قاعدة البيانات باستخدام تجمع الاتصالات:
لتكوين تجمع اتصال ، سنستخدم FDMANAGER ، وخصائص التجمع.
| المعلمة | وصف | مثال |
|---|---|---|
| مجمعة | ينشط تجمع الاتصال للحصول على اتصال مستنير في fdmanager.connectationndefs. لاستخدام تجمع اتصال ، يجب أن يكون تعريف الاتصال ثابتًا أو خاصًا. | حقيقي |
| pool_cleanuptimeout | الوقت بالمللي ثانية حتى يزيل FireDac الاتصالات التي لم يتم استخدامها حتى وقت pool_expiretimeout. القيمة الافتراضية هي 30000 مللي ثانية (30 ثانية). | 15000 مللي ثانية 15 ق |
| pool_expiretimeout | الوقت بالمللي ثانية ، وبعد ذلك يمكن استبعاد الاتصال غير النشط من المسبح وتدميره. القيمة الافتراضية هي 90000 مللي ثانية (90 ثانية). | 60000 مللي ثانية 60 ثانية |
| pool_maximumemtes | الحد الأقصى لعدد الاتصالات في التجمع. عندما يتطلب التطبيق المزيد من الاتصالات ، يتم إنشاء استثناء. القيمة الافتراضية هي 50. عندما يتم الوصول إلى إجمالي عدد الاتصالات المحددة في هذه الخاصية ، يتم إنشاء استثناء: | 100 |
بشكل عام ، يحتفظ FDMANAGER بمجموعة من الاتصالات "المادية" مفتوحة عندما:
لاستخدام FDMANAGER مع قواعد بيانات أخرى ، تحقق من الرابط: اتصال قاعدة البيانات (FIREDAC) #Driver
| قاعدة البيانات | سائق | TFDConneneNONDEFPASS | الوحدات |
|---|---|---|---|
| Microsoft SQL Server | MSSQL | TFDPHYSSSSQLONNEONEFPASS | firedac.phys.mssqldef ، firedac.stan.intf ، firedac.phys ، firedac.phys.odbcbase ، firedac.phys.mssql |
| خادم أوراكل | الآن | tfdphysoracleconnecontefpass | firedac.phys.oracledef ، firedac.stan.intf ، firedac.phys ، firedac.phys.oracle |
| postgresql | ص | tfdphyspgconneecendefpass | fiedac.phys.pgdef ، firedac.stan.intf ، firedac.phys ، firedac.phys.pg ؛ |
| خادم MySQL | MySQL | tfdphysmysqlConneOneFpass | firedac.phys.mysqldef ، firedac.stan.intf ، firedac.phys ، firedac.phys.mysql |
| خادم IBM DB2) | DB2 | tfdphysdb2connectionandefparams | firedac.phys.db2def ، firedac.stan.intf ، firedac.phys ، firedac.phys.odbcbase ، firedac.phys.db2 |
| فايربيرد | FB | tfdphysfbconneontefpass | firedac.phys.fbdef ، firedac.stan.intf ، firedac.phys ، firedac.ibbase ، firedac.phys.fb |
| interbase | IB | tfdphysibconneecendefpass | firedac.phys.ibdef ، firedac.stan.intf ، firedac.phys ، firedac.phys.ibbase ، firedac.phys.ib |
| sqlite | sqlite | tfdphyssqliteconnectionandefparams | fiedac.stan.exprfuncs ، firedac.phys.sqlitedef ، firedac.intf ، firedac.phys ، firedac.phys.sqlite |
| mongodb | مونغو | tfdphysmongoconneottondefpass | firedac.phys.mongodbdef ، firedac.stan.intf ، firedac.phys ، firedac.phys.mongodb |
| ODBC | ODBC | tfdphysodbcconneecendefpass | firedac.phys.odbcdef ، firedac.stan.intf ، firedac.phys ، firedac.phys.odbcbase ، firedac.phys.odbc |
المرفقة في المشروع هناك مثالان على استخدام اتصال قاعدة البيانات في بيئات MultiThread.
المثال الأول ، باستخدام الاتصالات في بيئة متعددة مؤشرات القلب لسطح المكتب .
مثال الثاني ، باستخدام الاتصالات في بيئة متعددة لخادم الويب مع الحصان.
يستخدم كلا المثالين قاعدة بيانات Firebird