Java 如何有效地将钥匙保存在aerospike中?

Java 如何有效地将钥匙保存在aerospike中?,java,aerospike,Java,Aerospike,对于不是很大数量的数据,我们将所有密钥存储在一个带有列表的箱子中 但是垃圾箱的大小有限制 Java客户机中带有ScanCallback的函数scanAll,实际上运行速度非常慢,因此我们无法在项目中使用它。当你给他钥匙时,Aerospike工作得很快 现在我们有了一些集合,其中有很多记录和密钥。存储所有密钥的最佳方法是什么,或者可能有一些方法可以快速获得密钥,而无需scanAll?扫描小型集目前是一种低效的操作,因为有4K逻辑分区,扫描线程必须在扫描期间减少这些分区中的每一个。小型集合不一定在所

对于不是很大数量的数据,我们将所有密钥存储在一个带有列表的箱子中

但是垃圾箱的大小有限制

Java客户机中带有ScanCallback的函数
scanAll
,实际上运行速度非常慢,因此我们无法在项目中使用它。当你给他钥匙时,Aerospike工作得很快


现在我们有了一些集合,其中有很多记录和密钥。存储所有密钥的最佳方法是什么,或者可能有一些方法可以快速获得密钥,而无需scanAll?

扫描小型集目前是一种低效的操作,因为有4K逻辑分区,扫描线程必须在扫描期间减少这些分区中的每一个。小型集合不一定在所有分区中都有记录,因此不管怎样,您都要为扫描这些记录的开销买单。在未来的版本中,这种情况可能会发生变化,但目前情况就是如此

有两种方法可以更快地获取集合中的所有记录:

  • 如果您确实知道密钥空间是什么样的,那么可以迭代批读取以获取它们(这也可以并行完成)。尝试访问批读取中不存在的键不会导致错误,它只是返回时在特定索引中没有值
  • 或者,您可以添加具有集合名称的bin,并在该bin上创建二级索引,然后查询所有记录
    ,其中setname=XYZ
    。对于一小部分,这将比扫描速度快得多

  • 我不确定我是否完全理解,这会有帮助:@kporter,我已经有了。但问题是要尽快得到它们。