GaussDB(for Cassandra)新特性发布:兼容DynamoDB协议,为NoSQL注入新活力

举报
Cassandra官方 发表于 2023/06/30 11:26:07 2023/06/30
【摘要】 DynamoDB是一款托管式的NoSQL数据库服务,支持多种数据模型,广泛应用于电商、社交媒体、游戏、IoT等场景。为了进一步满足DynamoDB用户的一些潜在需求,为客户提供更多的选择,华为云分布式NoSQL数据库服务GaussDB(for Cassandra)推出了兼容DynamoDB特性,帮助用户更加丝滑地从DynamoDB迁移到GaussDB(for Cassandra)

使用GaussDB(for Cassandra) DynamoDB的理由

为什么要选择迁移至GaussDB(for Cassandra)?

1.使用成本低

随着业务的发展,企业数据量持续不断地增加,DynamoDB读写请求累加带来的费用也日渐高涨。而GaussDB(for Cassandra)具有较高的性价比,既能提供更高的吞吐,又可以降低一半的DynamoDB使用成本,尤其当数据量较大时成本降低更加明显。

2. 更灵活开放的部署方式

DynamoDB是一项全托管服务,用户使用需要遵循一定的部署方式和规则。相比之下,GaussDB(for Cassandra)可以根据用户的具体需求灵活地部署服务,客户可以选择部署在私有云或公有云上,而不是被锁定在昂贵的平台上。无论在哪种部署环境下,GaussDB(for Cassandra)都可以保证服务的稳定和高效。

3. 平滑的迁移

除了以上两点,GaussDB(for Cassandra)可以完全兼容DynamoDB的语法和数据模型,所以从DynamoDB迁移到GaussDB(for Cassandra)将变得非常容易,应用程序也不需要进行任何修改,迁移工作将会更高效便捷,对业务也更加友好。

GaussDB(for Cassandra)如何兼容DynamoDB?

华为云GaussDB(for Cassandra)在兼容Cassandra协议的基础上,新增了兼容DynamoDB的协议。所以,用户在GaussDB(for Cassandra)上就可以运行DynamoDB的应用程序,同时还能保持原有的CQL协议。服务整体架构如下图所示。

从图中可以看到,Dynamo Rest Server模块在接收用户发起的读写请求的同时,也增加了数据模型映射模块和表达式语法语义解析模块。

在端口 8000(DynamoDB SDK默认)上启用此特性之后,首先,每个节点都会在此端口上接收DynamoDB 客户端的请求,这些HTTP 请求会以 JSON 格式进行解析,以及多种表达式的语法语义解析,然后通过数据映射模型进行转换,再将请求转换为底层Storage Layer协议的请求,最后将数据保存在存储池中。下面列举一些关键的点:

表映射: DynamoDB的表会映射为GaussDB(for Cassandra)的表,每个表都会保存在一个单独的KeySpace中。每当用户创建对应的DynamoDB表(CreateTable请求)时,GaussDB(for Cassandra)会初始化Keyspace,同时创建对应的表。

主键映射: DynamoDB主键(哈希键和排序键)是已知类型,会作为GaussDB(for Cassandra)表的分区键和聚集键。

RMW请求: DynamoDB提供了一些先读后写的请求(R-M-W请求),比如带有条件表达式的写入、带有条件表达式的修改,或者需要返回旧值的写入或修改,这些请求会通过LWT(轻量级事务)相互隔离,因此对于RMW类的请求,GaussDB(for Cassandra)可以做到与DynamoDB完全一致。

表达式: 在DynamoDB中,需要解析更新表达式、条件表达式和投影表达式。虽然可以使用正则表达式和手写的递归下降解析器来解析这些表达式,但考虑到不同表达式的多样性,GaussDB(for Cassandra)会采用ANTLR4来生成解析器代码,这样可以通过定义上下文无关的语法规则,自动生成解析器代码,从而更加灵活地支持DynamoDB的表达式。

索引: 本质上DynamoDB 的索引和GaussDB(for Cassandra)的物化视图是相同的,GaussDB(for Cassandra)只需增加嵌套类型的支持就可以在接口层面完美支持本地二级索引(LSI)和全局二级索引(GSI)。

如何使用GaussDB(for Cassandra) 的兼容DynamoDB特性?

在购买了GaussDB(for Cassandra) 实例后,如果需要使用兼容DynamoDB 的特性,可以提交工单联系华为云运维人员开启该功能。

推荐使用boto3客户端链接GaussDB(for Casssandra),boto3是一个Python客户端库,用于连接DynamoDB和一些其他的服务。执行如下命令安装boto3:

sudo pip install --upgrade boto3

下面是使用boto3写入和读取的简单示例:

# 创建Client
client = boto3.resource('dynamodb', endpoint_url='url',
                        region_name='None', 
                        aws_access_key_id='key_id', 
                        aws_secret_access_key='access_key')
# 插入项目
response = client.put_item(
    TableName='TableName',
    Item={
        'PartitionKey': {'S': 'key1'},
        'SortKey': {'S': 'key2'},
        'attribute_name': {'S': 'attribute_value'}
    }
)
# 获取表中的项目
response = client.get_item(
    TableName='TableName',
    Key={
        'PartitionKey': {'S': 'key1'},
        'SortKey': {'S': 'key2'}
    }
)

需要注意的是这里的endpointurl、awsaccesskeyid和awssecretaccess_key是GaussDB(for Cassandra) 对应的节点地址、用户名和密码。此外,GaussDB(for Cassandra)在语法层面和DynamoDB的使用保持完全一致。

总结

在兼容DynamoDB协议方面,GaussDB(for Cassandra)严格遵循了DynamoDB的语法和数据模型。因此DynamoDB的应用程序可以轻松地迁移至GaussDB(for Cassandra);此外,GaussDB(for Cassandra)还提供了多种自动化管理和运维功能,例如自动备份、故障检测和容错等,有助于用户更加方便地管理和运维数据库。

GaussDB(for Cassandra)作为一种高性能、低成本、开放性强的分布式NoSQL数据库,能够满足用户各种数据存储的需求,不仅为使用DynamoDB的用户提供了一个可靠的替代方案,更可以让用户享受到GaussDB(for Cassandra)的高性能、高可靠和高扩展等优势。

本文作者:华为云高斯Cassandra团队
加入我们:zhaojuan.zhao@huawei.com
更多技术文章,请关注高斯Cassandra官方博客:https://bbs.huaweicloud.cn/community/usersnew/id_1563519101830986
高斯Cassandra官方首页:https://www.huaweicloud.cn/product/gaussdbforcassandra.html

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。