1

我们有以下 aerospike 设置配置,并希望地图中的条目应在“x”天后自动删除。应该如何使用 Spring data aerospike 来实现相同的目标?

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

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

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

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

此外,我的地图中有大约 10 - 12 个 <K,V> 对,每个具有不同的结构,我只希望 1 个特定的 <K,V> 在 x 天后过期!

依赖项看起来像: -

<dependency>
            <groupId>com.aerospike</groupId>
            <artifactId>aerospike-client</artifactId>
            <version>4.1.3</version>
        </dependency>

        <dependency>
            <groupId>com.aerospike</groupId>
            <artifactId>spring-data-aerospike</artifactId>
            <version>${aerospike.data.version}</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/spring-data-aerospike-2.0.0.RELEASE.jar</systemPath>
        </dependency>

        <dependency>
            <groupId>com.aerospike</groupId>
            <artifactId>aerospike-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.aerospike</groupId>
            <artifactId>aerospike-helper-java</artifactId>
            <version>1.2.2</version>
        </dependency>

4

2 回答 2

3

Aerospike 服务器中没有将 TTL 分配给地图数据类型中的 K:V 对的本机功能/能力。您必须从应用程序构建它。即在插入 K:V 对时将所需的过期时间戳与 K:V 数据一起存储,然后定期扫描整个数据库以删除过期的 KV 对或在读取时删除过期的 K:V 对(强度较低但携带过期的 K :V 对直到阅读) - 真的没有优雅的选择。也许重新审视数据模型。

Aerospike 确实具有使整个记录过期和删除的能力,即将 TTL 分配给整个记录 - 然后它有一个内部线程来为您完成过期和删除。因此,如果您可以将要保留 x 天的 K:V 对存储为单独的记录,那么这很简单。但是在 bin 级别或 bin 数据级别(如地图数据类型)的任何内容,您都必须从应用程序中处理。

于 2020-07-21T19:41:01.180 回答
0

同样,在 Aerospike 中,集合名称只是记录上的一个标签。例如,Aerospike 中跨记录的数据可能如下所示:

  1. Rec Key=1, data: bin1=5, bin2="abc" 并且可以指定(可选)-> 属于“myset1”,
  2. Rec Key=2, data: bin1="cdg", bin2=7 可以指定 -> 属于 "myset1",
  3. Rec Key="abc" data: bin1=[list data type], bin2={map data type}, bin3="xyz", bin4=4 and you specify -> 属于“myset2”

...希望你明白这一点。数据模式纯粹是在记录级别,集合名称只是一种建模方便 - 如果您不指定集合,记录将转到默认的“空”集合 - 集合名称作为“标签”附加到该特定记录。然后,您可以处理标签(集名称)为“myset1”的所有记录。但是在 Aerospike 中,属于同一命名空间中不同集合的所有记录都随机分布在该命名空间的存储空间上。

于 2020-07-28T18:27:54.247 回答