KV商店是否可以存储一百万KV对,而在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
}
答案 0 :(得分:2)
您的密钥表明您的值很大(总共很多GB)这会比使用Map时出现更多问题。
我建议你使用文件系统,名称是文件名,值是文件的内容。您可以使用两级目录来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();
如果你担心效率而你只能有真或假,你可以写二进制文件。
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();
第一个示例每个值使用~14个字节,第二个示例使用每个值的1/8字节。