检索/存储数百万个小二进制对象的最快方法

Hug*_*ira 6 .net database sqlite performance data-structures

我正在寻找一种快速(如巨大的性能,而不是快速修复)解决方案,用于持久化和检索数以千万计的小型(约1k)二进制对象.每个对象应具有唯一的ID以供检索(最好是GUID或SHA).其他要求是它应该可以从.NET使用,它不需要额外的软件安装.

目前,我正在使用一个带有单个表的SQLite数据库来完成这项工作,但我想摆脱处理简单SQL指令的开销,例如SELECT data FROM store WHERE id = id.

我还测试了NTFS下的直接文件系统持久性,但是一旦达到数千万个对象,性能就会快速降低.

PS顺便说一下,对象永远不需要删除,插入率非常非常低.实际上,每次对象更改时,都会存储新版本,并保留以前的版本.这实际上是支持时间旅行的要求.

只需在此线程中添加一些其他信息:

BLOB或不BLOB:数据库或文件系统中的大对象存储http://arxiv.org/abs/cs.DB/0701168

Dan*_*ker 10

您可以通过将对象的GUID标识符分解为多个部分并将它们用作目录名来减轻NTFS的性能问题.这样,每个目录只包含有限数量的子目录或文件.

例如,如果标识符是aaaa-bb-cc-ddddeeee,项目的路径将是c:\store\aaaa\bbcc\dddd\eeee.dat,将每个目录限制为不超过64k子项.