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

时间:2012-12-03 10:35:50

标签: java android

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
}

1 个答案:

答案 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字节。