hash(3)

الاسم
hash - طريقة الوصول إلى قاعدة بيانات التجزئة

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/types.h> #include <db.h>

الوصف
ملاحظة جيدة: توثق هذه الصفحة الواجهات المقدمة حتى glibc 2.1. ومنذ الإصدار glibc 2.2، لم تعد glibc توفر هذه الواجهات. من المحتمل أنك تبحث عن واجهات برمجة التطبيقات (APIs) التي توفرها مكتبة libdb بدلاً من ذلك.

الدالة dbopen(3) هي واجهة المكتبة لملفات قاعدة البيانات. أحد صيغ الملفات المدعومة هي ملفات التجزئة. الوصف العام لطرق الوصول إلى قاعدة البيانات موجود في dbopen(3)، تصف صفحة الدليل هذه فقط المعلومات الخاصة بالتجزئة.

هيكل بيانات التجزئة هو مخطط تجزئة ديناميكي قابل للتوسيع.

هيكل البيانات الخاص بطريقة الوصول المُقدم إلى dbopen(3) يُعرَّف في ملف التضمين <db.h> كما يلي:

    typedef struct {
        unsigned int       bsize;
        unsigned int       ffactor;
        unsigned int       nelem;
        unsigned int       cachesize;
        uint32_t         (*hash)(const void *, size_t);
        int         lorder;
    } HASHINFO;

عناصر هذا الهيكل هي كما يلي:

bsize
    يُعرِّف حجم دلو جدول التجزئة، وهو مبدئيًا 256 بايت. قد يُفضل زيادة حجم الصفحة للجداول المقيمة على القرص والجداول ذات عناصر البيانات الكبيرة.

ffactor
    يشير إلى كثافة مرغوبة داخل جدول التجزئة. إنه تقريب لعدد المفاتيح المسموح بتراكمها في أي دلو واحد، ويحدد متى ينمو جدول التجزئة أو يتقلص. القيمة المبدئية هي 8.

nelem
    هو تقدير للحجم النهائي لجدول التجزئة. إذا لم يُضبط أو ضُبط منخفضًا جدًا، ستتوسع جداول التجزئة بلطف مع إدخال المفاتيح، على الرغم من ملاحظة تدهور طفيف في الأداء. القيمة المبدئية هي 1.

cachesize
    هو الحجم الأقصى المقترح، بالبايت، للخبيئة الذاكرية. هذه القيمة استشارية فقط، وستخصص طريقة الوصول ذاكرة إضافية بدلاً من الفشل.

hash
    هي دالة تجزئة مُعرَّفة من قبل المستخدم. نظرًا لعدم وجود دالة تجزئة تؤدي بشكل جيد على جميع البيانات الممكنة، قد يجد المستخدم أن دالة التجزئة المضمنة تؤدي بشكل ضعيف على مجموعة بيانات معينة. يجب أن تأخذ دوال التجزئة المُحددة من قبل المستخدم معاملين (مؤشر لسلسلة محارف بايتية وطول) وتُعيد كمية 32 بت تُستخدم كقيمة التجزئة.

lorder
    هو ترتيب البايت للأعداد الصحيحة في بيانات وصف قاعدة البيانات المخزنة. يجب أن يمثل الرقم الترتيب كعدد صحيح؛ على سبيل المثال، ترتيب big endian سيكون الرقم 4,321. إذا كان lorder يساوي 0 (لم يُحدد أي ترتيب)، يُستخدم ترتيب المضيف الحالي. إذا كان الملف موجودًا بالفعل، تُتجاهل القيمة المُحددة وتُستخدم القيمة المُحددة عند إنشاء الشجرة.

إذا كان الملف موجودًا بالفعل (ولم يُحدد العلم O_TRUNC)، تُتجاهل القيم المُحددة لـ bsize و ffactor و lorder و nelem وتُستخدم القيم المُحددة عند إنشاء الشجرة.

إذا حُددت دالة تجزئة، تحاول hash_open تحديد ما إذا كانت دالة التجزئة المُحددة هي نفسها التي أُنشئت بها قاعدة البيانات، وتفشل إذا لم تكن كذلك.

تُوفر واجهات متوافقة مع الإصدارات السابقة للدوال الموصوفة في dbm(3) و ndbm(3)، ومع ذلك هذه الواجهات غير متوافقة مع صيغ الملفات السابقة.

الأخطاء
قد تفشل دوال طريقة الوصول hash وتُعيِّن errno لأي من الأخطاء المُحددة لدالة المكتبة dbopen(3).

العلل
فقط ترتيب البايت big endian و little endian مدعومان.

انظر أيضًا
btree(3)، dbopen(3)، mpool(3)، recno(3)

جداول التجزئة الديناميكية، Per-Ake Larson، اتصالات رابطة مكائن الحوسبة، أبريل 1988.

حزمة تجزئة جديدة ليونكس، Margo Seltzer، وقائع USENIX، شتاء 1991.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.