Cassandra 卡桑德拉中的冻结关键字
无论我在UDT中使用或不使用冻结关键字,它都是在更新记录 我有一个表用户:Cassandra 卡桑德拉中的冻结关键字,cassandra,Cassandra,无论我在UDT中使用或不使用冻结关键字,它都是在更新记录 我有一个表用户: CREATE TABLE demokeyspace.user ( userid text PRIMARY KEY, address1 frozen<address>, password text, uname text ) 它正在更新街道:'updated street'和城市以及邮政编码为null 按照Cassandra的说法,如果UDT值被声明为冻结,则不允许更新UD
CREATE TABLE demokeyspace.user (
userid text PRIMARY KEY,
address1 frozen<address>,
password text,
uname text
)
它正在更新街道:'updated street'和城市以及邮政编码为null
按照Cassandra的说法,如果UDT值被声明为冻结,则不允许更新UDT值
有人能帮我吗?如果您使用非冻结UDT,并且希望更新一个字段,那么您可以使用以下()命令: 在您的情况下,您正在使用UDT更新完整的
address1
字段,其中只有一个值
在使用冻结UDT的情况下,必须在更新期间指定所有值,就像您现在所做的那样,但提供所有值
如果您总是更新完整记录,则鼓励使用冻结值,但如果您需要更新部分记录,则不应使用冻结值。我使用的是[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4],谢谢Alex,如果我有一个类似UDT的列表和顺序有20列,请回答一个问题。此UDT的最大大小及其可行性是什么?如果我理解正确,
订单
是UDT-在这种情况下,它应该被冻结。“冻结”值只是一组字节,所以总体大小将是此UDT中所有字段的大小+表示类型的一些开销。关于列表
-如果可能(值的顺序不重要,等等),那么最好使用设置
-它在磁盘上有更好的表示。好吧,假设我每天有1000个订单,是否适合在Cassandra中将其定义为UDT?对不起,也许我不完全理解。。。UDT用于表示复杂的数据结构。Order通常有它,所以可以将它表示为UDT。在列表中存储订单-这是另一个问题。也许将每个订单表示为单独的行更有效,但这实际上取决于您的访问模式……冻结和列表都是相同的吗?当我将列创建为addressdetail冻结时,它将显示为addressdetail冻结。当我描述桌子时;
CREATE TYPE demokeyspace.address (
street text,
city text,
zip_code int
);
update user set address1.street='updated street' where userid='2';