将字符串的键值对存储在Java中的文件的最佳方法是什么,它是可伸缩的(可以使用大量的对,即在访问时不读取或写入整个文件),但是尽可能轻量化?
我问这个问题是因为即使是最轻的数据库库,比如SQLite和H2,对于这个目的来说就像是一种过度杀伤,甚至不可能用于ME程序(尽管我现在主要需要这个程序用于SE程序)。 / p>
答案 0 :(得分:0)
有一些好主意 in this SO answer。我自己的倾向是使用noSQL或类似的,而讨论更多地集中在hashmap上。我相信,要么会这样做。
答案 1 :(得分:0)
对于一组静态的键值对,我想到了Dan Bernstein的cdb。引用cdb描述:
cdb是一个快速,可靠,简单的包,用于创建和读取常量数据库。它的数据库结构提供了几个功能:
- 快速查找:在大型数据库中成功查找通常只需要两次磁盘访问。不成功的查找只需要一个。
- 低开销:数据库使用2048个字节,每个记录加24个字节,加上密钥和数据的空间。
- 没有随机限制:cdb可以处理高达4千兆字节的任何数据库。没有其他限制;记录甚至不必适合记忆。数据库以与机器无关的格式存储。
- 快速原子数据库替换:cdbmake可以比其他散列包重写整个数据库两个数量级。
- 快速数据库转储:cdbdump以cdbmake兼容格式打印数据库的内容。
cdb旨在用于电子邮件等关键任务应用程序。数据库替换可以安全地防止系统崩溃。读者在重写时不必暂停。
似乎http://www.strangegizmo.com/products/sg-cdb/有一个带有BSD许可证的Java实现。
答案 2 :(得分:0)
明显的初步想法是使用属性,因为它们是流式传输但最终完全加载。您也无法部分读取缓冲集。
考虑到这一点,你可以看到这个额外的其他SO响应。这指的是在流周围导航(尽管不完美),以便您可以重新定位您的阅读:
changing the index positioning in InputStream
使用单独的索引(例如初始字符),您可以智能地重新定位流中的光标。
答案 3 :(得分:0)
Oracle BerkeleyDB java edition允许您存储键值对象,它易于使用和管理,并可向上扩展到天堂(或左右)。 820k并不是那么大。
但是如果你正在考虑缩小到j2me,你可以尝试TinySQL
优点:
缺点:
答案 4 :(得分:0)
Chronicle Map是Java的现代堆外键值存储。如果可以(可选)持久化到磁盘,就像最终一致的数据库一样。纪事地图功能