• [活动公告] 【有奖征文 第28期】华为云GaussDB:与数据库同行的日子,分享你的故事和技术经验,赢千元大礼包!
    云计算时代,云数据库的需求和技术也在不断的发展,华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。为了让各位开发者0距离体验GaussDB、GaussDB(for MySQL)等产品,特举办《与数据库同行的日子》有奖征文活动,提供一个沙箱实践和一个实操手册,以便大家可以更好地学习和使用华为云数据库产品。☞参与规则第一步:体验GaussDB、GaussDB(for MySQL)等产品点我进行沙箱实验- GaussDB数据库应用程序开发实验点我获取现网实操- GaussDB(for MySQL)场景化综合应用实验(见文末底部附件)点我前往产品免费体验区-云数据库第二步:围绕如下主题之一发表文章① 产品体验:体验GaussDB、GaussDB(for MySQL)等产品,撰写产品体验反馈,如体验感受,使用后建议,操作使用方法等内容。② 最佳实践:分享在使用华为云GaussDB、GaussDB(for MySQL)等产品过程中,解决痛点问题或者完成应用开发实践的案例,进行性能优化、预测性维护、风险排查、NL2SQL等的实践内容。③ 技术攻坚:分享在数据库技术攻坚过程中遇见的技术和理论的难题、解决方向、以及成功的解决方案等内容。④ 人物图鉴:分享与数据库相关的身份在生活和工作中的故事,内容用到的技术手段、收获的感受、困惑和奇思妙想等,比如“数据库应用开发的一天”。☞格式要求1、标题必须以【华为云GaussDB:与数据库同行的日子】结尾,例如华为云GaussDB性能优化【华为云GaussDB:与数据库同行的日子】2、文章需打上【云数据库GaussDB】/【云数据库GaussDB(for MySQL)】/【云数据库GaussDB(for Redis)】/【云数据库GaussDB(for Influx)】/【云数据库GaussDB(for Cassandra)】的标签(至少包含一个) 3、文章末尾需加上活动名称及链接地址,如:我正在参加【有奖征文 第28期】华为云GaussDB:与数据库同行的日子! 链接:4、建议投稿内容字数不少于500字(不含代码段),语句通顺、文章逻辑清晰、排版整洁、代码规范,尽量图文并茂(有技术架构图或者分析图等做支撑)。5、文章保证原创首次发布,如发现投稿内容为转载、复制、抄袭、恶意拼接、灌水等侵权作弊行为,均视为无效并取消参与资格。6、文章须符合征文主题及平台内容规范,不得出现违规负面内容。详见华为云开发者平台内容互动使用协议。7、 参加征文活动的文章作者拥有著作权,华为云拥有使用权、修改权等。点此立即发表博文· 以上奖品均为实体奖品,具体视出库情况而定。☞评分规则专家评分依据 :文章篇幅、经验含金量、排版美观度、阅读量、点赞、收藏等指标综合评分。其他说明: 1、一二三等奖不能叠加。 2、参与奖不与一二三等奖叠加。 3、本期征文的一二三等奖对应四个主题方向分别设置1名、2名和7名。 4、有奖征文投稿数量不计入月度激励活动(即社区明星评选)文章数量。☞你将获得什么?我们会把收到的优质内容汇编成册,并注明原作者,积累行业口碑,开放给圈内开发者下载查阅,提供实践参考。对于贡献优质内容的作者,我们还将送出各项大礼!同时,在华为云站内外10+个技术社区醒目位置进行推荐,给与百万级流量资源。优质作者更可获得长期约稿和更多内容合作机会。☞问题咨询如果有任何问题,可扫描下方二维码咨询。添加微信时请备注:有奖征文+华为云博客昵称!如果大家在征文中遇到有关华为云产品体验方面的问题建议,请到【云声平台】提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。快来华为云社区博客,一起遨游技术海洋吧! 点击立即体验☞部分奖品展示定制保温杯 定制保温杯 游戏机礼盒 定制双肩包 手机支架 定制折叠雨伞 定制连帽卫衣 定制笔记本 定制笔记本
  • [问题求助] 求助--登录GaussDB4Cassandra实例,提示 连接失败。失败原因:您的权限不足。策略不允许执行 das:connections:create 。请添加DAS FullAccess权限
    需要管理员开通权限,但不知道管理员是谁,请大佬帮忙
  • [技术干货] 完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力
    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写入和读取的简单示例:# 创建Clientclient = 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)的高性能、高可靠和高扩展等优势。
  • [技术干货] 无惧百万级并发,GaussDB(for Cassandra)让华为Push推送服务更快触达
    推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。通过集成推送服务,您可以向客户端应用实时推送消息,让应用更精准触达用户,是开发者提升用户感知度和活跃度的一件利器。华为云GaussDB(for Cassandra) 是一款基于计算存储分离架构的分布式数据库,致力于提供稳定可靠、超高并发,兼容Cassandra生态、弹性伸缩、一键部署、快速恢复、监控告警的分布式数据库服务,在Push业务的高效架构建设中,起到了关键的作用。业务挑战Push服务能够协助开发者快速触达用户,其提供的系统级通道推送速度每秒最高可达百万级,消息量每日百亿级,并且支持实时消息回执。如此高到达率的背后,是因为Push使用了大量分布式架构、高性能队列、大数据分析、数据库、AI等技术,用来支撑实时推送、精准送达业务的高效开展。Push的主要业务链路是发送上行消息和下行消息,接下来我们从发送下行消息流程来了解业务在哪些场景上用到了数据库,以及对数据库的要求有哪些?下行消息交互图如下所示:当用户设备网络条件良好且不拥堵的情况下,华为Push服务器在收到消息后,会先将消息存入高性能队列中,然后队列消费消息发送给用户设备。但是当用户设备处于弱网、网络异常,或不在线、熄屏状态时,消息无法到达设备,或此时发送消息价值较低。Push业务为了保障消息不丢失,以及提升消息的有效率,利用数据库为底座,来支持离线消息缓存能力。离线消息缓存是指当消息到达华为Push平台后,如果设备不在线,华为Push平台会将消息缓存起来,等到设备上线后,华为Push平台会将缓存的消息再次推送给用户。如果用户很长时间不在线,这些缓存的消息默认保存24小时,最长保存15天,超期的消息会被Push平台丢弃。此时,在数据库的选型上就需要考虑以下几个问题:推送速度每秒百万级,极端场景下,大部分写入数据库,会有每秒百万写入请求,数据库需要具备超高的写入能力;当设备恢复正常状态时,消息会从数据库中读出发送给用户,消息的实时性会直接影响到消息的价值,此时就要求数据库的读时延低且长尾时延稳定;推送的消息中,多与时事热点相关,容易引发流量突增,且不可预知,这就要求数据库具有快速弹性伸缩的能力;为达成AI智能推送的能力,可能需要对数据库中的数据进行数据挖掘和分析,从而实施智能推送策略,数据库需支持与主流大数据引擎兼容的接口和解决方案。为什么选择GaussDB(for Cassandra)?基于以上挑战,Push业务经过一系列技术选型,最终选择了GaussDB(for Cassandra)数据库。GaussDB(for Cassandra)凭借丰富强大的特性,可以帮助Push业务很好地应对消息缓存的挑战:从请求量上看,GaussDB(for Cassandra)轻松支持千万级并发访问,高并发不在话下;从时延上看,GaussDB(for Cassandra)除了本身具备超低时延的能力外,在并发量大的情况下,可通过扩容和规格变更,增加分区和负载均衡保证业务时延基本无变化;从弹性伸缩上看,GaussDB(for Cassandra)基于存算分离架构,支持秒级存储扩容,分钟级计算扩容,轻松应对流量高峰;从兼容能力看,GaussDB(for Cassandra)支持CQL语法和灵活的数据定义,同时兼容主流的批式/流式处理引擎(Spark/Flink等),且提供动态增量+全量的解决方案,供大数据分析引擎接入,充分满足不同类型数据的接入需求。如何利用GaussDB(for Cassandra)提升消息缓存体验下面,我们将从具体的几个技术改进来聊聊,GaussDB(for Cassandra)是如何帮助Push业务获得更好的消息缓存体验。降本增效降低Push集群对数据库请求量:表结构设计时,将同一用户设备的多条信息存入同一partition中在读取时,可使用范围查询将同一用户设备的多条信息批量查出,且时延较低在写入时,使用Batch写入,降低客户端与数据库的交互次数降低存储使用量:业务科通过TTL、范围删除、单行删除等多种手段,根据业务情况灵活使用达到数据消亡的目的,降低存储用量。弹性伸缩,热点无忧每当出现重大新闻,各大应用均产生了海量的推送消息,Push业务收到消息后,流量激增,集群规模难以支撑巨大的流量。但依靠GaussDB(for Cassandra)的快速扩容能力,Push业务实现了分钟级别的计算扩容,业务不受影响,而且当流量回归正常后,可以进行缩容降低成本。超强可靠性,底座无忧GaussDB(for Cassandra)不仅在读写性能上表现优异,在数据可靠性上也表现突出。因为采用多节点分布式架构,当任意盘或节点出现故障,读写操作会自动切换至其他节点,理论上可以达到N-1个节点故障容忍,即集群任一节点存活即可提供完整服务。同时还支持异地双活,实现业务恢复和故障恢复解耦,Region级高可用。综上所述,GaussDB(for Cassandra) 为Push业务提供了高效、稳定、安全的数据库底座,助力Push业务实现了离线消息缓存架构。我们相信,借助GaussDB(for Cassandra), Push业务在消息推送领域,会为开发者提供更优质的服务和工具,助力企业提升业务价值和用户体验。
  • [技术干货] 业界其他数据库到PostgreSQL复制工具
    1 Ora2pg:基于perl开发的从Oracle迁移到PostgreSQL的工具,最好用的工具之一。高度配置的参数很详细的迁移报告支持并行导入表,job和索引支持字符集转换支持lob迁移相关网址:cid:link_19cid:link_21cid:link_02 pgloader:基于lisp语言开发,核心是调用copy命令实现。支持:MySQL to PostgreSQLSQLite to PostgreSQLMS SQL Server® to PostgreSQL支持并行导入相关网址:cid:link_23cid:link_183 HVR:通过CDC机制来复制 CDC (Change Data Capture) 支持事物,实时复制复制架构支持多种数据库的异构复制相关网址:cid:link_4cid:link_11cid:link_12cid:link_14 pg_chameleon:A replication tool from MySQL to PostgreSQL,基于Python3开发的。通过读取MySQL的binlog,提供实时在线复制的功能。支持从多个MySQL schema读取数据,并将其恢复到目标openGauss数据库中。源schema和目标schema可以使用不同的名称。目前也支持MySQL到OpenGauss。工具使用mysql-replication库从MySQL中提取row images,这些row images将以jsonb格式被存储到openGauss中。在openGauss中会执行一个pl/pgsql函数,解码jsonb并将更改重演到openGauss。相关网站:cid:link_10cid:link_22cid:link_9cid:link_75 ora_migrator基于ora-fdw开发的插件。ora_migrator是一个插件,提供了一系列内置函数,使用这些函数接口以及oracle_fdw插件(PostgreSQL访问oracle的fdw接口),可以将Oracle的schema(包括table,view,sequence,function,procedure, trigger,等)连同数据,迁移到Oracle到PostgreSQLCybertec tool based on oracle_fdw (part of a higher level tool called cybertec migrator)This is a PostgreSQL extension.TL;DR: quite complete, very promising.Written in plpgsql.相关网站: cid:link_8cid:link_13cid:link_26 比较Tool DBMSSCF/PTV/MVUGTeFDWALL✔ ✘✘✘✘✘✘✘PgloaderAll but Oracle✔✔✘✔✔✘✘✘PgChameleonMySQL✔✔✘✘✘✘✘✘Ora2pgOracle✔✔✔✔✔✔✔✔ora_migratorOracle✔✔✔✔✔✘✔✔S: Schema, C: Constraints, F/P: Functions/Procedures, T: Triggers, V/MV: Views/materialized views, U: users, G: Grants, Te: Migration testing相关网站cid:link_20cid:link_16cid:link_6cid:link_14cid:link_15cid:link_3cid:link_17cid:link_5
  • [版主精选] 万物皆可Cassandra——HUAWEI Tag背后的神仙数据库
    什么是HUAWEI Tag?7月4日, 华为旗下首个防丢产品——HUAWEI Tag防丢精灵迎来正式亮相。千万别小看这款重量仅6g的小挂件,支持防丢失提醒不算什么,续航时间竟然长达一整年!当然了,它的能力可不止这些:可以看出,HUAWEI Tag的功能可谓是面面俱到,与同行产品相比相当有吸引力。那这些核心功能是怎么实现的呢?HUAWEI Tag如何做到远距离防丢?我们可以了解一下HUAWEI Tag的工作原理:首先通过数以亿计的华为设备组成华为“ 查找”网络;其次通过组成的华为设备网络实现位置信息更新。以下是HUAWEI Tag通过华为”查找”网络连接的示意图:如图,HUAWEI Tag硬件主要通过蓝牙和华为”查找”网络进行通信,进而定时上报当前位置信息。那么问题来了,假如HUAWEI Tag用户量达到数百万,就意味着同一时刻有数百万个HUAWEI Tag设备通过华为”查找”网络更新位置信息,同时还要定时更新自己的位置信息。这种情况下,海量数据存储和高并发写入将会成为常态。究竟什么样的数据库才能满足这样的要求呢?这就不得不说拥有超高读写性能的GaussDB(for Cassandra)了。GaussDB(for Cassandra)是什么?GaussDB(for Cassandra)是一款华为自研、采用计算存储分离架构的分布式云数据库,在高性能、高可用、高可靠、高安全、弹性扩缩容的基础上,提供了一键部署、备份恢复、监控告警等服务能力;并高度兼容开源Cassandra接口,提供高读写性能。为什么是GaussDB(for Cassandra)?GaussDB(for Cassandra)为优异的写吞吐做了特别优化,同时提供海量数据的多维查询、文本检索、模糊查询等能力,与开源版本相比,性能可提升3倍,能够轻松满足HUAWEI Tag海量数据存储和高并发写入的需求。从配置上来看,GaussDB(for Cassandra)也具备诸多优势, 运行节点数10000+,总数据量5PB+,在线OPS 1000万+,服务平均时延4ms,这些特性都可以极大提高HUAWEI Tag的运行效率,提升用户体验感。 总结当前,GaussDB(for Cassandra)已经广泛应用于IoT、气象、互联网、游戏等诸多领域,对于用户行为分析、用户画像、社交文娱,和海量实时数据处理等场景极其友好,积累了丰富的实践经验。在GaussDB(for Cassandra)的支撑下,HUAWEI Tag防丢精灵表现出了非常强大的核心竞争力,还具备只需99元就能拥有的极致性价比,从而让每一位用户用得放心,寻物省心!附录本文作者:华为云高斯Cassandra团队杭州西安深圳简历投递:zhaojuan.zhao@huawei.com更多技术文章,请关注高斯Cassandra官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1563519101830986高斯Cassandra官方首页:https://www.huaweicloud.com/product/gaussdbforcassandra.html
  • [版主精选] 来了!GaussDB(for Cassandra)新特性亮相
    今天,华为云GaussDB(for Cassandra)携Lucene引擎全新解决方案来啦!当前,互联网、大数据飞速发展,数据量呈爆发式增长,在高并发、高可用、高扩展的业务需求推动下,NoSQL数据库成为了越来越多业务场景的刚需。但在查询方面,传统的NoSQL却有一定的局限性,严格来说,像开源MongoDB、Cassandra、Hbase等都不具备海量数据的多维查询、文本检索、统计分析等能力。多数企业仍然在寻求一套更完美的NoSQL解决方案。华为云原生多模数据库GaussDB NoSQL拥有强大的生态体系,支持键值、宽表、文档、时序四种引擎接口。其中,宽表引擎接口GaussDB(for Cassandra)现已发布Lucene二级索引功能,既具备NoSQL的优势,又能支持多种复杂查询场景,全面提升用户在海量数据场景下的查询体验,凭实力宠粉!相信大家一定有很多疑问,GaussDB(for Cassandra)是什么?二级索引如何使用?Lucene二级索引又有哪些区别?别着急,接下来让我们一一解读。什么是GaussDB(for Cassandra)?GaussDB(for Cassandra)是一款华为自研、采用计算存储分离架构的分布式云数据库,在高性能、高可用、高可靠、高安全、可弹性扩缩容的基础上,提供了一键部署、备份恢复、监控告警等服务能力;并高度兼容开源Cassandra接口,提供高读写性能。当前已经广泛应用于IoT、气象、互联网、游戏等诸多领域。什么是二级索引?我们先来了解下索引的概念。索引是为了加快数据检索速度而创建的一种存储结构,是一种以空间换时间的设计思想。作用可以理解为书的目录,通过目录可快速定位到所需要的内容。在Cassandra中,Primary Key就是索引(也被称为一级索引),在查询的时候,根据Primary Key可以直接检索到对应的记录。而二级索引又称辅助索引,是为了帮助定位到一级索引,然后再根据一级索引找到对应记录。我们平时使用CREATE INDEX语句建立的就是二级索引。当前Cassandra二级索引的痛点有哪些?原生Cassandra中二级索引的实现其实是创建了一张隐式的表,该表的Primary Key是创建索引的列,值为对应的Primary Key,实现相对简单,因此不可避免地带来了一些约束条件:1.第一主键只能用“=”查询;2.第二主键可以使用“=、>、<、>=、<=”;3.索引列只支持“=”查询;4.删除、更新太过频繁的列不适合建立索引;5.High-cardinality列不适合做索引;基于以上约束,Cassandra二级索引能提供的查询功能非常有限。Why Lucene?Lucene是当下最火的开源全文检索引擎工具,具有以下特点:1.稳定、索引性能高;2.是高效、准确、高性能的搜索算法;3.具备丰富的查询类型:支持短语查询、通配符查询、近似查询、范围查询等;4.有强大的开源社区支持,可维护性好;因此,用集成Lucene引擎来补充Cassandra查询能力的弱点是最佳选择,毕竟谁又会拒绝一款性能稳定、持续成长、又更新迭代的搜索引擎呢?Lucene引擎强大的倒排索引和列式存储能力,赋予了GaussDB(for Cassandra)高效的多维查询、文本检索、统计分析等能力,在使用体验上和原生二级索引相似,但同时拥有了更为丰富的语法支持。使用Lucene二级索引后,我的查询发生了哪些变化?更加灵活的查询、过滤方式:所有查询均可不带PK或者带部分PK,并且索引列支持 “>、<、in”等操作符,用户不需要再局限于只使用“=”。强大的文本检索能力:文本检索能力正是Lucene最擅长的,使用起来十分方便,只需要通过关键词like即可实现。你可以这样:SELECT * FROM example WHERE field LIKE 'test%'; // 前缀查询也可以这样:SELECT * FROM example WHERE field LIKE 'start*end'; // 正则匹配还可以这样:SELECT * FROM example WHERE field LIKE '%+lucene +index%'; // 全文搜索功能,性能高效,稳定支持超万亿规格的大数据量统计:select count(*) from example where pk > 1 and expr(lucene_index, 'count'); 多种删除方式:支持single单行删除、partition分区删除、range范围删除,全方位覆盖各种删除场景。DELETE FROM example WHERE pk1='a' AND field=1; // single单行删除DELETE FROM example WHERE pk1='a' AND pk2=5000; // partition分区删除DELETE FROM example WHERE pk1='a' AND pk2=3000 AND ck1=2 AND ck2>'a' AND ck2<'c'; // range范围删除支持扩展json查询接口,轻松应对各种复杂查询场景:扩展的json查询接口提供了丰富的查询语法,用法更多样化。以下是关键字列表:filter在查询语句中json查询的关键字term查询时判断某个document是否包含某个具体的值,不会对被查询的值进行分词查询match将被询值进行分词,进行全文检索range查询指定某个字段在某个特定的范围(范围查询子关键字:"eq"/"gte"/"gt"/"lte"/"lt")bool必须和 "must"、"should"、"must not" 一起组合出复杂的查询mustbool类型的子查询,类型为list,封装"term"、"match"、"range" 查询shouldbool类型的子查询,类型为list,封装"term"、"match"、"range" 查询must notbool类型的子查询,类型为list,封装"term"、"match"、"range" 查询举个栗子:SELECT * FROM example WHERE EXPR(index_field, '{"filter": {"bool": {"should": [{"bool": {"should": [{"bool": {"must": [{"bool": {"should": [{"range": {"ck1": {"lt": 2}, "ck1": {"gte": 4}}}]}}, {"bool": {"should": [{"range": {"field1": {"lt": 2}, "field1": {"gt": 3}}}]}}]}}, {"bool": {"should": [{"term": {"pk1": "a", "pk1": "b", "pk1": "c"}}]}}]}}, {"bool": {"must": [{"range": {"field2": {"gte":5, "lte": 15}, "pk2": {"gt": 2000}}}]}}]}}}')通过条件组合加嵌套,您可以DIY符合自身业务的sql语句,并且最高支持200层json嵌套,再复杂的场景也能处理!华为云GaussDB(for Cassandra)搭载Lucene引擎,通过Lucene二级索引将搜索能力下沉至底层,从根本上解放了应用层查询,兼具多维查询、文本检索、统计分析等多种能力,可以完美地弥补NoSQL弱查询功能的短板,让企业从容应对海量数据的复杂查询场景。还等什么,速来体验吧!附录本文作者:华为云高斯Cassandra团队杭州西安深圳简历投递:zhaojuan.zhao@huawei.com更多技术文章,请关注高斯Cassandra官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1563519101830986高斯Cassandra官方首页:https://www.huaweicloud.com/product/gaussdbforcassandra.html
  • [其他] 华为云GaussDB首次亮相2021服贸会,为数字人民币提供坚实数据底座
     9月3日-7日,以“数字开启未来,服务促进发展”为主题的2021中国国际服务贸易交易会(简称服贸会)在北京举行。华为云GaussDB首次亮相大会,并在会上展示了GaussDB云原生创新技术及金融行业的数字化探索和实践,积极打造坚实的数字人民币数据处理底座,推动千行百业数字化发展。2021服贸会华为云GaussDB展区图 聚焦金融领域,打造坚实的数字人民币数据处理底座 与往届不同的是,今年服贸会聚焦行业热点和发展趋势,突出数字经济和数字贸易,在开幕会上,国家决策者还宣布设立北京证券交易所,打造服务创新型中小企业主阵地。这对于深化金融改革,促进科技与资本融合,推动金融创新发展具有重要意义。 作为服务过众多企业数字化转型的利器,华为云GaussDB早在2019年11月,中国人民银行数字货币研究所与华为签署的合作备忘录中,作为数字货币的坚实数据处理底座参与金融科技建设。华为云GaussDB面向金融行业提供了一系列企业级能力,并希望借助服贸会这一国际平台,与更多来自国内外的伙伴交流分享,助力数字领域的全球化合作和数字经济社会的发展,同时响应国家号召,为数字人民币提供坚实的数据处理底座,为企业提供创新型数字服务。 以云原生技术为抓手,推动金融行业数字化转型 华为云GaussDB是华为基于金融政企经验、华为内部流程IT与云底座深耕10年以上的数据库内核研发优化能力,结合云原生与AI技术倾力打造的金融级分布式数据库,满足客户对高性能、高扩展、高可用、高安全的要求,广泛应用于金融、电力、政府、智慧城市等领域。 高性能:具备企业级复杂事务混合负载能力,支持极佳的线性弹性扩展。在银行实测中,GaussDB通过单节点Numa-Aware和分布式GTM-Lite技术,32节点处理能力达1500万tpmC;基于云原生分布式优化器以及节点/算子/指令全并行架构,复杂查询时延降低82%;而且在1000+节点超大分布式集群弹性扩展方面有很好的线性性能提升。 高可用:通过Switch Turbo技术,实现在同城AZ(可用区)内、同城AZ之间、以及异地跨Region之间快速切换,数据0丢失,满足金融级两地三中心高可用诉求。 高安全:基于业界首个纯软全密态数据库技术,实现了数据在内存中的运算态加密,保证全链路数据安全、数据主权遵从以及应用透明。 华为云GaussDB当前已经助力国有银行在其核心交易系统、渠道以及办公系统中完成分布式改造,保障业务安全合规,支持跨AZ/Region容灾;同时利用华为云UGO(数据库和应用迁移)+DRS(数据复制服务)数据迁移组合解决方案,帮助降低了70%存储过程改造成本,极大加速了银行等金融企业的数字化转型进程。 成功不是一蹴而就的,在GaussDB能力背后,是华为在数据库领域布局全球研究、软硬能力协同、坚持10+年战略投入的结果。展望未来,华为公司有能力、有信心在数据库和数据赛道传承华为优良传统,打造以“解决客户实际问题”为原则的世界级产品,助力金融领域数字人民币高质量发展及企业快而好地完成数字化转型,实现互利共赢,共享服务贸易发展机遇,共促数字贸易发展。更多GaussDB详情了解,欢迎前往华为云官网:https://www.huaweicloud.com/product/dbs.html
  • [技术干货] 【云图说】 第209期 初识云数据库GaussDB(for Cassandra)
    云数据库GaussDB(for Cassandra)介绍页入口,详情请点击链接云数据库GaussDB(for Cassandra)成长地图入口,详情请点击链接小云妹又为大家带来的新知识,今天要着重介绍的是我们的——云数据库GaussDB(for Cassandra)话不多说,直接上图:
  • [技术干货] 如何使用cqlsh访问Cassandra
      Cassandra包中提供了cqlsh工具,cqlsh指的是CQL(Cassandra查询语言) shell。是一种命令行shell,作为客户端,用于执行Cassandra查询语言。 1.下载和安装   https://geminidb-community.obs.cn-north-1.myhuaweicloud.com/Gemini_Cassandra_tools_cqlsh.zip 2. 启动cqlsh   1)解压Cassandra包后,cqlsh脚本在bin目录下。启动命令如下:cqlsh {host} {port} -u {username} -p {password}2)如果您需要经常连接到特定节点,您可以使用配置文件启动, 将参数统一保存在 {cqlshrc_file} 中,执行如下命令即可启动cqlshcqlsh --cqlshrc {cqlshrc_file}     cqlshrc_file中配置如下,更多配置参考附件: cqlshrc.txt[authentication] username = {username} password = {password} [connection] hostname = {host} port = {port}3)想要获取更多的cqlsh的命令和参数,执行 cqlsh --help3. cqlsh常用命令    1)使用HELP命令可以查看所有支持的命令rwuser@cqlsh> HELP Documented shell commands: =========================== CAPTURE  CLS          COPY  DESCRIBE  EXPAND  LOGIN   SERIAL  SOURCE   UNICODE CLEAR    CONSISTENCY  DESC  EXIT      HELP    PAGING  SHOW    TRACING CQL help topics: ================ AGGREGATES               CREATE_KEYSPACE           DROP_TRIGGER      TEXT     ALTER_KEYSPACE           CREATE_MATERIALIZED_VIEW  DROP_TYPE         TIME     ALTER_MATERIALIZED_VIEW  CREATE_ROLE               DROP_USER         TIMESTAMP ALTER_TABLE              CREATE_TABLE              FUNCTIONS         TRUNCATE ALTER_TYPE               CREATE_TRIGGER            GRANT             TYPES    ALTER_USER               CREATE_TYPE               INSERT            UPDATE   APPLY                    CREATE_USER               INSERT_JSON       USE      ASCII                    DATE                      INT               UUID     BATCH                    DELETE                    JSON            BEGIN                    DROP_AGGREGATE            KEYWORDS        BLOB                     DROP_COLUMNFAMILY         LIST_PERMISSIONS BOOLEAN                  DROP_FUNCTION             LIST_ROLES      COUNTER                  DROP_INDEX                LIST_USERS      CREATE_AGGREGATE         DROP_KEYSPACE             PERMISSIONS     CREATE_COLUMNFAMILY      DROP_MATERIALIZED_VIEW    REVOKE          CREATE_FUNCTION          DROP_ROLE                 SELECT          CREATE_INDEX             DROP_TABLE                SELECT_JSON2)如果需要查看特定命令的帮助。可以使用HELP {COMMAND} 去查看特定命令用法比如查看DESC命令的使用方法 HELP DESC,使用DESC命令可以输出集群的相关信息。比如 DESC CLUSTER 可以显示集群的名称及采用的Partitioner;DESC KEYSPACES 可以显示集群中的所有keyspace,包括系统库和自己创建的keyspace。rwuser@cqlsh> DESC CLUSTER; Cluster: Test Cluster Partitioner: Murmur3Partitioner   rwuser@cqlsh> desc KEYSPACES; system_traces  system_schema  system_auth  system  system_distributed3)DDL 和 DML语句演示创建keyspace语法如下:CREATE  KEYSPACE [IF NOT EXISTS] keyspace_name    WITH REPLICATION = {       'class' : 'SimpleStrategy', 'replication_factor' : N }      | 'class' : 'NetworkTopologyStrategy',        'dc1_name' : N [, ...]、    }    [AND DURABLE_WRITES =  true|false] ;创建名为 example的keyspace; replcation选项用于指定副本位置策略为简单策略和所需副本的数量为3。CREATE KEYSPACE IF NOT EXISTS example WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'};使用 DESC example 命令来验证创建。  使用use example 命令切换到创建的keyspacerwuser@cqlsh> DESCRIBE example; CREATE KEYSPACE example WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '3'}  AND durable_writes = true; rwuser@cqlsh> use example; rwuser@cqlsh:example>创建表语法如下:CREATE TABLE [IF NOT EXISTS] [keyspace_name.]table_name (    column_definition [, ...]    PRIMARY KEY (column_name [, column_name ...]) [WITH table_options    | CLUSTERING ORDER BY (clustering_column_name order])    | ID = 'table_hash_tag'    | COMPACT STORAGE]创建一个测试表test_table,定义三个列,分别是user_id,age,user_name。user_id是int类型,表示用户的ID号;age也是int类型,代表用户的年龄;user_name 是text类型,表示用户的名称。 主键为 user_id。CREATE TABLE test_table(user_id int, age int, user_name text, PRIMARY KEY(user_id));同样使用DESC test_table 命令验证创建的表rwuser@cqlsh:example> desc test_table ;   CREATE TABLE example.test_table (     user_id int PRIMARY KEY,     age int,     user_name text ) WITH bloom_filter_fp_chance = 0.01     AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}     AND comment = ''     AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}     AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}     AND crc_check_chance = 1.0     AND dclocal_read_repair_chance = 0.1     AND default_time_to_live = 0     AND gc_grace_seconds = 864000     AND max_index_interval = 2048     AND memtable_flush_period_in_ms = 0     AND min_index_interval = 128     AND read_repair_chance = 0.0     AND speculative_retry = '99PERCENTILE';插入数据语法如下:INSERT INTO [keyspace_name.] table_name (column_list) VALUES (column_values) [IF NOT EXISTS] [USING TTL seconds | TIMESTAMP epoch_in_microseconds]查询数据语法如下:SELECT * | select_expression | DISTINCT partition FROM [keyspace_name.] table_name [WHERE partition_value    [AND clustering_filters    [AND static_filters]]] [ORDER BY PK_column_name ASC|DESC] [LIMIT N] [ALLOW FILTERING]插入4条记录后进行查询。INSERT INTO test_table (user_id, age, user_name) VALUES (1, 17, 'ZhangXiao'); INSERT INTO test_table (user_id, age, user_name) VALUES (2, 16, 'DongXin'); INSERT INTO test_table (user_id, age, user_name) VALUES (3, 17, 'HuFang'); INSERT INTO test_table (user_id, age, user_name) VALUES (4, 15, 'WangGuoHua');   rwuser@cqlsh:example> select * from test_table;    user_id | age | user_name ---------+-----+------------        1 |  17 |  ZhangXiao        2 |  16 |    DongXin        4 |  15 | WangGuoHua        3 |  17 |     HuFang   (4 rows)更新表结构语法如下:ALTER TABLE [keyspace_name.] table_name [ALTER column_name TYPE cql_type] [ADD (column_definition_list)] [DROP column_list | COMPACT STORAGE ] [RENAME column_name TO column_name] [WITH table_properties];发现创建的表结构中缺少 性别gender字段,我们现在要修改一下表结构,新增一个text类型的字段。同样可以使用DESC test_table 命令验证新增的gender列.rwuser@cqlsh:example> ALTER TABLE test_table ADD gender text; rwuser@cqlsh:example> desc test_table ;   CREATE TABLE example.test_table (     user_id int PRIMARY KEY,     age int,     gender text,     user_name text ) WITH bloom_filter_fp_chance = 0.01     AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}     AND comment = ''     AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}     AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}     AND crc_check_chance = 1.0     AND dclocal_read_repair_chance = 0.1     AND default_time_to_live = 0     AND gc_grace_seconds = 864000     AND max_index_interval = 2048     AND memtable_flush_period_in_ms = 0     AND min_index_interval = 128     AND read_repair_chance = 0.0     AND speculative_retry = '99PERCENTILE';更新数据语法如下:UPDATE [keyspace_name.] table_name [USING TTL time_value | USING TIMESTAMP timestamp_value] SET assignment [, assignment] . . . WHERE row_specification [IF EXISTS | IF condition [AND condition] . . .] ;更新每一条记录,增加gender字段的值。UPDATE example.test_table SET gender = 'female' WHERE user_id = 1; UPDATE example.test_table SET gender = 'male' WHERE user_id = 2; UPDATE example.test_table SET gender = 'male' WHERE user_id = 3; UPDATE example.test_table SET gender = 'female' WHERE user_id = 4;删除数据语法如下:DELETE [column_name (term)][, ...] FROM [keyspace_name.] table_name [USING TIMESTAMP timestamp_value] WHERE PK_column_conditions [IF EXISTS | IF static_column_conditions]需要删除user_id 为4的用户的age列rwuser@cqlsh:example> DELETE age FROM example.test_table WHERE user_id=4; rwuser@cqlsh:example> select * from example.test_table WHERE user_id = 4;    user_id | age  | gender | user_name ---------+------+--------+------------        4 | null | female | WangGuoHua   (1 rows)删除user_id 为3的 整条记录rwuser@cqlsh:example> DELETE FROM example.test_table WHERE user_id=3; rwuser@cqlsh:example> select * from example.test_table WHERE user_id = 3;    user_id | age | gender | user_name ---------+-----+--------+----------- (0 rows)清空表数据语法如下:TRUNCATE [TABLE] [keyspace_name.table_name]清空表中的所有记录rwuser@cqlsh:example> truncate example.test_table ; rwuser@cqlsh:example> select * from example.test_table;    user_id | age | gender | user_name ---------+-----+--------+----------- (0 rows)删除表语法如下:DROP TABLE [IF EXISTS] keyspace_name.table_name删除创建的 test_table表rwuser@cqlsh:example> DROP TABLE example.test_table ; rwuser@cqlsh:example> desc example.test_table ;   'test_table' not found in keyspace 'example'删除keyspace语法如下:DROP KEYSPACE [IF EXISTS] keyspace_name删除创建的keyspace examplerwuser@cqlsh:example> drop KEYSPACE example; rwuser@cqlsh:example> desc example; Keyspace 'example' not found.