【问题标题】:Datamodeling for AerospikeAerospike 的数据建模
【发布时间】: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


【解决方案1】:

您最多可以拥有 1023 个集合并定义最多 256 个二级索引。如果分区数量有限(低于 1023),则将其用作辅助索引。 SI 内置在进程 RAM 中,具有更快地对符合条件的记录进行第一组查询的优势。然后使用 ClientID 上的表达式进行过滤,无论其他条件如何。记录具有元数据-在您的情况下是过期时间(TTL),或者可能是记录的 LastUpdateTime(或这些都不是)-如果您可以首先过滤可以给出确定 GO/NOGO 的元数据-元数据在 RAM 中(假设社区版) - 这样很快 - 它将保存从磁盘读取记录以进行其他 bin 值相关的过滤。 Bin 数据在磁盘上——假设您使用的是存储引擎设备。如果这是一个缓存并且您使用的是存储引擎内存,那么 bin 数据检索也会更快。

因此,您可以执行如下查询:对于 PartitionId==220,请给我所有剩余寿命 (TTL) 大于 3600 秒且 Region=="North" 和 Size>300 的 ClientID=3005 记录。即,您可以构建任何逻辑组合,仅在记录元数据和/或 bin 值或 bin 值上评估为真或假。对于此示例查询,您只需要 PartitionId 上的 SI。

【讨论】:

  • 我们正在使用 InMemory 是的。你知道 Expressions 的表现如何吗?
  • 这很难根据表达式进行量化-但是鉴于您是 InMemory(假设不是内存中数据为真的存储引擎设备-您是纯存储引擎内存),您在尽可能好的情况......测试和分享!每秒测试事务,使用和不使用表达式过滤和量化。做起来相当简单。
猜你喜欢
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多