BT9G LABS / DHT 詳解 #19
BitTorrent検索インデックスを作る:DHTからMetadata、Elasticsearchまで
分散 DHT observation を検証済み・検索可能な Metadata document に変換する end-to-end アーキテクチャ。
BT9G Labs / DHT Deep Dive #19. Discovery、canonical storage、enrichment、search index を分離し、検索層を source of truth にしない設計を解説します。
クイックサマリー
- テーマ: BitTorrent検索インデックスを作る:DHTからMetadata、Elasticsearchまで
- 主要キーワード: BitTorrent search engine, Elasticsearch, DHT pipeline, Metadata indexing, search architecture
- 対象読者: バックエンドエンジニア、プロトコル研究者、検索エンジニア、BitTorrent 実装者
- 目的: DHT と BitTorrent の仕組みを、実際のクローラ・インデックス・検索基盤の設計判断に使える精度で説明すること。
システム構成
Search indexはValidationの後ろに置く
DHT で得られるのは identity と network signal です。検索に使う file name や directory は検証済み Metadata から生成します。未検証データを直接 Elasticsearch へ入れると、悪い Peer や壊れた response が検索結果を汚染します。
理想的な流れは discovery → hash ledger → Peer candidates → Metadata acquisition → identity validation → canonical store → enrichment → search index です。
Canonical StoreとSearch Storeを分ける
Canonical layer は検証済み Metadata と長期状態を保持し、Elasticsearch は tokenization、fuzzy search、facet、ranking 用の派生表現にします。mapping や analyzer を変更したら canonical data から再構築できるようにします。
ES を唯一の真実にしないことが運用上重要です。
EnrichmentとRanking
Language detection、category、file type、normalized title、safety label は再計算可能な derived fields であり、InfoHash や original file path を変更してはいけません。Ranking は text relevance、freshness、validated metadata quality、recent activity など複数 signal を組み合わせます。
測定できない人気度を正確な数字のように見せないことも重要です。
実装スケッチ
{
"infohash": "...",
"title": "Example Release",
"total_size": 734003200,
"file_count": 12,
"extensions": ["mkv", "srt"],
"first_seen": "...",
"last_seen": "...",
"metadata_verified": true,
"activity_score": 0.73
}
BT9G Labs エンジニアリングノート
BT9G のようなインデックス基盤では、イベント件数そのものより、コンテンツ ID、短命なネットワーク観測、取得状態、検索用ドキュメントを分離することが重要です。DHT や Peer から得た値には取得元と時刻を持たせ、discovery、接続、handshake、拡張対応、Metadata 取得、検証、保存、検索反映を段階別に計測すると、実際のボトルネックを特定しやすくなります。
よくある誤解
- 未検証 network data を直接検索 index に入れる。
- Elasticsearch を唯一の canonical DB にする。
- enrichment が content identity を変更する。
- 単一 activity counter だけで全ランキングを決める。
関連する BT9G Labs 記事
- 数十億InfoHashをどうDedupするか:無駄なMetadata作業を防ぐ多層設計
- 失敗したInfoHashを残すべき理由:長期Retry Scheduler設計
- BT9GがBitTorrent Metadataを大規模索引するための参照DHTアーキテクチャ
参考資料
- BEP 5 - DHT Protocol
- BEP 9 - Extension for Peers to Send Metadata Files
- BEP 10 - Extension Protocol
- BEP 48 - Tracker Protocol Extension: Scrape
次の記事: BT9GがBitTorrent Metadataを大規模索引するための参照DHTアーキテクチャ →
本記事は公開 BitTorrent プロトコルの挙動を技術・研究目的で解説するものであり、観測されたすべての Swarm が利用可能、正当、または再配布を許可されていることを意味しません。