Caffe代码导读(2):LMDB简介
闪电般的内存映射型数据库管理(LMDB)
简介
LMDB是基于二叉树的数据库管理库,建模基于伯克利数据库的应用程序接口,但做了大幅精简。整个数据库都是内存映射型的,所有数据获取返回数据都是直接从映射的内存中返回,所以获取数据时没有malloc或memcpy发生。因此该数据库仍是非常简单的,因为它不需要自己的页面缓存层,并且非常高效、省内存。它在语义上完全符合ACID(原子性、一致性、隔离性、持久性)。当内存映射为只读时,数据库完整性不会被应用程序的迷失指针写破坏。
该库也是线程可见的,支持来自多进程/线程的并发读/写访问。数据页使用写时复制策略,故没有活动数据页被覆盖写入。这也提供了保护机制,经历系统崩溃后不需要特殊恢复过程。写入过程为完全串行的;一次只有一个写会话是活动的,这保证了写入者不可能死锁。数据库结构是多个版本,所以读出者运行时不加锁。写入这不会阻塞读出者,读出者也不会阻塞写入者。
不像其他熟知的数据库机制(使用写前会话日志或数据仅追加写),LMDB操作时不需要保持会话。前面两种都需要周期性地检查或者压缩他们的日志或数据库文件,否则会无限增长。LMDB记录数据库内的空页面,在新的写入操作时重用他们,所以正常使用时数据库尺寸不会无限增加。
内存映射可以用作只读映射或读写映射。默认为只读映射,这提供了对破坏完全的免疫力。使用读写模式提供了更高的写性能,但增加了被恶意写入破坏数据库的可能性。当然如果你的应用代码是已知无bug的,那么这不是个严重的问题。
Caffe代码导读(2):LMDB简介相关推荐
- Caffe代码导读(5):对数据集进行Testing
转载自: Caffe代码导读(5):对数据集进行Testing - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/detail ...
- Caffe代码导读(4):数据集准备
转载自: Caffe代码导读(4):数据集准备 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/416492 ...
- Caffe代码导读(0):路线图
转载自: Caffe代码导读(0):路线图 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/41681085 ...
- Caffe代码导读(1):Protobuf例子
转载自: Caffe代码导读(1):Protobuf例子 - 卜居 - 博客频道 - CSDN.NET http://blog.csdn.net/kkk584520/article/details/4 ...
- Caffe代码导读(3):LevelDB例程
Caffe自带例子Cifar10中使用leveldb存储输入数据,为此我们研究一下怎样使用它.安装步骤可以参考http://blog.csdn.net/kangqing2003/article/det ...
- lmdb简介——结合MVCC的B+树嵌入式数据库
lmdb简介 lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎.其主要特性有: 基于文件映射IO(mmap) 基于B+树的key-value接口 基于MVCC(Multi ...
- 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...
- Android工具HierarchyViewer 代码导读(3) -- 后台代码
在上文中,我们讲解了如何把HierarchyViewer的项目导入到Eclipse中,以便更高效阅读代码.本文将讲解HierarchyViewer的后台代码,建议大家可以先阅读<Android工 ...
- Python编写caffe代码
有时候,我们需要将网络使用caffe代码实现,人工手写容易出问题.可以使用Python完成网络编写. 卷积层: def generate_conv_layer_no_bias(name, bottom ...
最新文章
- 英特尔新任 CEO 的“开挂”人生
- 如何快速将微信公众号留言嵌入到CSDN博文中?
- 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
- SVN钩子hooks使用
- PHP 设计模式之代理模式
- 将markdown编译为HTML和PDF
- pipenv和autoenv
- tomcat内存溢出
- android访问重定向地址,如何从android中重定向url加载图像(示例代码)
- 如何防止在listbox中添加很多数据出现不停的刷新
- Java之品优购部署_day01(10)
- linux7怎么禁止用户密码登录,Centos7锁定用户禁止登陆的解决办法
- python:python对象属性及属性函数property()
- Matlab 中simulink 打不开高版本问题解决方法
- 如何用Java打开PDF文件
- 什么是驱动程序?为什么要用驱动程序?
- 摄影构图学83年绝版_让模特露肩、露腿的摄影师们,我求求你别再祸害“古风摄影”了!...
- 卸载IE9重装IE9无法安装的原因及解决方法
- bzoj2555 SubString (SAM+LCT维护子树大小/ETT)
- Python 进阶必备:线程模块 threading