gpt4 book ai didi

Cassandra UDT 作为主键

转载 作者:行者123 更新时间:2023-12-05 00:24:19 29 4
gpt4 key购买 nike

官方文档告诉我们不要对主键使用 UDT。这有什么特别的原因吗?这样做的潜在缺点是什么?

最佳答案

这句话是为了劝阻用户不要对 PK 列不加区别地使用 UDT。 UDT 在其当前版本中的主要动机(即,考虑到 Cassandra 支持“卡住”UDT)是为了在集合中存储更复杂的值。在集合之外,UDT 可以有它的用途,但是如果需要它,值得问自己两次。例如:
CREATE TYPE myType (a text, b int);CREATE TABLE myTable (id uuid PRIMARY KEY, v frozen<myType>);
通常不是很明智,因为您失去了更新 v.a 而不更新 v.b 的能力。这样直接执行实际上更灵活:
CREATE TABLE myTable (id uuid PRIMARY KEY, a text, b int);
这个微不足道的例子指出集合之外的UDT不一定是好事,这也扩展到主键列。这样做不一定更好:
CREATE TYPE myType (a text, b int);CREATE TABLE myTable (id frozen<myType> PRIMARY KEY);
而不是更简单:
CREATE TABLE myTable (a text, b int, PRIMARY KEY ((a, b)))
此外,关于主键,任何复杂的 UDT 可能都没有意义。甚至考虑一个中等复杂的类型,例如:
CREATE TYPE address (
number int,
street text,
city text,
phones set<text>
)

在主键中使用这样的类型几乎肯定不是很有用,因为 PK 标识行,因此除了一组电话之外相同的 2 个地址不会标识同一行。没有多少情况是可取的。更一般地说,PK 往往相对简单,您可能希望对聚类列进行细粒度控制,因此 UDT 很少是好的候选者。

总而言之,PK 列中的 UDT 并不总是坏事,只是在该上下文中并不经常有用,因此用户不应该仅仅因为允许而努力寻找将 UDT 用于 PK 列的方法。

关于Cassandra UDT 作为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26491889/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com