宣布 Amazon Keyspaces 的冻结集合 数据库博客
Amazon Keyspaces新增支持冻结集合
关键要点
新增冻结集合:Amazon Keyspaces现支持使用冻结关键字存储集合数据类型如列表、集合和映射作为不可变值。与开源Cassandra的一致性:冻结集合功能与开源Cassandra一致,无需重构即可在Amazon Keyspaces上运行现有应用。避免部分更新:冻结集合作为一个整体,不允许独立更新其中的元素或字段。支持嵌套集合:现在可以在其他集合中嵌套集合,从而更好地建模数据的层次关系。集合作为主键:可以将冻结集合列声明为主键,使得直接索引数据库中的一组值成为可能。今天,我们要宣布Amazon Keyspaces的新功能:冻结集合的支持。通过这个功能,你可以使用冻结关键字存储集合数据类型如列表、集合和映射为单一、不变的值。本文将讨论此新特性的好处和应用场景,并演示如何在Amazon Keyspaces中创建和使用冻结集合。
使用冻结集合的好处
在Amazon Keyspaces中使用冻结集合的一些好处包括:
好处描述与开源Cassandra的一致性冻结集合在Amazon Keyspaces中提供与开源Cassandra相同的功能。无需重构即可运行现有应用。避免部分更新冻结集合成为不可变实体,不能独立更新集合中的元素,必须整体替换。支持嵌套集合支持嵌套集合,允许更直观的建模层次关系的数据,提高应用的可维护性。集合作为主键可以将冻结集合列声明为主键,实现复杂值的直接索引,简化应用设计。解决方案概述
接下来的部分将演示如何定义包含冻结集合的表,以及如何对不同类型的冻结集合集合、列表和映射执行创建、插入、更新和查询操作。示例还将提供常见错误的详细信息,例如尝试部分更新冻结集合的值时的错误。你可以通过控制台或CQL API创建新表。Amazon Keyspaces还支持使用AWS SDK和AWS CloudFormation等原生AWS资源创建方法。
使用控制台创建新表
使用控制台创建新表,请完成以下步骤:
在Amazon Keyspaces控制台中,选择导航窗格中的Tables。选择Create table。在Table name处输入标识符或使用名称producttags。选择表的Default settings。选择Create table。你应该能在可用表列表中看到新创建的表。
使用CQL API创建新表
除了使用控制台外,你还可以使用CQL API创建表。如果你已经创建了表,可以跳过此步骤。在本帖中,我们将使用Amazon Keyspaces控制台中的内置查询编辑器。你也可以使用任何与Cassandra兼容的工具或驱动程序来使用本部分指定的CQL API。
导航到CQL编辑器,并输入以下CREATE TABLE语句:
sqlCREATE TABLE frozenexampleproducttags( productid UUID tags FROZENltSETltTEXTgtgt PRIMARY KEY((productid)))WITH CUSTOMPROPERTIES = { capacitymode{ throughputmodePAYPERREQUEST } pointintimerecovery{ statusenabled } encryptionspecification{ encryptiontypeAWSOWNEDKMSKEY }}
你应该能在可用表列表中看到新创建的表。
对冻结集合执行选择、插入和更新操作
本节将演示如何对冻结集合执行选择、插入和更新操作。
集合SET
集合由唯一值的元素组成。在集合中不允许重复值,并且只存储一个副本。集合中的值是无序存储的,但在查询时返回的元素按排序顺序排列。考虑一个用例:跟踪与每个产品相关的唯一标签。
使用以下代码插入和选择数据:
sqlINSERT INTO frozenexampleproducttags (productid tags)VALUES (uuid() {electronics homeappliance homeappliance})
SELECT FROM frozenexampleproducttags
更新集合以添加新元素:
sqlUPDATE frozenexampleproducttagsSET tags = {electronics homeappliance energyefficient}WHERE productid = e8b9375939604fc495406fd3d0b783b4
SELECT FROM frozenexampleproducttags
通过添加重复的产品标签更新集合:
sqlUPDATE frozenexampleproducttagsSET tags = {electronics homeappliance energyefficient energyefficient}WHERE productid = e8b9375939604fc495406fd3d0b783b4
SELECT FROM frozenexampleproducttags WHERE productid= e8b9375939604fc495406fd3d0b783b4
结果显示,仅存储独特值,重复值将被忽略。同时,结果按排序顺序显示,无论数据如何插入或更新。
现在尝试修改冻结集合的一部分:
sqlUPDATE frozenexampleproducttags SET tags = tags {newtag} WHERE productid = e8b9375939604fc495406fd3d0b783b4

如以下截图所示,无法修改冻结集合的一部分,尝试部分修改冻结值时会出现错误。
列表LIST
列表类似于集合,但与集合不同的是,存储在列表中的值可以重复。列表按照插入的顺序存储元素,并在查询时以相同顺序返回结果。假设你想为目录中的每个产品维护一个产品评论列表。
我们使用以下模式:
sqlCREATE TABLE frozenexampleproductreviews ( productid UUID PRIMARY KEY reviews FROZENltLISTltTEXTgtgt)
使用以下代码插入和选择数据:
sqlINSERT INTO frozenexampleproductreviews (productid reviews) VALUES (uuid() [Great product! Could be better])
SELECT FROM frozenexampleproductreviews
前面的截图显示了以插入顺序的元素。
使用以下代码更新和选择数据:
sqlUPDATE frozenexampleproductreviews SET reviews = [Great product! Could be better Worth every penny!] WHERE productid = 5b3f981dc3ee420b8fbd4f253f08c56a
SELECT FROM frozenexampleproductreviews WHERE productid = 5b3f981dc3ee420b8fbd4f253f08c56a
现在尝试修改冻结列表的一部分:
sqlUPDATE frozenexampleproductreviews SET reviews[2] = New review! WHERE productid = 5b3f981dc3ee420b8fbd4f253f08c56a
与操作集合一样,当你尝试更新冻结列表时,也会遇到类似的错误。
猎豹加速器pc版映射MAP
映射通过键值对将一项与另一项相关联。映射中的键必须唯一,无法存储重复。键和值都有数据类型。挖掘产品元数据,其中每个键值对表示一个产品属性。
我们使用以下模式:
sqlCREATE TABLE frozenexampleproductmetadata ( productid UUID PRIMARY KEY metadata FROZENltMAPltTEXT TEXTgtgt)
使用以下代码插入和选择数据:
sqlINSERT INTO frozenexampleproductmetadata (productid metadata) VALUES (uuid() {color red warranty 2 years brand XYZ})
SELECT FROM frozenexampleproductmetadata
使用以下代码更新和选择数据:
sqlUPDATE frozenexampleproductmetadata SET metadata = {color blue warranty 2 years brand XYZ weight 5kg material steel} WHERE productid = 4ae8dcc157174d12abb4080b555dff58
SELECT FROM frozenexampleproductmetadata WHERE productid=4ae8dcc157174d12abb4080b555dff58
现在尝试修改冻结映射的一部分:
sqlUPDATE frozenexampleproductmetadata SET metadata[material] = aluminium WHERE productid = 4ae8dcc157174d12abb4080b555dff58
再次会出现错误。
冻结集合的默认最大嵌套深度配额
在Amazon Keyspaces中,集合最多默认可以有五层嵌套。要增加嵌套层数,你可以联系AWS支持。在本节中,我们将分享示例,以展示如何达到最大嵌套深度。我们创建两个表,一个有五层嵌套集合,另一个有六层。我们还会分享当你超出集合最大嵌套深度配额时遇到的错误。
创建五层嵌套集合的表
通过在CQL编辑器中运行以下查询,创建一个有五层嵌套的集合表:
sqlCREATE TABLE frozenexampleproductmetadatav5( productid UUID metadata FROZENltMAPltTEXT FROZENltMAPltTEXT FROZENltMAPltTEXT FROZENltMAPltTEXT FROZENltMAPltTEXT TEXTgtgtgtgtgtgtgtgtgtgt PRIMARY KEY((productid) metadata))WITH CUSTOMPROPERTIES = { capacitymode{ throughputmodePAYPERREQUEST } pointintimerecovery{ statusenabled } encryptionspecification{ encryptiontypeAWSOWNEDKMSKEY }}AND CLUSTERING ORDER BY(metadata ASC)
你也可以通过Amazon Keyspaces控制台创建此表。控制台提供了更直观的定义和可视化嵌套集合的方法。以下截图展示了我们示例表的模式定义体验。
在上述截图中,当达到最大嵌套深度配额时,控制台上会显示一条消息,指示无法再添加嵌套集合。
创建表后,你可以通过选择Amazon Keyspaces控制台导航窗格中的Tables,然后选择你的表名来查看该模式。
要向新创建的五层嵌套表插入数据,请运行以下查询:
sqlINSERT INTO frozenexampleproductmetadatav5 (productid metadata)VALUES ( uuid() { details { color { shade { intensity { type1 redlight type2 reddark } } } } })
查看表中的数据,运行以下查询:
sqlSELECT FROM frozenexampleproductmetadatav5
创建六层嵌套集合的表
由于超出配额,以下六层嵌套冻结集合的创建将失败。如果想提高配额,请联系AWS支持。
sqlCREATE TABLE frozenexampleproductmetadatav6 ( productid UUID PRIMARY KEY metadata FROZENltMAPltTEXT MAPltTEXT MAPltTEXT MAPltTEXT MAPltTEXT MAPltTEXT TEXTgtgtgtgtgtgtgt)
总结
在本文中,我们介绍了Amazon Keyspaces中对冻结集合的支持。我们讨论了冻结集合的多种用例,以及如何使用这三种不同类型的集合:映射、列表和集合。我们列出了尝试部分更新冻结集合时常见的错误,以及在Amazon Keyspaces中达到嵌套冻结集合配额时的错误。如需了解更多信息,请参考Cassandra查询语言CQL元素在Amazon Keyspaces中的使用。
若您有后续问题或反馈,欢迎留言。我们很乐意倾听您的想法和建议。
作者介绍
Naveen Kantamneni 是一名位于凤凰城的高级解决方案架构师,负责Amazon Keyspaces的领域工作。Naveen服务于多样化的客户群体,为其云旅程提供建议,并优化AWS服务以满足关键项目需求。Naveen拥有超过十年丰富的数据库经验,近些年来重点关注NoSQL技术。
Gaurav Sharma 是一名驻扎在圣荷西的高级产品经理,专注于Amazon Keyspaces。Gaurav对数据库、机器学习和分布式系统充满热情。他与客户合作,了解他们的需求,以构建令人愉悦的产品。Gaurav拥有超过十年的产品经理和工程师经验。
创建一个针对您独特数据集的多模态聊天机器人,使用 Amazon Bedrock FMs 机器学习博客
用 Amazon Bedrock FMs 创建基于你独特数据集的多模态聊天机器人关键要点利用 Amazon Bedrock 的多模态基础模型 (FMs) 创建聊天助手,可以处理图像和文本。使用 Retrieval Augmented Generation (RAG) 策略,提高聊天机器人的响应准确性...
成为未来准备好的企业 云企业战略博客
成为未来准备型企业by Mark Schwartz 2023年9月19日发表于 最佳实践,思想领导永久链接评论 关键要点未来准备型企业:高管必须确保组织能够应对快速变化的未来。灵活性与抗风险能力:企业需要建立韧性和灵活性来应对不可预见的情况。战略合作伙伴:选择能够共同面对挑战的合作伙伴,特别是云服务...