Tento překlad byl vytvořen pomocí strojového učení a nemusí být 100% přesný. Zobrazit anglickou verzi

Specifikace Blockfile a databáze hostů

Specifikace formátu souboru I2P blockfile a tabulek v hostsdb.blockfile používaných službou Blockfile Naming Service

Přehled

Tento dokument specifikuje formát souboru I2P blockfile a tabulky v hostsdb.blockfile používané službou Blockfile Naming Service NAMING .

Blockfile poskytuje rychlé vyhledávání Destination v kompaktním formátu. Zatímco režie stránky blockfile je značná, destinace jsou uloženy v binárním formátu místo ve formátu Base 64 jako v hosts.txt formátu. Kromě toho blockfile poskytuje možnost ukládání libovolných metadat (jako je datum přidání, zdroj a komentáře) pro každý záznam. Metadata mohou být v budoucnu využita k poskytování pokročilých funkcí adresáře. Požadavky na úložiště blockfile představují mírné navýšení oproti hosts.txt formátu a blockfile poskytuje přibližně 10násobné snížení času vyhledávání.

Blockfile je jednoduše diskové úložiště více seřazených map (párů klíč-hodnota), implementované jako skiplists. Formát blockfile je přijat z Metanotion Blockfile Database METANOTION . Nejprve definujeme formát souboru, poté použití tohoto formátu službou BlockfileNamingService.

Formát blokových souborů

Původní specifikace blockfile byla upravena tak, aby se do každé stránky přidala magická čísla. Soubor je strukturován do stránek o velikosti 1024 bajtů. Stránky jsou číslovány od 1. “Superblock” je vždy na stránce 1, tj. začíná na bajtu 0 v souboru. Skiplist metaindexu je vždy na stránce 2, tj. začíná na bajtu 1024 v souboru.

Všechny 2-bajtové celočíselné hodnoty jsou bez znaménka. Všechny 4-bajtové celočíselné hodnoty (čísla stránek) jsou se znaménkem a záporné hodnoty jsou neplatné. Všechny celočíselné hodnoty jsou uloženy v síťovém pořadí bajtů (big endian).

Databáze je navržena tak, aby byla otevřena a přístupná pouze jediným vláknem. BlockfileNamingService poskytuje synchronizaci.

Formát superbloku

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
### Formát stránky bloku skip listu
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
### Formát stránky bloku úrovně přeskočení

Všechny úrovně mají rozsah. Ne všechny rozsahy mají úrovně.

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
### Přeskočit formát stránky bloku rozsahu

Struktury klíč/hodnota jsou seřazeny podle klíče v rámci každého rozpětí a napříč všemi rozpětími. Struktury klíč/hodnota jsou seřazeny podle klíče v rámci každého rozpětí. Rozpětí jiná než první rozpětí nesmí být prázdná.

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
### Formát stránky bloku pokračování rozpětí
ByteContentsDescription
0-3Magic number0x434f4e54 "CONT"
4-7Next continuation pageor 0
8-1023key/value structures
### Formát struktury klíč/hodnota

Délky klíčů a hodnot nesmí být rozděleny napříč stránkami, tj. všechny 4 bajty musí být na stejné stránce. Pokud není dostatek místa, posledních 1-3 bajtů stránky zůstane nevyužitých a délky budou na offsetu 8 v pokračující stránce. Data klíčů a hodnot mohou být rozdělena napříč stránkami. Maximální délka klíčů a hodnot je 65535 bajtů.

ByteContents
0-1key length in bytes
2-3value length in bytes
4-key data
value data
### Formát stránky bloku volného seznamu
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
### Formát bloku volných stránek
ByteContentsDescription
0-7Magic number0x7e2146524545217e "~!FREE!~"
8-1023unused
Metaindex (umístěný na stránce 2) je mapování US-ASCII řetězců na 4-bajtová celá čísla. Klíč je název skiplistu a hodnota je index stránky skiplistu.

Tabulky služby pojmenování Blockfile

Tabulky vytvořené a používané službou BlockfileNamingService jsou následující. Maximální počet záznamů na span je 16.

Seznam přeskočených vlastností

%%__INFO__%% je hlavní databáze skiplist se String/Properties klíč/hodnota záznamy obsahující pouze jeden záznam:

info - Properties (UTF-8 String/String Map), serializované jako Mapping :

  • version - “4”
  • created - Java long time (ms)
  • upgraded - Java long time (ms) (od verze databáze 2)
  • lists - Seznam databází hostitelů oddělený čárkami, který se prohledává v pořadí pro vyhledávání. Téměř vždy “privatehosts.txt,userhosts.txt,hosts.txt”.
  • listversion_* - Verze každé databáze v seznamech, například: listversion_hosts.txt=4. Používá se k identifikaci částečného nebo přerušeného upgradu jednotlivých seznamů. (od verze databáze 4)

Skiplist pro zpětné vyhledávání

%%__REVERSE__%% je skiplist pro zpětné vyhledávání s klíč/hodnota záznamy typu Integer/Properties (od verze databáze 2):

  • Klíče skiplist jsou 4-bajtové celá čísla, první 4 bajty hashe Destination .
  • Hodnoty skiplist jsou každá Properties (UTF-8 String/String Mapa) serializované jako Mapping
    • V properties může být více záznamů, každý je reverzní mapování, protože pro danou destination může být více než jeden hostname, nebo by mohlo dojít ke kolizím se stejnými prvními 4 bajty hashe.
    • Každý klíč property je hostname.
    • Každá hodnota property je prázdný řetězec.

Seznamy přeskočených hosts.txt, userhosts.txt a privatehosts.txt

Pro každou databázi hostitelů existuje skiplist obsahující hostitele pro danou databázi. Poznamenejte, že formát verze 4 podporuje více Destinations na jeden název hostitele. Tento formát byl představen v I2P vydání 0.9.26. Databáze verze 3 jsou automaticky migrovány na verzi 4.

Klíče/hodnoty v těchto skiplistech jsou následující:

key - řetězec UTF-8 (název hostitele)

value - - Databázová verze 4: DestEntry, což je jednobytové číslo párů Properties/Destination, které následují. Tolik párů: Properties (UTF-8 String/String Mapa) serializovaná jako Mapping následovaná binárním Destination (serializováno obvyklým způsobem). - Databázová verze 3: DestEntry, což je Properties (UTF-8 String/String Mapa) serializovaná jako Mapping následovaná binárním Destination (serializováno obvyklým způsobem).

Vlastnosti DestEntry obvykle obsahují:

  • “a” - Čas přidání (Java long time v ms)
  • “m” - Čas poslední modifikace (Java long time v ms)
  • “notes” - Uživatelem zadané komentáře
  • “s” - Původní zdroj záznamu (typicky název souboru nebo URL předplatného)
  • “v” - Pokud byl podpis záznamu ověřen, “true” nebo “false”

Klíče názvů hostitelů jsou uloženy malými písmeny a vždy končí na “.i2p”.

Reference

Was this page helpful?