यह अनुवाद मशीन लर्निंग का उपयोग करके उत्पन्न किया गया था और 100% सटीक नहीं हो सकता है। अंग्रेज़ी संस्करण देखें

Blockfile और Hosts Database विशिष्टता

I2P blockfile फ़ाइल फॉर्मेट और Blockfile Naming Service द्वारा उपयोग की जाने वाली hostsdb.blockfile में तालिकाओं का विनिर्देश

अवलोकन

यह दस्तावेज़ I2P blockfile फ़ाइल प्रारूप और Blockfile Naming Service NAMING द्वारा उपयोग की जाने वाली hostsdb.blockfile में टेबलों को निर्दिष्ट करता है।

blockfile एक कॉम्पैक्ट फॉर्मेट में तेज़ Destination lookup प्रदान करता है। जबकि blockfile page overhead काफी है, destinations को hosts.txt फॉर्मेट की तरह Base 64 में नहीं बल्कि binary में संग्रहीत किया जाता है। इसके अलावा, blockfile प्रत्येक entry के लिए मनमाना metadata storage (जैसे कि added date, source, और comments) की सुविधा प्रदान करता है। भविष्य में metadata का उपयोग उन्नत addressbook सुविधाएं प्रदान करने के लिए किया जा सकता है। blockfile storage requirement hosts.txt फॉर्मेट की तुलना में मामूली वृद्धि है, और blockfile lookup times में लगभग 10x कमी प्रदान करता है।

एक blockfile केवल कई sorted maps (key-value pairs) का on-disk storage है, जो skiplists के रूप में implemented है। blockfile format को Metanotion Blockfile Database METANOTION से अपनाया गया है। पहले हम file format को define करेंगे, फिर BlockfileNamingService द्वारा उस format के उपयोग को समझाएंगे।

ब्लॉकफाइल प्रारूप

मूल blockfile स्पेक को प्रत्येक page में magic numbers जोड़ने के लिए संशोधित किया गया था। फ़ाइल 1024-byte pages में संरचित है। Pages की संख्या 1 से शुरू होती है। “superblock” हमेशा page 1 पर होता है, यानी फ़ाइल में byte 0 से शुरू होता है। metaindex skiplist हमेशा page 2 पर होता है, यानी फ़ाइल में byte 1024 से शुरू होता है।

सभी 2-byte integer मान unsigned हैं। सभी 4-byte integer मान (page numbers) signed हैं और negative मान अवैध हैं। सभी integer मान network byte order (big endian) में संग्रहीत किए जाते हैं।

डेटाबेस को एक सिंगल thread द्वारा खोले और एक्सेस किए जाने के लिए डिज़ाइन किया गया है। BlockfileNamingService synchronization प्रदान करती है।

Superblock प्रारूप

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
### Skip list ब्लॉक पेज प्रारूप
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
### स्किप स्तर ब्लॉक पेज फॉर्मेट

सभी स्तरों का एक span होता है। सभी spans के स्तर नहीं होते।

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
### स्पैन ब्लॉक पेज प्रारूप छोड़ें

Key/value संरचनाएं प्रत्येक span के भीतर और सभी spans में key के आधार पर क्रमबद्ध होती हैं। Key/value संरचनाएं प्रत्येक span के भीतर key के आधार पर क्रमबद्ध होती हैं। पहले span के अलावा अन्य spans खाली नहीं हो सकते।

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
### Span Continuation block पृष्ठ प्रारूप
ByteContentsDescription
0-3Magic number0x434f4e54 "CONT"
4-7Next continuation pageor 0
8-1023key/value structures
### Key/value संरचना प्रारूप

Key और value की लंबाई को pages में विभाजित नहीं किया जाना चाहिए, यानी सभी 4 bytes एक ही page पर होने चाहिए। यदि पर्याप्त स्थान नहीं है तो एक page के अंतिम 1-3 bytes अप्रयुक्त रह जाते हैं और लंबाई continuation page में offset 8 पर होगी। Key और value data को pages में विभाजित किया जा सकता है। अधिकतम key और value की लंबाई 65535 bytes है।

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
metaindex (page 2 पर स्थित) US-ASCII strings का 4-byte integers में mapping है। key skiplist का नाम है और value skiplist का page index है।

ब्लॉकफाइल नेमिंग सर्विस टेबल्स

BlockfileNamingService द्वारा बनाई और उपयोग की जाने वाली तालिकाएं निम्नलिखित हैं। प्रति span में प्रविष्टियों की अधिकतम संख्या 16 है।

Properties Skiplist

%%__INFO__%% मुख्य डेटाबेस skiplist है जिसमें String/Properties key/value entries हैं जिसमें केवल एक entry होती है:

info - एक Properties (UTF-8 String/String Map), जो एक Mapping के रूप में serialized है:

  • version - “4”
  • created - Java long time (ms)
  • upgraded - Java long time (ms) (database version 2 के रूप में)
  • lists - होस्ट डेटाबेस की अल्पविराम-विभाजित सूची, जिसमें लुकअप के लिए क्रमानुसार खोजा जाना है। लगभग हमेशा “privatehosts.txt,userhosts.txt,hosts.txt”।
  • listversion_* - lists में प्रत्येक डेटाबेस का संस्करण, उदाहरण के लिए: listversion_hosts.txt=4। व्यक्तिगत सूचियों के आंशिक या रद्द किए गए अपग्रेड की पहचान करने के लिए उपयोग किया जाता है। (database version 4 के रूप में)

रिवर्स लुकअप स्किपलिस्ट

%%__REVERSE__%% रिवर्स लुकअप skiplist है जिसमें Integer/Properties key/value entries हैं (database version 2 के अनुसार):

  • Skiplist keys 4-byte Integers हैं, Destination के hash के पहले 4 bytes।
  • Skiplist values प्रत्येक एक Properties (एक UTF-8 String/String Map) है जो Mapping के रूप में serialized है
    • Properties में कई entries हो सकती हैं, प्रत्येक एक reverse mapping है, क्योंकि किसी दिए गए destination के लिए एक से अधिक hostname हो सकते हैं, या hash के समान पहले 4 bytes के साथ collisions हो सकते हैं।
    • प्रत्येक property key एक hostname है।
    • प्रत्येक property value empty string है।

hosts.txt, userhosts.txt, और privatehosts.txt स्किपलिस्ट

प्रत्येक host database के लिए, उस database के hosts को शामिल करने वाली एक skiplist होती है। ध्यान दें कि version 4 format प्रति hostname कई Destinations का समर्थन करता है। यह format I2P release 0.9.26 में शुरू किया गया था। Version 3 databases स्वचालित रूप से version 4 में migrate हो जाते हैं।

इन skiplists में keys/values निम्नलिखित हैं:

key - एक UTF-8 स्ट्रिंग (होस्टनेम)

value - - Database version 4: एक DestEntry, जो एक एक-बाइट संख्या है Properties/Destination जोड़ों की जो आगे आने वाली हैं। उतनी संख्या में जोड़े: एक Properties (एक UTF-8 String/String Map) जो Mapping के रूप में serialized है, जिसके बाद एक binary Destination (सामान्य रूप से serialized) है। - Database version 3: एक DestEntry, जो एक Properties (एक UTF-8 String/String Map) है जो Mapping के रूप में serialized है, जिसके बाद एक binary Destination (सामान्य रूप से serialized) है।

DestEntry Properties में आमतौर पर शामिल होता है:

  • “a” - जोड़ा गया समय (Java long time ms में)
  • “m” - अंतिम बार संशोधित समय (Java long time ms में)
  • “notes” - उपयोगकर्ता द्वारा प्रदान की गई टिप्पणियां
  • “s” - एंट्री का मूल स्रोत (आमतौर पर एक फ़ाइल नाम या subscription URL)
  • “v” - यदि एंट्री के signature की पुष्टि हुई है, “true” या “false”

Hostname keys को लोअर-केस में स्टोर किया जाता है और हमेशा “.i2p” से समाप्त होते हैं।

संदर्भ

Was this page helpful?