闪电般的内存映射型数据库管理(LMDB)

简介

LMDB是基于二叉树的数据库管理库,建模基于伯克利数据库的应用程序接口,但做了大幅精简。整个数据库都是内存映射型的,所有数据获取返回数据都是直接从映射的内存中返回,所以获取数据时没有malloc或memcpy发生。因此该数据库仍是非常简单的,因为它不需要自己的页面缓存层,并且非常高效、省内存。它在语义上完全符合ACID(原子性、一致性、隔离性、持久性)。当内存映射为只读时,数据库完整性不会被应用程序的迷失指针写破坏。

该库也是线程可见的,支持来自多进程/线程的并发读/写访问。数据页使用写时复制策略,故没有活动数据页被覆盖写入。这也提供了保护机制,经历系统崩溃后不需要特殊恢复过程。写入过程为完全串行的;一次只有一个写会话是活动的,这保证了写入者不可能死锁。数据库结构是多个版本,所以读出者运行时不加锁。写入这不会阻塞读出者,读出者也不会阻塞写入者。

不像其他熟知的数据库机制(使用写前会话日志或数据仅追加写),LMDB操作时不需要保持会话。前面两种都需要周期性地检查或者压缩他们的日志或数据库文件,否则会无限增长。LMDB记录数据库内的空页面,在新的写入操作时重用他们,所以正常使用时数据库尺寸不会无限增加。

内存映射可以用作只读映射或读写映射。默认为只读映射,这提供了对破坏完全的免疫力。使用读写模式提供了更高的写性能,但增加了被恶意写入破坏数据库的可能性。当然如果你的应用代码是已知无bug的,那么这不是个严重的问题。

Caffe代码导读(2):LMDB简介相关推荐

  1. Caffe代码导读(5):对数据集进行Testing

    转载自: Caffe代码导读(5):对数据集进行Testing - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/detail ...

  2. Caffe代码导读(4):数据集准备

    转载自: Caffe代码导读(4):数据集准备 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/416492 ...

  3. Caffe代码导读(0):路线图

    转载自: Caffe代码导读(0):路线图 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/41681085 ...

  4. Caffe代码导读(1):Protobuf例子

    转载自: Caffe代码导读(1):Protobuf例子 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/4 ...

  5. Caffe代码导读(3):LevelDB例程

    Caffe自带例子Cifar10中使用leveldb存储输入数据,为此我们研究一下怎样使用它.安装步骤可以参考http://blog.csdn.net/kangqing2003/article/det ...

  6. lmdb简介——结合MVCC的B+树嵌入式数据库

    lmdb简介 lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎.其主要特性有: 基于文件映射IO(mmap) 基于B+树的key-value接口 基于MVCC(Multi ...

  7. 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

    文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...

  8. Android工具HierarchyViewer 代码导读(3) -- 后台代码

    在上文中,我们讲解了如何把HierarchyViewer的项目导入到Eclipse中,以便更高效阅读代码.本文将讲解HierarchyViewer的后台代码,建议大家可以先阅读<Android工 ...

  9. Python编写caffe代码

    有时候,我们需要将网络使用caffe代码实现,人工手写容易出问题.可以使用Python完成网络编写. 卷积层: def generate_conv_layer_no_bias(name, bottom ...

最新文章

  1. 英特尔新任 CEO 的“开挂”人生
  2. 如何快速将微信公众号留言嵌入到CSDN博文中?
  3. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  4. SVN钩子hooks使用
  5. PHP 设计模式之代理模式
  6. 将markdown编译为HTML和PDF
  7. pipenv和autoenv
  8. tomcat内存溢出
  9. android访问重定向地址,如何从android中重定向url加载图像(示例代码)
  10. 如何防止在listbox中添加很多数据出现不停的刷新
  11. Java之品优购部署_day01(10)
  12. linux7怎么禁止用户密码登录,Centos7锁定用户禁止登陆的解决办法
  13. python:python对象属性及属性函数property()
  14. Matlab 中simulink 打不开高版本问题解决方法
  15. 如何用Java打开PDF文件
  16. 什么是驱动程序?为什么要用驱动程序?
  17. 摄影构图学83年绝版_让模特露肩、露腿的摄影师们,我求求你别再祸害“古风摄影”了!...
  18. 卸载IE9重装IE9无法安装的原因及解决方法
  19. bzoj2555 SubString (SAM+LCT维护子树大小/ETT)
  20. Python 进阶必备:线程模块 threading

热门文章

  1. Redis 集群分布式锁与 API 网关分布式限流
  2. 微服务架构的核心要点和实现原理
  3. @Async in Spring--转
  4. solr服务器的查询过程
  5. 在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别--转
  6. 【机器学习】算法大全
  7. 你应该知道的模型评估的五个方法
  8. 这些deep learning(rnn、cnn)调参的经验值得分享
  9. 深入理解分布式技术 - 从区块链技术看分布式理论的应用
  10. Tomcat - Tomcat 8.5.55 启动过程源码分析阶段二_load加载初始化