2015-01-20 3 views
2

각 노드가 3 개의 주문 상태 중 하나를 가질 수 있다면 후행 주소가 저장된 값에 추가되어 데이터 항목이 연결되는 DHT를 구현하고 있습니다 : 빈 -> 데이터 -> 데이터 및 후임 주소가 모두 동료가 일관되고 올바른 주문을 얻는가? 아니면 여기에 영구적 인 포킹 가능성이 있습니까?DHT (kademlia)는 값의 체인을 안정적으로 저장할 수 있습니까?

답변

3

원칙적으로 노드의 일부 제한 사항 및 지원이 가능합니다.

여러 버전을 처리하려면 가치있는 버전이 필요합니다. 충돌없이 안정적으로 증가 시키려면 단일 발신자가 필요합니다. 단일 발신자를 확인하려면 데이터에 서명해야합니다. 서명 된 데이터는 대개 공개 키에서 파생 된 키 아래에 저장됩니다. 따라서 검색 노드는 공개 키를 어떤 식 으로든 획득해야하거나 사람이 읽을 수있는 키를 공개 키로 해석하기 위해 다른 간접 참조가 필요합니다.

DHT.put("keyword", Pubkey) 
DHT.get("keyword") => List<Pubkey> 

DHT.put(Pubkey, Tuple<Value, ForwardPointer, VersionNumber>, Pubkey, Signature) 
DHT.get(Pubkey) => List<Tuple<Tuple<Value, ForwardPointer, VersionNumber>, Signature>> 

첫 번째 인수는 항상 해시됩니다. 또한 API는 비대칭이며 목록을 반환하고 대상 노드에 대한 추가 매개 변수를 추가하여 처리 및 확인합니다.

e.e. 저장 노드가 "멍청한 키 - 값 저장소"가 아닌 조금 더 많은 작업을 수행해야합니다.

편집 : 특정 경우에 버전 번호를 건너 뛰고 순방향 포인터의 부재/부재를 암시 적 버전 증가로 사용할 수 있습니다 .


원칙적으로 DHT 위에 모든 데이터 구조를 구현할 수 있습니다. 저장 및 다른 키에 대한 포인터 만 있으면됩니다. 예 : 목록은 순방향 포인터 또는 불변 노드 + 하나의 변경 가능한 헤드 포인터를 변경하는 변경 가능한 노드로 구현 될 수 있습니다.

빠른 탐색을 위해 정렬 된 트리 또는 건너 뛰기 목록을 고려해 볼 가치가 있습니다.