【发布时间】:2020-02-07 00:21:47
【问题描述】:
我正在尝试了解如何最好地构建我的 Aerospike 架构。当我在玩它时,我意识到问题的一部分是我没有完全理解 Aerospike 如何处理数据,这似乎与 RDBMS 和 Cassandra 不同。
我的数据集是一组记录,因此唯一的“主键”由多个字段的组合定义(如果我在 Aerospike 意义上误用了 primary key 一词,我深表歉意 - 最初我打算简单地连接这些带分隔符的字段)。我需要能够通过指定所有这些字段来检索单个记录并检索指定子集的批次。例如,假设我正在存储人口统计数据,其中我的“主键”是我从中获取数据的列 year、location 和 source 的组合。通过指定所有 3,我将获得准确的记录,如果我指定 2 或仅指定 1,我将获得一组记录。
在 RDBMS 中,我会使用索引来实现这一点。在 Cassandra 中,最好的方法是将所有 3 个添加到主键中,如果在执行搜索时不能保证分区键可用,则在物化视图中重新排列它们的顺序。
随着我越来越多地使用 Aerospike,我意识到这里的 PK 不会像上述两种情况中的任何一种那样对待。此外,我开始认为 Aerospike PK 可能根本不应该成为用户数据的一部分,因为默认情况下它们不会返回(除非在写入之前设置了 sendKeys,在这种情况下它们只是复制到垃圾箱中)。
从阅读文档中听起来,我真正想要的可能是secondary indexes(因为它们允许更灵活地查询数据)?索引在这里是正确的方法还是不鼓励使用,就像在 Cassandra 中一样?尝试将 Aerospike 概念与其他 DB 进行比较时,我可能会感到困惑。
【问题讨论】:
标签: aerospike