- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在寻找一种快速(如高性能,而不是快速修复)解决方案来持久化和检索数千万个小型(大约 1k)二进制对象。每个对象都应该有一个用于检索的唯一 ID(最好是 GUID 或 SHA)。额外的要求是它应该可以从 .NET 中使用,并且不需要安装额外的软件。
目前,我正在为这项工作使用带有单个表的 SQLite 数据库,但我想摆脱处理简单 SQL 指令的开销,例如 SELECT data FROM store WHERE id = id。
我还在 NTFS 下测试了直接文件系统持久性,但是一旦达到 50 万个对象,性能就会下降得非常快。
附言顺便说一下,永远不需要删除对象,而且插入率非常非常低。事实上,每次对象更改时,都会存储一个新版本,而保留以前的版本。这实际上是支持时间旅行的要求。
只是向这个线程添加一些额外的信息:
到 BLOB 还是不到 BLOB:数据库或文件系统中的大对象存储 http://arxiv.org/abs/cs.DB/0701168
最佳答案
您可以通过将对象的 GUID 标识符分成几部分并将它们用作目录名称来减轻 NTFS 的性能问题。这样,每个目录只包含有限数量的子目录或文件。
例如如果标识符是 aaaa-bb-cc-ddddeeee
,则项目的路径将是 c:\store\aaaa\bbcc\dddd\eeee.dat
,限制每个目录到不超过 64k 个子项。
关于.net - 检索/存储数百万个小型二进制对象的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1148122/
3-d 中的点由 (x,y,z) 定义。任意两点 (X,Y,Z) 和 (x,y,z) 之间的距离 d 为 d= Sqrt[(X-x)^2 + (Y-y)^2 + (Z-z)^2]。现在一个文件中有一百
我是一名优秀的程序员,十分优秀!