1

我们有以下 aerospike 数据模型@prod。我们仅依靠 Aerospike 作为我们的数据中心。现在,我们需要为销售团队生成每小时报告:报告详细说明每小时获得的客户数量。

@Document(collection = "cust")
public class Customer {

   @Id
   @Field(value = "PK")
   private String custId;

   @Field(value = "mobileNumber")
   private String mobileNumber;

   @Field(value = "status")
   private String customerStatus;

   @Field(value = "creationTime")
   private String creationTime;
 
   @Field(value = "corrDetails")
   private HashMap<String, Object> corrDetails;
 
}

疑虑需要帮助:-

a.) 如何通过避免次要指数来达到同样的效果!我们没有任何关于生产的二级索引,并且希望避免使用它们。

b.) 有没有一种方法可以生成上述类型的报告,因为我们没有 MYSQL / RDBMS 复制下面的数据!

c.) 频繁的 aerospikeSET扫描是否会导致性能下降?

4

1 回答 1

3

Aerospike 可以扫描/查询“最后更新时间”(LUT) 大于特定值的记录。假设您正在谈论的集合没有其他更新,您应该能够利用此功能。此外,您似乎只需要知道计数,而不需要您在过去一小时内获得的用户的详细信息。在这种情况下,您可以避免获取 bin 数据,这将使扫描/查询更加高效。

基于 LUT 的 Aerospike 扫描将是高效的,因为 LUT 是主索引的一部分并且在内存中。但是,每次扫描都需要遍历整个内存中的主索引来比较 LUT。因此,它不如二级索引高效,但考虑到二级索引的其他开销,总体上它可能仍然是一个更好的权衡。但请注意不要让系统因太多扫描而不堪重负。也许您可以在 aerospike 本身中缓存摘要并不断刷新它。

您可以查看 java 客户端示例,了解如何使用谓词表达式进行扫描(在 bin 上没有 where 子句的查询)。请参阅runQuery2示例中的函数。您的用例不需要结束时间。为避免获取 bin 数据,您includeBinData可以falseQueryPolicy.

于 2020-07-28T14:46:16.207 回答