【leveldb源码】核心结构之memtable

选择会排序的Map作为MemTable的核心数据结构

leveldb的核心结构是MemTable,MemTable中存储的key是有序的
在这里插入图片描述
为了解决key有序的问题,我们需要解决摸底一遍java的有序集合,在此之前,我们首先需要摸底一遍java的集合。
在这里插入图片描述
这里为了不用画图,引用本篇博客中的图图,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口。Collection接口是集合类的跟接口,set和list继承了Collection接口,map和Collection接口没有关系,但是都属于集合类的一部分。其中主要的实现类有:

  • Map
    • HashMap
    • Hashtable
    • ConcurrentHashMap
    • LinkedHashMap
    • TreeMap
  • Set
    • TreeSet
    • HashSet
    • LinkedHashSet
  • List
    • Vector
    • Stack
    • ArrayList
    • LinkedList

其中,有序的集合有:TreeMap、LinkedHashMap、TreeSet、Vector、Stack、ArrayList、LinkedList,此外在学习redis的时候,我们还知道一个查询和写入删除很快的数据结构叫跳表。因为leveldb要存储的是key-value的数据,因此我们排除TreeSet、Vector、Stack、ArrayList、LinkedList,还剩下TreeMap、LinkedHashMap、SkipList。但是LinkedHashMap是按照插入和操作顺序来排序的,不是按照字典序,因此,我们可以选择的是TreeMap和SkipList。他们的多线程实现版本分别为Collections.synchronizedSortedMap(new TreeMap())和ConcurrentSkipListMap。
作为学习,我们还是应该学习下LinkedHashMapSkipListTreeMapConcurrentSkipListMap的原理。

对于高并发程序,应当使用ConcurrentSkipListMap,能够提供更高的并发度。这篇文章如是说,这里我们根据查询、写入、删除的效率,选择跳表作为我们的解决key有序问题的方案。

猜你喜欢

转载自blog.csdn.net/u010659877/article/details/108713586