[Leveldb 소스 코드] 핵심 구조의 memtable

MemTable의 핵심 데이터 구조로 정렬 된 Map을 선택합니다.

leveldb의 핵심 구조는 MemTable입니다. MemTable에 저장된 키가 정렬되어 있습니다.
여기에 사진 설명 삽입
키 정렬 문제를 해결하기 위해서는 정렬 된 java 컬렉션을 해결해야합니다. 그 전에 먼저 java 컬렉션을 찾아야합니다.
여기에 사진 설명 삽입
그림을 그리지 않기 위해이 블로그에서 그림을 인용 했는데 실선 테두리는 구현 클래스, 폴리 라인 테두리는 추상 클래스, 점선 테두리는 인터페이스입니다. Collection 인터페이스는 컬렉션 클래스의 하위 인터페이스입니다. Set 및 List는 Collection 인터페이스를 상속합니다. 맵과 Collection 인터페이스는 관련이 없지만 모두 컬렉션 클래스의 일부입니다. 주요 구현 클래스는 다음과 같습니다.

  • 지도
    • HashMap
    • 해시 테이블
    • ConcurrentHashMap
    • LinkedHashMap
    • TreeMap
  • 세트
    • TreeSet
    • HashSet
    • LinkedHashSet
  • 명부
    • 벡터
    • 스택
    • ArrayList
    • LinkedList

그중 정렬 된 컬렉션은 TreeMap, LinkedHashMap, TreeSet, Vector, Stack, ArrayList, LinkedList입니다. 또한 redis를 학습 할 때 빠르게 쿼리하고 쓰고 삭제하는 데이터 구조를 점프 테이블이라고합니다. leveldb는 키-값 데이터를 저장하고자하기 때문에 TreeSet, Vector, Stack, ArrayList, LinkedList를 제외하고 TreeMap, LinkedHashMap, SkipList가 남습니다. 그러나 LinkedHashMap은 사전 순이 아닌 삽입과 연산의 순서로 정렬되어 있으므로 TreeMap과 SkipList를 선택할 수 있습니다. 다중 스레드 구현 버전은 Collections.synchronizedSortedMap (new TreeMap ()) 및 ConcurrentSkipListMap입니다.
연구로서 LinkedHashMap , SkipList , TreeMap , ConcurrentSkipListMap 의 원칙 을 배워야 합니다.

동시성이 높은 프로그램의 경우 더 높은 동시성을 제공 할 수있는 ConcurrentSkipListMap을 사용해야합니다. 이 기사 에서 언급 했듯이 여기에서는 쿼리, 쓰기 및 삭제의 효율성을 기반으로 키 순서 문제에 대한 솔루션으로 skip table을 선택합니다.

추천

출처blog.csdn.net/u010659877/article/details/108713586