【发布时间】:2020-10-29 13:20:13
【问题描述】:
我正在对 Aerospike 进行调查。 我们需要将它用作数据的缓存(不需要持久性),因为这些数据只存在很短的时间。 (我们创建它,读取它,然后我们的目标是根据对服务的一些处理,尽可能快地删除它)
我们的数据看起来像这样:
Record :
- RecordId
- ClientId
- Partition
- Region
- Size
- May have X number of custom attributes (I will probably limit the number of the attributes)
ClientId 这里代表我们要实现的多租户。我们将始终只查询属于某个特定 ClientId 的记录。
我们需要在不同的字段上查询这些数据。我知道这对 Aerospike 来说并不容易,因为它只支持每个查询的二级索引上的一个过滤器。 由于我们需要支持大量记录(可能在数百万的范围内),我们希望根据记录的 Partition 字段对记录进行分区。这应该可以让查询运行得更快,并使后处理更容易。
每条记录的分区格式相同,但可能因分区而异。
为了解决这个问题,我想像这样在 Aerospike 中对我的数据进行建模:
套装:
Partition_{ClientId} : (string equality filter)
Key : RecordId
Bin : Partition
Index : Partition
Region_{ClientId} (string equality filter)
Key : RecordId
Bin : Region
Index : Region
Size_{ClientId} (integer range search)
Key : RecordId
Bin : Size
Index : Size
使用尽可能多的集合来过滤我的数据。 拥有的意义 然后查询不同的集合,实现查询结果的交集,得到过滤后的查询。
第一个问题,我这样做是因为从我读到的内容中,没有简单的方法可以根据多个过滤器过滤一组。这是一个正确的假设吗
第二个问题,基于该模型,我们将更快地达到在一个命名空间中设置的限制。有没有其他方法可以对相同类型的数据进行建模,同时仍然高效?
【问题讨论】:
-
您是否查看过用于过滤的表达式? aerospike.com/docs/guide/expressions(过滤器可用于所有单记录操作(读取、写入和记录 UDF)、批量读取、扫描和二级索引查询。)
标签: aerospike