如何解决为什么 DynamoDB 不支持多列键Cassandra 概念中的复合键
我最近从 Cassandra 过渡到 DynamoDB,并发现两者之间存在差异(至少对我来说非常重要)。术语略有不同,因此为简单起见,我将它们称为 partition key
和 clustering key
。
在 Cassandra 中,我们有一个称为 composite key
的概念 - 分区键可以是多列值,也可以是集群键。但是,DynamoDB 中似乎没有这样的概念。 AWS document 提到了 composite
,但它只是表示可以由
分区键和排序键——称为复合主键,这种类型的键由两个属性组成。第一个属性是分区键,第二个属性是排序键。
过去我经常使用多列值(在 Cassandra 的意义上是 composite
)作为键,所以当我意识到 DynamoDB 不支持它时,我有点震惊。我知道像 this post 这样的连接总是一个选项。我的问题是:
- 使用多列值作为分区键是一种反模式吗?聚类键也是如此吗?
- 多列键会导致性能下降吗?
- 如果没有性能下降,那么这两种实现背后还有哪些其他权衡?
解决方法
如果您查看 Cassandra 如何实现复合分区键,您会看到它只是将多个分区键列序列化为存储在 sstable 中的单个键(我曾经在 {{3} } - 用于重新实现 Cassandra 和 DynamoDB 的开源 Scylla 项目)。
DynamoDB 选择不为您做这个序列化,并要求您自己做(这就是您所说的串联)。我不认为他们选择这样做有任何特殊原因 - 我认为这只是简化了 API。
我能想到没有复合键的唯一缺点是您无法索引复合键的部分。在 Cassandra 中,如果 (a,b) 是复合分区键,则可以添加一个物化视图,其分区键只是 a(带有 b 部分的集群键)。在 DynamoDB 中,您无法使用 GSI(DynamoDB 与 Cassandra 的物化视图并行)来做到这一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。