2

有没有一个 KV store 可以存储一百万对 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
}
4

1 回答 1

2

您的密钥表明您的值很大(总共有很多 GB)这会比使用 Map 给您带来更多问题。

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


您可以使用以下内容。

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 个字节。

于 2012-12-03T10:41:03.367 回答