如何有效地将钥匙保存在 aerospike 中?
How keep keys in aerospike effectively?
对于不是很大的数据量,我们将所有键存储在一个带有列表的容器中。
但是bin的大小是有限制的
在Java客户端中使用ScanCallback的函数scanAll
,实际上运行起来很慢,所以我们的项目中用不起。当你给 Aerospike 钥匙时,Aerospike 工作得很快。
现在我们有一些集合,其中有很多记录和键。存储所有密钥的最佳方式是什么,或者也许有一些方法可以在不使用 scanAll 的情况下快速获取密钥?
扫描小型集合目前是一个低效的操作,因为有 4K 个逻辑分区,扫描线程必须在扫描期间减少每个分区。小集不一定在所有分区中都有记录,因此您无论如何都要为扫描这些分区的开销付费。这可能会在未来的版本中发生变化,但目前是这样。
有两种方法可以更快地获取集合中的所有记录:
- 如果您确实知道密钥 space 是什么样的,您可以迭代批读取以获取它们(也可以并行完成)。尝试在批量读取中访问不存在的键不会导致错误,它只会返回特定索引中没有值的值。
- 或者,您可以添加一个具有设置名称的 bin,并在该 bin 上创建二级索引,然后查询所有记录
WHERE setname=XYZ
。对于较小的集合,这将比扫描返回得更快。
对于不是很大的数据量,我们将所有键存储在一个带有列表的容器中。
但是bin的大小是有限制的
在Java客户端中使用ScanCallback的函数scanAll
,实际上运行起来很慢,所以我们的项目中用不起。当你给 Aerospike 钥匙时,Aerospike 工作得很快。
现在我们有一些集合,其中有很多记录和键。存储所有密钥的最佳方式是什么,或者也许有一些方法可以在不使用 scanAll 的情况下快速获取密钥?
扫描小型集合目前是一个低效的操作,因为有 4K 个逻辑分区,扫描线程必须在扫描期间减少每个分区。小集不一定在所有分区中都有记录,因此您无论如何都要为扫描这些分区的开销付费。这可能会在未来的版本中发生变化,但目前是这样。
有两种方法可以更快地获取集合中的所有记录:
- 如果您确实知道密钥 space 是什么样的,您可以迭代批读取以获取它们(也可以并行完成)。尝试在批量读取中访问不存在的键不会导致错误,它只会返回特定索引中没有值的值。
- 或者,您可以添加一个具有设置名称的 bin,并在该 bin 上创建二级索引,然后查询所有记录
WHERE setname=XYZ
。对于较小的集合,这将比扫描返回得更快。