![](https://img-blog.csdnimg.cn/0f890aaba3fd4c11814adee68d0bc738.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
levelDB解读
文章平均质量分 74
LevelDB 是一个轻量级、高性能的键值存储库,由 Google 开发并开源。它提供了持久化的键值存储,支持快速的读写操作,并具有一些高级功能,如快照、事务和可迭代的键值迭代器。
Achou.Wang
勿在浮沙筑高台
展开
-
leveldb中THREAD_ANNOTATION_ATTRIBUTE__宏的作用
宏在 LevelDB 或类似的 C++ 项目中用于指定线程安全相关的源码注解(Source Code Annotation),这些注解有助于清晰地表达程序中函数、变量、类型等元素在多线程环境中的行为特征和并发保证。这样的注解不仅有助于人类阅读者理解代码的线程安全意图,更重要的是它们可以被编译器的静态分析工具识别和利用,以进行潜在的线程安全问题检测。宏及其展开的注解,开发者可以增强 LevelDB 源码的线程安全性,同时借助支持的编译器工具进行静态分析,提前发现潜在的并发问题,提高软件质量。原创 2024-04-25 09:10:27 · 494 阅读 · 0 评论 -
使用C++实现尾插式循环链表结构
总结起来,这段代码提供了一个简洁而实用的尾插式循环链表的实现,适用于需要高效进行顺序添加和按最近添加顺序删除元素的场景。用于创建新节点并将新节点插入到链表的尾部,即每次新增节点都会成为新的末尾节点。因此有必要实现一款属于自己的双向链表,这样在有需要的时候就能随时增加自己的特性,让链表更好的服务于其他模块。在使用C++实现链表时,我们需要实现两个主要的类:1. node节点类 ,2. 链接node节点的类。,该节点的前驱和后继均指向自身,形成一个空链表的“闭环”。,它作为链表中的实际节点实现。原创 2024-04-24 22:26:12 · 525 阅读 · 0 评论 -
LevelDB之WriteBatch-事务分离的事务处理器
public:public:// 支持copy构造函数// 支持赋值操作// Put 将Key-value形式的值存储在数据库中// 当某个值不想要时,按照key值将对应的键值对删除// 将 batch中所有的缓存清理,并预留出长度和序列号字段足够的长度// 获取batch内部指标数据长度,也就是获取rep_的大小// 当有多个batch想合并时,可以使用append将batch添加到另外衣蛾batch后面。原创 2024-01-17 15:56:53 · 232 阅读 · 0 评论 -
C++经典的arena内存池实现-levelDB的内存池实现
是的你可以相信malloc的实现,但是你不能对你自己有过分的自信,在功能比较复杂,特别是工作量比较大的时候,你不能保证你申请的每块内存都得到有效的释放,这个时候就不可避免的出现内存泄露。Arena在事件处理、流水线处理、请求类型处理中有具有无可无可比拟的优势,事件开始,创建arena,中间过程无论那需要内存,只管申请,申请之后不用担心释放的事情,等到事件结束之后,只需要释放arena句柄就行了,即避免了内存碎片,又避免了内存泄露,同时也减轻了程序员的负担。申请之后忘记释放,造成内存泄露。原创 2022-11-29 10:53:15 · 798 阅读 · 0 评论 -
如何优雅创建一个实例 - levelDB
该对象在构造的时候需要传入一个对比工具,levelDB中数据库不支持并发,因此在进行创建数据库时每个数据库句柄都是创建之后一直到停止使用结束的,那么这个对比工具也是要保证数据库有效的时间内都能正常使用。返回的结果就是8,也就是这个结构体需要按照8字节对其,当我们去除uint64_t的时候,再求对齐长度就会变成4,也就是一个结构体中按照最长位的那个类型进行对齐。来保证已有对象内存绝对大于等于需要申请对象的内存,然后经过饿汉式单例模式封装,经过以上几个步骤之后,一个能长久陪伴数据库句柄的对比工具便诞生了。原创 2023-08-29 11:31:47 · 149 阅读 · 0 评论