1

각각 관련된 데이터가있는 500k 개의 키를 저장하기위한 데이터 구조가 필요합니다. 150 개의 스레드가 동시에 실행되어 & 키에 액세스합니다. 하루에 한 번 조작 작업이있을 수 있으므로 데이터 구조를 업데이트해야합니다. 키가 삭제되거나 새 키가 추가되거나 데이터가 변경된다고합니다. 데이터 구조 업데이트가 진행 중일 때 150 개의 스레드가 액세스하지 못하도록 차단할 수 없습니다. 향후 키 수가 늘어날 수 있기 때문에 memcache 나 redis와 같은 현재 해시 구현을 사용하고 싶지 않습니다. & 더 빠른 조회를 위해 메모리 내 액세스를 원하십니까? 대신 C/C++에서 일부 데이터 구조 구현을 선호합니다.덜 중요한 키 값 데이터 구조 잠금

+0

간단한 방법은 데이터베이스에 키를 저장하고 필요할 때마다 키를 읽는 것입니다. – Ali786

+3

업데이트가 하루에 한 번만 수행되는 경우 복사 - 수정 - 교체 (스왑)하지 않으시겠습니까? 즉, 불변으로 만드는 것입니다. – 9dan

답변

1

Userspace RCU 라이브러리에는 RCU를 사용하여 구현 된 일련의 동시 데이터 구조가 포함되어 있습니다. 그 중에는 기사를 기반으로 한 잠금 해제 크기 조정 가능 해시 테이블 중

  • Ori Shalev 및 Nir Shavit이 있습니다. 분할 순서 목록 : 잠금 해제 확장 가능 해시 테이블. J. ACM 53, 3 (2006 년 5 월), 379-405.
  • Michael, M.M 고성능 동적 잠금없는 해시 테이블 및 목록 기반 집합. 병렬 알고리즘 및 아키텍처에 대한 심포지엄, ACM Press, (2002), 73-82에서 14 차 연례 ACM 심포지엄. 이 MVCC를 사용하기 때문에

자세한 내용은이 http://symas.com/mdb/을 처리 할 수 ​​http://git.lttng.org/?p=userspace-rcu.git;a=blob;f=rculfhash.c

1

LMDB에서 구현 주석을 볼 수, 작가는 독자를 차단하지 않습니다. 언제든지 업데이트 할 수 있으며 150 개의 리더 스레드가 정상적으로 실행됩니다. LMDB 읽기는 블로킹 작업을 전혀 수행하지 않으며 임의의 수의 CPU에서 완벽하게 선형 적으로 확장됩니다.

(면책 조항 : 나는 LMDB의 저자)