Open jhpark816 opened 3 years ago
@jhpark816 skip list로 구현하기 전 고려해야할 점이 몇 가지 있습니다.
skip list의 노드 중 p^i 개는 i개의 포인터를 가지게 되는데, 삽입되는 노드의 포인터 개수를 결정하는 p라는 확률분포를 무엇으로 지정해야하는가 하는 논의점이 있습니다. 일반적으로는, p = 1/2일 때 속도가 가장 빠르지만, 속도와 메모리 효율을 고려했을 때 p = 1/4 로 하는 경우도 있습니다. child prefix개수의 경우, 제 생각에는 매우 많아질 것 같지는 않아서 p = 1/2 로 설정해도 괜찮을 것 같습니다.
1과 관련된 문제점인데요,
static int _rand_level()
{
float r = (float)rand()/RAND_MAX;
int lvl = 0;
while (r < P && lvl < MAXLVL)
{
lvl++;
r = (float)rand()/RAND_MAX;
}
return lvl;
};
라는 스킵리스트 노드의 포인터 개수를 결정하는 함수가 있다고 가정할 때, rand()를 사용할 때, 시드값 설정 함수 인자로 무엇을 주어야하는지 결정해야될 것 같습니다. 일반적으로 시드값으로 시간값을 주는 데, 시드값으로 시간값을 줘도 상관이 없을까요?
skip list의SKIPLIST_MAX_LEVEL 을 정해야 합니다. 어느 정도 크기가 적당할까요?
저도 b+tree 컬렉션에서 sorted set을 구현하는데 #480 skip list로 구현하려고 하고 있습니다. 혹시 이번 이슈와 공통된 내용이 있다면 같이 논의해도 될까요?
@HarryKim93 @dongwooklee96 오늘 바쁜 일들이 많아 확인하지 못했는 데, 조만간 확인하고 의견을 달도록 하겠습니다.
@HarryKim93 의견입니다.
@dongwooklee96 계속 신경 쓰고 있었군요. sorted set에 관해서는 현 시점에서 다시 검토해 보고 의견을 드리겠습니다. 혹시 많이 진행된 상태인가요 ?
@jhpark816 아니요 많이 진행하지는 않았습니다. 이제 막 분석하는 단계입니다.
@dongwooklee96 다행입니다. sorted set에 관해 이슈 https://github.com/naver/arcus-memcached/issues/480 에 의견을 남겨 두었으므로 확인해 주기 바랍니다.
child prefixes 관리 구조를 개선한다.
기존 구조
개선 구조