Java 高效快速的KV商店适合安卓手机一百万行?

Java 高效快速的KV商店适合安卓手机一百万行?,java,android,Java,Android,有没有一个千伏存储可以存储一百万千伏对,同时在安卓手机上运行良好而不占用资源 它应该能够很快做到这一点: kvstore.deleteByPrefix("image_hash_"); #a million keys have this prefix for(... #for a million values kvstore.add("image_hash_"+i.toString(), "true"); #values are small } 您的密钥表明您的值很大(总共很多GB),这

有没有一个千伏存储可以存储一百万千伏对,同时在安卓手机上运行良好而不占用资源

它应该能够很快做到这一点:

kvstore.deleteByPrefix("image_hash_"); #a million keys have this prefix
for(... #for a million values
    kvstore.add("image_hash_"+i.toString(), "true"); #values are small
}

您的密钥表明您的值很大(总共很多GB),这将比使用地图带来更多问题

我建议您使用文件系统,名称为文件名,值为文件内容。您可以使用两个级别的目录来spli文件,以防止任何一个目录变得太大


您可以使用以下命令

new File("image_hash.properties").delete(); #a million keys have this prefix
PrintWriter pw = new PrintWriter(new File("image_hash.properties"))
for(int i=0;i<1000*1000;i++)
    pw.println(i+"="+true);
pw.close();

第一个示例使用每个值约14个字节,第二个示例使用每个值1/8个字节。

对不起,这些值很小,如
true
或当前时间戳。如果您希望提高效率,二进制格式将有所帮助,而您如何编码这些值取决于键和值的具体内容。例如,如果您担心速度或内存,那么使用字符串是非常无效的。嵌入式sqlite数据库不合适吗?
FileChannel fc = new FileOutputStream("image_hash.flags");
ByteBuffer bb = ByteBuffer.wrap(1000*1000/8); // uses 125KB of memory.
Arrays.fill(bb.array(), (byte) -1);
fc.write(bb);
fc.close();