当前位置: 首页 >  互联网技术 >  完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力

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

导读:摘要: DynamoDB是一款托管式的NoSQL数据库服务,支持多种数据模型,广泛应用于电商、社交媒体、游戏、IoT等场景。.本文分享自华为云社区《完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力》,作者:GaussDB 数据库 。

摘要: DynamoDB是一款托管式的NoSQL数据库服务,支持多种数据模型,广泛应用于电商、社交媒体、游戏、IoT等场景。

本文分享自华为云社区《完全兼容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元开发者礼包!

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

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

内容
  • Unity 中的存档系统(本地存档)
    Unity 中的存档系统(本地存
    2023-12-09
    思想.在游戏过程中,玩家的背包、登录、人物系统都与数据息息相关,无论是一开始就设定好的默认数据,还是可以动态存取的数据,
  • Mybatis的工作原理
    Mybatis的工作原理
    2023-12-05
    mybatis的工作原理.mybatis基本工作原理.封装sql ->调用JDBC操作数据库 -> 返回数据封装.JDB
  • 数据分析师如何用SQL解决业务问题?
    数据分析师如何用SQL解决业务问
    2023-12-03
    本文来自问答。.提问:数据分析人员需要掌握sql到什么程度?.请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?
  • 缓存面试解析:穿透、击穿、雪崩,一致性、分布式锁、Redis过期,海量数据查找
    缓存面试解析:穿透、击穿、雪崩,
    2023-12-03
    为什么使用缓存.在程序内部使用缓存,比如使用map等数据结构作为内部缓存,可以快速获取对象。通过将经常使用的数据存储在缓
  • Unity学习笔记--数据持久化Json
    Unity学习笔记--数据持久化
    2023-12-02
    JSON相关.json是国际通用语言,可以跨平台(游戏,软件,网页,不同OS)使用,.json语法较为简单,使用更广泛。
  • 风衣
    风衣
    2023-12-21
    风衣.产品功能.透气性高,能够有效排出体内热量和汗液,保持身体舒适.防风防水,能够有效阻挡外界风雨,保护身体不受天气影响
  • 毛衣
    毛衣
    2024-01-10
    毛衣产品介绍.产品功能.保暖:毛衣采用高品质的羊毛或羊毛混纺材料制成,具有良好的保暖性能,能有效阻挡寒冷空气对人体的侵袭
  • 短裤
    短裤
    2023-12-11
    时尚舒适,让您夏日更自在.产品功能.采用轻薄、透气的面料,给您清新舒适的穿着体验.弹性腰头设计,更贴合您的腰部曲线,穿着
  • 裙子
    裙子
    2023-12-16
    裙子.产品描述.我们的裙子采用高品质的面料制成,款式多样,适合各种场合穿着。无论是休闲的街头漫步,还是正式的商务会议,我
  • 袜子
    袜子
    2023-12-26
    产品介绍.产品功能.我们的袜子采用了优质的天然材料,具有吸湿透气、舒适柔软的特点。特别设计的弹性帮助固定袜子位置,并且不
  • 女童裤子
    女童裤子
    2024-01-10
    女童裤子.产品介绍.我们的女童裤子是为年龄在3-12岁之间的女孩设计的。我们的裤子不仅样式多样,而且舒适耐穿,适合学校、
  • 儿童外套
    儿童外套
    2023-12-06
    儿童外套.产品功能.我们的儿童外套具有多种功能,包括保暖、防风、防水和舒适。它们采用高质量的面料制成,能够有效地抵御寒冷
  • 牛仔裤
    牛仔裤
    2024-01-05
    牛仔裤.牛仔裤,是一种起源于美国的经典服装单品,以其耐穿耐磨的特性,成为了时尚界不可或缺的一部分。无论是男女老少,都能在
  • 婴儿连体衣
    婴儿连体衣
    2023-12-21
    婴儿连体衣.产品描述.婴儿连体衣是专门为婴儿设计的一款便捷舒适的睡衣,它将上衣和裤子融为一体,令宝宝在睡觉及活动时更加方
  • 外套
    外套
    2024-01-10
    外套.产品功能.外套是一种常见的服装,通常可作为保暖服装或装饰性服装穿着。它们有多种形式,包括短款和长款、有无连帽、单宽