تم إنشاء هذه الترجمة باستخدام التعلم الآلي وقد لا تكون دقيقة بنسبة 100%. عرض النسخة الإنجليزية

مواصفات Blockfile وقاعدة بيانات المضيفين

مواصفات تنسيق ملف I2P blockfile والجداول في hostsdb.blockfile المستخدمة من قبل خدمة التسمية Blockfile Naming Service

نظرة عامة

تحدد هذه الوثيقة تنسيق ملف I2P blockfile والجداول الموجودة في hostsdb.blockfile المستخدمة من قِبل خدمة Blockfile Naming Service NAMING .

يوفر blockfile بحثاً سريعاً عن الوجهة (Destination) بتنسيق مضغوط. بينما تكون النفقات العامة لصفحة blockfile كبيرة، يتم تخزين الوجهات في تنسيق ثنائي بدلاً من Base 64 كما في تنسيق hosts.txt. بالإضافة إلى ذلك، يوفر blockfile إمكانية تخزين البيانات الوصفية التعسفية (مثل تاريخ الإضافة والمصدر والتعليقات) لكل إدخال. قد يتم استخدام البيانات الوصفية في المستقبل لتوفير ميزات متقدمة لدفتر العناوين. متطلبات تخزين blockfile تمثل زيادة متواضعة مقارنة بتنسيق hosts.txt، ويوفر blockfile انخفاضاً يبلغ حوالي 10 أضعاف في أوقات البحث.

blockfile هو ببساطة تخزين على القرص لخرائط مرتبة متعددة (أزواج key-value)، مُطبق كـ skiplists. تم تبني تنسيق blockfile من قاعدة بيانات Metanotion Blockfile Database METANOTION . أولاً سنحدد تنسيق الملف، ثم استخدام هذا التنسيق بواسطة BlockfileNamingService.

تنسيق ملف الكتل (Blockfile Format)

تم تعديل مواصفات blockfile الأصلية لإضافة أرقام سحرية لكل صفحة. الملف منظم في صفحات بحجم 1024 بايت. الصفحات مرقمة بدءاً من 1. الـ “superblock” دائماً في الصفحة 1، أي بدءاً من البايت 0 في الملف. قائمة metaindex skiplist دائماً في الصفحة 2، أي بدءاً من البايت 1024 في الملف.

جميع قيم الأعداد الصحيحة من 2 بايت غير موقعة. جميع قيم الأعداد الصحيحة من 4 بايت (أرقام الصفحات) موقعة والقيم السالبة غير مسموحة. جميع قيم الأعداد الصحيحة مخزنة بترتيب بايتات الشبكة (big endian).

قاعدة البيانات مصممة ليتم فتحها والوصول إليها بواسطة خيط واحد فقط. يوفر BlockfileNamingService المزامنة.

تنسيق الكتلة الفائقة

ByteContentsDescription
0-5Magic number0x3141de493250 ("1A" 0xde "I2P")
6Major version0x01
7Minor version0x02
8-15File lengthTotal length in bytes
16-19First free list page
20-21Mounted flag0x01 = yes
22-23Span sizeMax number of key/value pairs per span (16 for hostsdb). Used for new skip lists.
24-27Page sizeAs of version 1.2. Prior to 1.2, 1024 is assumed.
28-1023unused
### تنسيق صفحة كتلة قائمة التخطي
ByteContentsDescription
0-7Magic number0x536b69704c697374 "SkipList"
8-11First span page
12-15First level page
16-19SizeTotal number of keys - may only be valid at startup
20-23SpansTotal number of spans - may only be valid at startup
24-27LevelsTotal number of levels - may only be valid at startup
28-29Span sizeAs of version 1.2. Max number of key/value pairs per span. Prior to that, specified for all skiplists in the superblock. Used for new spans in this skip list.
30-1023unused
### تنسيق صفحة كتلة تخطي المستوى

جميع المستويات لها مدى. ليس جميع المديات لها مستويات.

ByteContentsDescription
0-7Magic number0x42534c6576656c73 "BSLevels"
8-9Max height
10-11Current height
12-15Span page
16-Next level pages'current height' entries, 4 bytes each, lowest first
remainingunused
### تخطي تنسيق صفحة كتلة النطاق

هياكل المفتاح/القيمة مرتبة حسب المفتاح داخل كل نطاق وعبر جميع النطاقات. هياكل المفتاح/القيمة مرتبة حسب المفتاح داخل كل نطاق. النطاقات غير النطاق الأول قد لا تكون فارغة.

ByteContentsDescription
0-3Magic number0x5370616e "Span"
4-7First continuation pageor 0
8-11Previous span pageor 0
12-15Next span pageor 0
16-17Max keys16 for hostsdb
18-19SizeCurrent number of keys
20-1023key/value structures
### تنسيق صفحة كتلة استمرار المدى
ByteContentsDescription
0-3Magic number0x434f4e54 "CONT"
4-7Next continuation pageor 0
8-1023key/value structures
### تنسيق هيكل المفتاح/القيمة

يجب ألا تتوزع أطوال المفاتيح والقيم عبر الصفحات، أي أن جميع البايتات الأربعة يجب أن تكون في نفس الصفحة. إذا لم يكن هناك مساحة كافية، فإن آخر 1-3 بايتات من الصفحة تبقى غير مستخدمة وستكون الأطوال عند الإزاحة 8 في صفحة المتابعة. يمكن تقسيم بيانات المفاتيح والقيم عبر الصفحات. الحد الأقصى لأطوال المفاتيح والقيم هو 65535 بايت.

ByteContents
0-1key length in bytes
2-3value length in bytes
4-key data
value data
### تنسيق صفحة كتلة القائمة الحرة
ByteContentsDescription
0-7Magic number0x2366724c69737423 "#frList#"
8-11Next free list blockor 0 if none
12-15Number of valid free pagesin this block (0 - 252)
16-1023Free pages4 bytes each, only the first (valid number) are valid
### تنسيق كتلة الصفحة الحرة
ByteContentsDescription
0-7Magic number0x7e2146524545217e "~!FREE!~"
8-1023unused
الفهرس الفوقي (الموجود في الصفحة 2) هو تخطيط لسلاسل US-ASCII إلى أعداد صحيحة من 4 بايت. المفتاح هو اسم قائمة التخطي والقيمة هي فهرس الصفحة لقائمة التخطي.

جداول خدمة تسمية ملفات الكتل

الجداول التي تم إنشاؤها واستخدامها بواسطة BlockfileNamingService هي كما يلي. العدد الأقصى للإدخالات لكل span هو 16.

قائمة تخطي الخصائص

%%__INFO__%% هو skiplist قاعدة البيانات الرئيسية مع إدخالات مفتاح/قيمة String/Properties التي تحتوي على إدخال واحد فقط:

info - خصائص (خريطة نص UTF-8/نص)، مُسلسلة كـ Mapping :

  • version - “4”
  • created - Java long time (ms)
  • upgraded - Java long time (ms) (اعتباراً من إصدار قاعدة البيانات 2)
  • lists - قائمة مفصولة بفواصل من قواعد بيانات المضيف، يتم البحث فيها بالترتيب للاستعلامات. دائماً تقريباً “privatehosts.txt,userhosts.txt,hosts.txt”.
  • listversion_* - إصدار كل قاعدة بيانات في القوائم، على سبيل المثال: listversion_hosts.txt=4. يُستخدم لتحديد الترقية الجزئية أو المجهضة للقوائم الفردية. (اعتباراً من إصدار قاعدة البيانات 4)

قائمة التخطي للبحث العكسي

%%__REVERSE__%% هو skiplist البحث العكسي مع مدخلات مفتاح/قيمة من نوع Integer/Properties (اعتباراً من إصدار قاعدة البيانات 2):

  • مفاتيح skiplist هي أعداد صحيحة من 4 بايت، وهي البايتات الأربعة الأولى من hash الخاص بـ Destination .
  • قيم skiplist هي كل واحدة منها Properties (خريطة String/String بتشفير UTF-8) مسلسلة كـ Mapping
    • قد توجد إدخالات متعددة في الخصائص، كل واحدة هي تخطيط عكسي، حيث أنه قد يكون هناك أكثر من اسم مضيف واحد لـ destination معين، أو قد تحدث تضاربات مع نفس البايتات الأربعة الأولى من الـ hash.
    • كل مفتاح خاصية هو اسم مضيف.
    • كل قيمة خاصية هي سلسلة نصية فارغة.

قوائم التخطي لملفات hosts.txt و userhosts.txt و privatehosts.txt

لكل قاعدة بيانات مضيف، هناك skiplist تحتوي على المضيفين لتلك قاعدة البيانات. لاحظ أن تنسيق الإصدار 4 يدعم عدة Destinations لكل اسم مضيف. تم تقديم هذا التنسيق في إصدار I2P 0.9.26. يتم ترحيل قواعد بيانات الإصدار 3 تلقائياً إلى الإصدار 4.

المفاتيح/القيم في هذه القوائم المتخطية هي كما يلي:

key - نص UTF-8 (اسم المضيف)

value - - إصدار قاعدة البيانات 4: DestEntry، وهو رقم من بايت واحد لأزواج Properties/Destination التي تتبع. ذلك العدد من الأزواج من: Properties (خريطة UTF-8 String/String) متسلسلة كـ Mapping متبوعة بـ Destination ثنائي (متسلسل كالمعتاد). - إصدار قاعدة البيانات 3: DestEntry، وهو Properties (خريطة UTF-8 String/String) متسلسلة كـ Mapping متبوعة بـ Destination ثنائي (متسلسل كالمعتاد).

خصائص DestEntry تحتوي عادة على:

  • “a” - الوقت المُضاف (Java long time in ms)
  • “m” - الوقت المُعدّل آخر مرة (Java long time in ms)
  • “notes” - تعليقات يوفرها المستخدم
  • “s” - المصدر الأصلي للإدخال (عادة اسم ملف أو رابط اشتراك)
  • “v” - إذا تم التحقق من توقيع الإدخال، “true” أو “false”

يتم تخزين مفاتيح أسماء المضيفين بأحرف صغيرة وتنتهي دائماً بـ “.i2p”.

المراجع

Was this page helpful?