LMDB简要介绍
LMDB (Lightning Memory-Mapped Database),是一个读存速度很快的内存映射型数据库,其属于Key-Value数据库,而不是关系型数据库
(如MySQL )
,提供数据管理功能,可以将各种各样的原始数据转换为统一的Key-Value存储,用在深度学习上的情况是可以将神经网络的大型数据集存储在
LMDB 中,LMDB不仅可以用来存放训练和测试用的数据集,还可以存放神经网络提取出的特征数据
(要求这些数据结构简单、数据之间没有什么关联)
二、LMDB原理
LMDB是基于内存映射的,这意味着它返回指向键和值的内存地址的指针,而不需要像大多数其他数据库那样复制内存中的任何内容,因此它读存速度非常快。
LMDB的文件结构是一个文件夹,里面是一个数据文件和一个锁文件,数据随意复制,随意传输。它的访问简单,不需要单独的数据管理进程。只要在访问代码里引用LMDB库,访问时给文件路径即可。
用LMDB数据库来存放图像数据,而不是直接读取原始图像数据的原因:
- 数据类型多种多样,比如:二进制文件、文本文件、编码后的图像文件jpeg、png等,
不可能用一套代码实现所有类型的输入数据读取,因此通过LMDB数据库,转换为统一数据格式可以简化数据读取层的实现。 - lmdb具有极高的存取速度,大大减少了系统访问大量小文件时的磁盘IO的时间开销。
- LMDB将整个数据集都放在一个文件里,避免了文件系统寻址的开销,你的存储介质有多快,就能访问多快,不会因为文件多而导致时间长。
- LMDB使用了内存映射的方式访问文件,这使得文件内寻址的开销大幅度降低。