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

Level DB --- 写流程架构

Level DB是高效的k-v数据库,接受多线程写,既要保证多线程写临界区安全,同时又要保证写流程的尽量高效性。

写入数据

Level DB 用一个deque用来衔接生产-消费模型。一个新的kv写入请求,会先将kv封装成Writer结构体。插入之前要先获得mutex,独占deque,从尾部插入*writer,插入后,随即信号量进入wait状态,等待被唤醒处理(这个时候线程状态被挂起)。

                                                         图1. 写入数据

数据处理

当进入数据处理流程中,这时deque 头部的*writer信号量被唤醒,这个时候获得mutex,并且独占deque。这个时候遍历deque,计算批量处理数据result,如图2所示。

                                                      图2,准备批量处理

当待处理的数据量达到阈值,开始进行数据处理,并释放mutex。这个时候等待插入数据的线程又可以获得mutex,这个线程获得deque,可以再次插入数据。这个时候两边是并行的,提高系统的计算效率,如图3所示。

                                                            图3. 计算批量处理

计算完成批量处理后,释放已经在deque中处理好的kv对,如图4所示。

                                                             图4. 完成批量处理

上面的流程是持续反复的,不断进行用户端kv的写入。

http://www.lryc.cn/news/545281.html

相关文章:

  • 【中等】707.设计链表
  • 深入理解Reactor Flux的生成方法
  • next实现原理
  • LeetCode 热题 100 53. 最大子数组和
  • DeepSeek 与大数据治理:AI 赋能数据管理的未来
  • 【时时三省】(C语言基础)浮点型数据
  • 【大模型】Ollama本地部署DeepSeek大模型:打造专属AI助手
  • 2025.3.2机器学习笔记:PINN文献阅读
  • 数据集笔记:新加坡 地铁(MRT)和轻轨(LRT)票价
  • 如何修改安全帽/反光衣检测AI边缘计算智能分析网关V4的IP地址?
  • Java 大视界 -- 基于 Java 的大数据分布式缓存一致性维护策略解析(109)
  • SyntaxError: positional argument follows keyword argument
  • Ruby基础
  • JMeter 断言最佳实践
  • 【Android】类加载器热修复-随记(二)
  • 从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(八) 聊天框用户列表
  • Linux网络 TCP全连接队列与tcpdump抓包
  • 水滴tabbar canvas实现思路
  • 鸿蒙通过用户首选项实现数据持久化
  • 在Ubuntu中,某个文件的右下角有一把锁的标志是什么意思?
  • 7.1.1 计算机网络的组成
  • 使用 Docker 部署 RabbitMQ 的详细指南
  • 岛屿的数量(BFS)
  • 线上JVM OOM问题,如何排查和解决?
  • Linux的缓存I/O和无缓存IO
  • 【弹性计算】弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
  • 【MySQL】(2) 库的操作
  • Hyper-V -docker-vmware 三者的关系
  • IP-----双重发布
  • 【新立电子】探索AI眼镜背后的黑科技,FPC如何赋能实时翻译与语音识别,点击了解未来沟通的新方式!