Caffe代码导读(2):LMDB简介

简介:

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

简介

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

 

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

 

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

 

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

目录
相关文章
|
缓存 API 数据库
Py之lmdb:lmdb的简介、安装、使用方法之详细攻略
Py之lmdb:lmdb的简介、安装、使用方法之详细攻略
Py之lmdb:lmdb的简介、安装、使用方法之详细攻略
|
13天前
|
PyTorch Shell API
Ascend Extension for PyTorch的源码解析
本文介绍了Ascend对PyTorch代码的适配过程,包括源码下载、编译步骤及常见问题,详细解析了torch-npu编译后的文件结构和三种实现昇腾NPU算子调用的方式:通过torch的register方式、定义算子方式和API重定向映射方式。这对于开发者理解和使用Ascend平台上的PyTorch具有重要指导意义。
|
6月前
|
存储 算法框架/工具 C++
程序与技术分享:Caffe中Solver解析
程序与技术分享:Caffe中Solver解析
32 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
InceptionNet10详细原理(含tensorflow版源码)
InceptionNet10详细原理(含tensorflow版源码)
101 0
InceptionNet10详细原理(含tensorflow版源码)
|
并行计算 Ubuntu 算法框架/工具
|
并行计算 数据可视化 PyTorch
|
Linux TensorFlow 算法框架/工具
TensorFlow Lite开发系列之python接口解析(一)
环境: tensorflow2.x, 一定要使用linux系统,后期转换模型windows会出现bug
267 0
TensorFlow Lite开发系列之python接口解析(一)
|
并行计算 Ubuntu 算法框架/工具
Caffe:使用 cudnn 5.1 配置 Faster-RCNN Caffe 并运行 demo
系统:Ubuntu 16.04 环境:CUDA 8.0 + cudnn 5.1 + BLAS + opencv 3.0.0
151 0
安装Caffe2
安装Caffe2
100 0
|
算法 安全 TensorFlow
Tensorflow源码解析3 -- TensorFlow核心对象 - Graph
# 1 Graph概述 计算图Graph是TensorFlow的核心对象,TensorFlow的运行流程基本都是围绕它进行的。包括图的构建、传递、剪枝、按worker分裂、按设备二次分裂、执行、注销等。因此理解计算图Graph对掌握TensorFlow运行尤为关键。 # 2 默认Graph ### 默认图替换 之前讲解Session的时候就说过,一个Session只能r
3826 0