【问题标题】:Why multi-column key (composite in Cassandra's concept) is not supported in DynamoDB为什么 DynamoDB 不支持多列键(Cassandra 概念中的复合)
【发布时间】:2021-06-16 16:36:52
【问题描述】:

我最近从 Cassandra 过渡到 DynamoDB,发现两者之间存在差异(至少对我来说非常重要)。这些术语有些不同,因此为简单起见,我将它们称为partition keyclustering key

在 Cassandra 中,我们有一个称为 composite key 的概念 - 分区键可以是多列值,也可以是集群键。但是,DynamoDB 中似乎没有这样的概念。 AWS document 提到了composite,但这只是意味着可以通过 形成主键:

分区键和排序键——称为复合主键,这种类型的键由两个属性组成。第一个属性是分区键,第二个属性是排序键。

我过去经常使用多列值(在 Cassandra 的意义上是 composite)作为键,所以当我意识到 DynamoDB 不支持它时我有点震惊。我知道像this post 这样的连接总是一种选择。我的问题是:

  1. 将多列值作为分区键是一种反模式吗?集群键也是如此吗?
  2. 多列键会导致性能下降吗?
  3. 如果没有性能下降,那么这两种实现背后的其他权衡是什么?

【问题讨论】:

标签: amazon-web-services cassandra nosql amazon-dynamodb database-performance


【解决方案1】:

如果您查看 Cassandra 如何实现复合分区键,您会发现它只是将多个分区键列序列化为存储在 sstable 中的单个键(我曾在 https://docs.scylladb.com/architecture/sstable/sstable2/sstable-data-file/ 中对此进行过详细解释 -用于重新实现 Cassandra 和 DynamoDB 的开源 Scylla 项目)。

DynamoDB 选择不为您执行此序列化,而是要求您自己执行(这就是您所说的串联)。我不认为他们选择这样做有什么特别的原因 - 我认为它只是简化了 API。

我能想到的没有复合键的唯一缺点是您无法索引部分复合键。在 Cassandra 中,如果 (a,b) 是复合分区键,您可以添加一个物化视图,其分区键只是 a(b 是集群键的一部分)。在 DynamoDB 中,您无法使用 GSI(DynamoDB 与 Cassandra 的物化视图并行)来做到这一点。

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 2014-03-14
    • 2010-09-29
    • 2018-05-30
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多