当前位置: 首页 > article >正文

Level DB --- SkipList

class SkipList

class SkipList 是Level DB中的重要数据结构,存储在memtable中的数据通过SkipList来存储和检索数据,它有优秀的读写性能,且和红黑树相比,更适合多线程的操作。

SkipList 

SkipList还是一个比较简单的数据结构,它首先是一个List(链表),读写操作也和List相差不大。SkipList的复杂之处是每一个Node有一个高度的信息,带有这个高度信息的Node,可以看成一个Node Array [Height],其中的Height小于或等于SkipList 的 Max Height,如图1所示。

                                                           图1. Max Height = 4 's SkipList

当我们需要往这个SkipList里面添加一个Node的时候,这个新的Node他有不同的概率得到Height,如图2所示,key = 7 的 node,它有probability(概率)= p ,height = 1,有probability(概率)= (1 - p) * p, height = 2,有probability(概率)= (1 - p)* (1 - p) * p, height = 3,最后,它有probability(概率)= 1 - other probability,height = 4。

图2. Max Height = 4 's SkipList insert key = 7

Level DB 中的实现

Level DB中实现了class SkipList,下面来梳理总结一下这个SkipList的一些特点。

原子操作

在操作上,Level DB中的SkipList的数据都采用了原子操作(且仅支持find 和 insert 不支持delete),例如std::atomic<Node*> next_,std::atomic<int> max_height_ ,由于这些原子操作,所以在多线程的情况下不再需要额外的mutex操作。

memory order

对于原子操作,memory order 是在多核处理器上,每一个CPU看到的不同的上下文的表征。在SkipList里面对于单纯的原子互斥操作使用了std::memory_order_relaxed。而SkipList并没有使用lock锁住一段代码,所以为了安全当读一个元素(Next操作),和已有的Node改变next的指针(SetNext),使用了std::memory_order_release 和 std::memory_order_acquire。也就是在读的时候要考虑到写的前序上下文都已经完成。


http://www.kler.cn/a/407509.html

相关文章:

  • 表格数据处理中大语言模型的微调优化策略研究
  • 如何搭建C++环境--1.下载安装并调试Microsoft Visual Studio Previerw(Windows)
  • MySQL 中的锁
  • 【UE5】在材质中计算模型在屏幕上的比例
  • OceanBase 驱动类获取数据库精确类型 “Oracle|MySQL”
  • Flink-Source的使用
  • Qt 实现网络数据报文大小端数据的收发
  • ssm169基于Java的学习交流论坛+vue(论文+源码)_kaic
  • #渗透测试#红蓝攻防#HW#SRC漏洞挖掘01之静态页面渗透
  • 6G通信技术对比5G有哪些不同?
  • DAMODEL丹摩|丹摩智算平台:开启Llama3.1探索之旅
  • 网络爬虫——常见问题与调试技巧
  • 多目标粒子群优化(Multi-Objective Particle Swarm Optimization, MOPSO)算法
  • element-plus入门教程:安装
  • Cmakelist.txt之win-odbc-mysql
  • 如何通过OpenSSL基于根证书来签署客户端与服务器证书?
  • 【unity小技巧】Unity 和 C# 中使用多种方式进行不同的变量类型转换
  • 【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)
  • 动态规划算法--01背包问题详细讲解步骤
  • Oracle热备过程中对数据库崩溃的处理方法
  • Python爬虫能处理动态加载的内容吗?
  • C语言的文件函数
  • 如何在 Elasticsearch 中配置 SSL / TLS ?
  • win10局域网加密共享设置
  • 数据结构之——红黑树
  • Hive基础笔记