写点什么

完全兼容 DynamoDB 协议!GaussDB(for Cassandra) 为 NoSQL 注入新活力

  • 2023-07-03
    广东
  • 本文字数:2643 字

    阅读完需:约 9 分钟

完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力

本文分享自华为云社区《完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力》,作者:GaussDB 数据库 。


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)的高性能、高可靠和高扩展等优势。

号外



7 月 7 日,华为开发者大会 2023 ( Cloud )将拉开帷幕,并将在国内 30 多个城市、海外 10 多个国家开设分会场,诚邀您参加这场不容错过的年度开发者盛会,让我们一起开启探索之旅!


我们将携手开发者、客户、合作伙伴,为您呈现华为云系列产品服务与丰富的创新实践,并与您探讨 AI、大数据、数据库、PaaS、aPaaS、媒体服务、云原生、安全、物联网、区块链、开源等技术话题,展开全面深入的交流。


大会将汇聚全球科学家、行业领袖、技术专家、社区大咖,开设 200 多场开发者专题活动,为全球开发者提供面对面交流与合作的机会,共同探讨技术创新和业务发展。


大会官网:https://developer.huaweicloud.com/HDC.Cloud2023.html


参会购票:https://www.vmall.com/product/10086352254099.html?cid= 211761


点击参与开发者社区活动,观赏技术大咖秀、玩转技术梦工厂,有机会赢取 4000 元开发者礼包!

欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力_数据库_华为云开发者联盟_InfoQ写作社区