华为云用户手册

  • 入门实践 当您购买并连接了 GaussDB (for Redis)数据库实例后,可以根据自身的业务需求使用GaussDB(for Redis)提供的一系列常用实践。 表1 常用最佳实践 实践 描述 数据迁移 阿里云数据库Redis/Tair到GaussDB(for Redis)的迁移 本实践主要介绍阿里云数据库Redis/Tair到GaussDB(for Redis)的迁移方案。使用阿里云的数据迁移工具DTS中的数据迁移功能,该功能支持将阿里云Redis服务的数据迁移至其他Redis服务中,利用该工具避开阿里云 Redis服务屏蔽sync和psync命令限制,实现数据从阿里云Redis服务迁移至华为云GaussDB(for Redis)中。 腾讯云Redis到GaussDB(for Redis)的迁移 本实践主要介绍腾讯云Redis到GaussDB(for Redis)的迁移方案。使用腾讯云的数据迁移工具DTS中的数据同步功能,该功能支持将腾讯云 Redis服务的数据迁移至E CS 自建Redis中,利用该工具避开腾讯云 Redis服务屏蔽分片实际IP,实现数据从腾讯云 Redis服务迁移至华为云GaussDB(for Redis)中。 自建Redis到GaussDB (for Redis)的迁移 本实践主要介绍自建Redis到GaussDB(for Redis)的迁移方案。使用Redis-Shake迁移工具进行源端Redis到目标端GaussDB(for Redis)的迁移。迁移过程支持全量+增量迁移,支持单机/主从/Cluster集群/RDB文件等多种Redis数据源。 RDB到GaussDB (for Redis)的迁移 本实践主要介绍RDB到GaussDB(for Redis)的迁移方案。使用Redis-Shake迁移工具进行源端RDB到目标端GaussDB(for Redis)的迁移。迁移过程支持全量+增量迁移。 Kvrocks到GaussDB(for Redis)的迁移 本实践主要介绍Kvrocks到GaussDB(for Redis)的迁移方案。使用开源工具kvrocks2redis进行Kvrocks到GaussDB(for Redis)的迁移,在此基础上,从GaussDB(for Redis)源码层面对Kvrocks的namespace功能进行适配。 Pika到GaussDB(for Redis)的迁移 本实践主要介绍Pika到GaussDB(for Redis)的迁移方案。pika-port伪装成Pika的从节点运行,通过主从复制的方式进行数据迁移。Pika主节点通过比较pika-port和自己的binlog偏移量判断做全量迁移还是增量迁移。如果需要做全量迁移,Pika主节点会将全量数据快照发送给pika-port,pika-port将解析后的快照数据发送给GaussDB(for Redis)。全量迁移结束后进入增量迁移,pika-port将增量数据解析后以redis命令的形式发送给GaussDB(for Redis)。 SSDB到GaussDB(for Redis)的迁移 本实践主要介绍SSDB到GaussDB(for Redis)的迁移方案。ssdb-port作为源端SSDB数据库的主节点的从节点(replica)运行,通过主从复制的方式进行数据迁移。将获取到的数据解析、转换为Redis支持的格式,并发送到配置文件中指定的Redis实例。全量同步完成后,SSDB中新增的数据也会同步到Redis实例中。 LevelDB到GaussDB(for Redis)的迁移 本实践主要介绍LevelDB到GaussDB(for Redis)的迁移方案。使用自研迁移工具leveldb-port,和LevelDB部署在相同机器上,准备好配置文件,启动迁移即可自动完成全量与增量的迁移。 RocksDB到GaussDB(for Redis)的迁移 本实践主要介绍RocksDB到GaussDB(for Redis)的迁移方案。使用自研迁移工具rocksdb-port,和RocksDB部署在相同机器上,准备好配置文件,启动迁移即可自动完成全量与增量的迁移。 AWS ElasticCache for Redis数据库到GaussDB(for Redis)的迁移 本实践主要介绍AWS ElasticCache for Redis到GaussDB(for Redis)的迁移方案。AWS ElasticCache for Redis通过备份导出RDB文件后,通过Redis-Shake迁移工具的数据恢复(restore)将数据迁移到GaussDB(for Redis)。 数据备份 管理自动备份 介绍如何在数据库实例的备份时段中创建数据库实例的自动备份,系统根据您指定的备份保留期保存数据库实例的自动备份。 管理手动备份 介绍如何为数据库实例手动备份数据,用户可以通过手动备份恢复数据,从而保证数据可靠性。 数据恢复 恢复备份到新实例 介绍如何使用已有的自动备份或手动备份恢复实例数据到新建实例,恢复后的数据与该备份生成时的实例数据一致。 日志管理 慢日志 GaussDB(for Redis)支持查看数据库级别的慢日志,执行时间的单位为ms。通过该日志,可查找出执行效率低的语句,以便优化。 父主题: 快速入门
  • 完整示例 #!/usr/bin/python import pymongo import random mongodbUri = 'mongodb://mongouser:thepasswordA1@10.66.187.127:27017/admin' client = pymongo.MongoClient(mongodbUri) db = client.somedb db.user.drop() element_num=10 for id in range(element_num): name = random.choice(['R9','cat','owen','lee','J']) sex = random.choice(['male','female']) db.user.insert_one({'id':id, 'name':name, 'sex':sex}) content = db.user.find() for i in content: print i 更多PyMongo接口请参考官方文档。 父主题: 基于Python连接实例
  • 修订记录 发布日期 修订记录 2023-08-30 第三十三次正式发布。 新增计费说明。 2023-07-18 第三十二次正式发布。 新增入门实践。 2023-06-30 第三十一次正式发布。 开启冷存储,GaussDB(for Influx)单节点实例支持选购冷存储。 扩容冷存储,GaussDB(for Influx)单节点实例支持扩容冷存储。 新增事件监控。 2023-04-28 第三十次正式发布。 新增购买单节点实例。 2023-03-31 第二十九次正式发布。 新增操作系统更新。 2022-08-11 第二十八次正式发布。 新增常见问题:资源冻结/释放/删除/退订。 2022-07-22 第二十七次正式发布。 新增最佳实践:购买并连接GaussDB(for Influx)实例。 2022-05-07 第二十六次正式发布。 使用规范和建议,增加查询规范。 2022-04-02 第二十五次正式发布。 新增常见问题:如何使用GaussDB(for Influx)的hint功能。 购买集群实例,修改实例名称,优化中文名称长度。 2022-03-09 第二十四次正式发布。 新增常见问题:GaussDB(for Influx) 是否支持Grafana访问和如何通过Grafana连接GaussDB(for Influx)。 2022-01-27 第二十三次正式发布。 支持批量续费、退订、按需计费转包年/包月、包年/包月转按需计费操作。 2021-09-06 第二十二次正式发布。 使用规范和建议,新增GaussDB(for Influx)使用规范和建议。 2021-07-20 第二十一次正式发布。 开启冷存储,GaussDB(for Influx)支持选购冷存储。 冷热数据分离,GaussDB(for Influx)支持冷热数据分离。 2021-06-30 第二十次正式发布。 购买集群实例,GaussDB(for Influx)实例名称支持中文。 修改实例安全组,GaussDB(for Influx)支持修改安全组。 2021-06-15 第十九次正式发布。 调整文档结构。 2021-04-30 第十八次正式发布。 数据库实例规格,增加不同规格实例支持的最小存储容量。 备份概述,支持增量备份和恢复。 2021-04-15 第十七次正式发布。 调整文档结构。 GaussDB(for Influx)支持增量备份和恢复。 2021-01-30 第十六次正式发布。 实例操作列增加规格变更、添加节点和磁盘扩容入口。 GaussDB(for Influx)系统参数优化。 2020-11-30 第十四次正式发布。 GaussDB(for Influx)支持节点扩容。 GaussDB(for Influx)支持参数模板功能。 2020-10-30 第十三次正式发布。 资源标签支持20个配额。 扩容磁盘支持每次至少选择1GB扩容量。 2020-09-30 第十二次正式发布。 支持实例配额管理。 GaussDB(for Influx)支持备份管理功能。 GaussDB(for Influx)支持回收站功能。 GaussDB(for Influx)支持重启实例。 2020-08-30 第十一次正式发布。 GaussDB(for Influx)支持如下功能: 支持修改实例名称 支持实例回收站 支持包周期计费模式 新增监控指标 2020-07-30 第十次正式发布。 GaussDB(for Influx)支持如下功能: 公网访问 时序洞察 2020-06-30 第九次正式发布。 GaussDB(for Influx)支持如下功能: 存储扩容 支持跨AZ级容灾 2020-01-20 第五次正式发布。 GaussDB(for Influx)公测。
  • 使用须知 恢复时,新实例节点数应大于等于原实例的节点数。 恢复时,新实例的空间大小必须大于或等于原实例的空间大小。 当前不支持增量备份,PITR功能。 当前不支持恢复到当前实例。 恢复时,可以进行规格缩容,但是缩容的内存规格大小应大于等于备份时实际内存使用大小。 备份恢复到新实例使用原实例的参数组恢复,保证恢复出来的参数跟原来实例的一致。 在实例恢复时,会将备份文件从OBS桶下载到恢复实例的数据目录中,OBS的下载带宽在40MB/s。
  • 成本分配 成本管理的基础是树立成本责任制,让各部门、各业务团队、各责任人参与进来,为各自消耗云服务产生的成本负责。企业可以通过成本分配的方式,将云上成本分组,归集到特定的团队或项目业务中,让各责任组织及时了解各自的成本情况。 华为云成本中心支持通过多种不同的方式对成本进行归集和重新分配,您可以根据需要选择合适的分配工具。 通过关联账号进行成本分配 企业主客户可以使用关联账号对子客户的成本进行归集,从而对子账号进行财务管理。详细介绍请参见通过关联账号维度查看成本分配。 通过企业项目进行成本分配 在进行成本分配之前,建议开通企业项目并做好企业项目的规划,可以根据企业的组织架构或者业务项目来划分。在购买云资源时选择指定企业项目,新购云资源将按此企业项目进行成本分配。详细介绍请参见通过企业项目维度查看成本分配。 图1 选择企业项目 通过成本标签进行成本分配 标签是华为云为了标识云资源,按各种维度(例如用途、所有者或环境)对云资源进行分类的标记。推荐企业使用预定义标签进行成本归集,具体流程如下: 图2 添加标签 详细介绍请参见通过成本标签维度查看成本分配。 使用成本单元进行成本分配 企业可以使用成本中心的“成本单元”来拆分公共成本。公共成本是指多个部门共享的计算、网络、存储或资源包产生的云成本,或无法直接通过企业项目、成本标签分配的云成本。这些成本不能直接归属于单一所有者,因此不能直接归属到某一类别。使用拆分规则,可以在各团队或业务部门之间公平地分配这些成本。详细介绍请参见使用成本单元查看成本分配。 父主题: 成本管理
  • 在续费管理页面开通自动续费 登录管理控制台。 单击“控制台”页面上方“费用与成本”,在下拉菜单中选择“续费管理”,进入“续费管理”页面。 自定义查询条件。 可在“自动续费项”页签查询已经开通自动续费的资源。 可对“手动续费项”、“到期转按需项”、“到期不续费项”页签的资源开通自动续费。 图2 续费管理 为包年/包月资源开通自动续费。 单个资源开通自动续费:选择需要开通自动续费的实例,单击操作列“开通自动续费”。 图3 单个资源开通自动续费 批量资源开通自动续费:选择需要开通自动续费的实例,单击列表左上角的“开通自动续费”。 图4 多个资源开通自动续费 选择续费时长,并根据需要设置自动续费次数,单击“开通”。 图5 开通自动续费
  • 设计建议 建议1:合理控制数据库规模和数量。 建议单表数据量不超过1000亿。 建议单库不超过100个表。 建议单表字段数上限控制在20~50个。 建议2:提前进行资源估算,估算出对GaussDB(for Cassandra)服务器要求。 根据业务估算需要使用N节点集群,建议在评估的基础上冗余N/2个节点,保证容忍故障节点个数N/2,以支撑故障场景下性能保持一致。 正常业务压力下每个节点CPU使用率限制使用在50%,防止业务出现高峰波动。 建议3:大规模GaussDB(for Cassandra)存储要考虑基于业务场景做数据库性能测试。 对于请求量、数据量比较大的业务场景,需要提前做性能摸底,原因是业务读写比例和随机访问模式以及不同的规格实例,性能差异较大。 建议4:数据库集群拆分粒度要合适。 分布式场景,考虑节约资源费用和维护成本,一个服务内部各个微服务可以共用一个GaussDB(for Cassandra)集群。 服务内部,根据数据重要程度、表数量和单表记录数,可进一步拆分成不同集群。 建议5:避免单条数据部分字段频繁更新。 建议6:List、Map、Set等嵌套类型,当元素超过一定数量,会影响读取性能,建议当元素过多时,采用转换成JSON字符串的形式进行存储。
  • 设计规范 规则1:禁止在数据库中存储图片、文件等大数据。图片或文件等大数据建议存储到 对象存储服务 中。 规则2:单行key和value数据大小最大不能超过64KB,平均大小不超过10KB。 规则3:任何表的设计都要考虑到数据的删除策略,表中的数据不能无限的增长而不删除。 规则4:设计分区键以均匀分发工作负载,避免出现数据倾斜问题。 表的主键的分区键部分确定存储表数据的逻辑分区,如果分区键分布不均衡,会导致节点与节点之间数据和负载不均衡,从而出现数据倾斜的问题。 如表1为一些常见分区键分布均匀性的效果对比。 表1 常见分区键分布均匀效果 分区键值 分区键分布均匀性 用户 ID,应用程序中有许多用户。 好 状态代码,只有几个可用的状态代码。 差 项目创建日期,四舍五入至最近的时间段 (例如,天、小时或分钟)。 差 设备 ID,每个设备以相对类似的间隔访问数据。 好 设备 ID,被跟踪的设备有很多,但到现在为止,其中某个设备比其他所有设备更加常用。 差 如下为常见均匀分布分区键的设计方案 使用随机后缀分区 跨分区键空间更均匀分发负载的一种策略是将随机数字添加到分区键值的末尾。 例如:对于表示当天日期的分区键,可能会选择介于1和200之间的随机数并将它作为后缀连接到该日期。这将生成分区键值 (如2014-07-09.1、2014-07-09.2,以此类推,直到 2014-07-09.200)。由于随机化分区键,因此将跨多个分区均匀分布每天对表的写入,这将提高并行度和总体吞吐量。 但是要读取指定日期的所有项目,必须针对所有后缀查询项目,然后合并结果。例如:将先针对分区键值Query发布2014-07-09.1请求,然后再针对Query发布另一个2014-07-09.2,以此类推,直到2014-07-09.200。最后应用程序必须合并所有Query请求的结果。 使用计算得出的后缀分区 随机化策略可以显著提高写入吞吐量,但难以读取特定项目,因为不知道在写入项目时使用的是什么后缀值。要使各个项目的读取变得简单,可使用其他策略。不是使用随机数在分区间分发项目,而是使用可根据查询内容计算出的数字。 请考虑上述示例,其中表在分区键中使用当天日期。现在假设每个项目都有可访问的OrderId属性,并且除了日期,还最常需要按订单ID查找项目。在应用程序将项目写入表之前,它可根据订单ID计算得出一个哈希后缀并将此后缀追加到分区键日期。此计算可能生成一个介于1和200之间、分发甚是均匀的数字 (类似于随机策略所生成的数字)。 简单的计算可能已足够,如订单ID中字符的UTF-8码位值的积,取模200,+1。则分区键值是与计算结果连接的日期。 通过此策略,写入将在分区键值之间均匀分布,从而在物理分区之间均匀分布。可以轻松针对特殊项目和日期执行GetItem操作,因为可通过特定OrderId值计算出分区键值。 要读取指定日期的所有项目,仍必须Query每个2014-07-09.N键(其中,N为1~200),应用程序之后必须合并所有结果。好处是避免了一个“热点”分区键值占用所有工作负载。 规则5:合理设计分区key,均匀访问数据,避免出现大key或者热key问题。 大key问题:大key的产生,最主要的原因是主键设计不合理,使得单个分区的记录数或数据量过大。一旦某一个分区出现极大时,对该分区的访问,会造成分区所在服务器的负载变高,甚至造成节点内存溢出(即OOM)等。 热key问题:在日常生活中,经常会发生各种热门事件,应用中对该热点新闻进行上万次的点击浏览和评论时,会形成一个较大的请求量,这种情况下会造成短时间内对同一个key频繁操作,会导致key所在节点的CPU和负载升高,从而影响落在该节点的其他请求,导致业务成功率下降。诸如此类的还有热门商品促销,网红直播等场景,这些典型的读多写少的场景也会产生热点问题。 如何处理大key和热key问题请参见如何检测和解决大key与热key问题。 另外,对GaussDB(for Cassandra)数据库的读能力有更高要求的,读多写少的场景,可以考虑把热点数据缓存到GaussDB(for Redis)。 规则6:单个分区键的行数不能超过10万,单个分区磁盘空间不超过100MB。 单个分区键的行数不能超过10万。 单个分区键下记录大小不能超过100MB。 规则7:所有写入GaussDB(for Cassandra)的数据,提供数据副本强一致性,但是不支持事务。 表2 GaussDB(for Cassandra)一致性说明 一致性类型 是否支持一致性 说明 并发写一致性 支持 GaussDB(for Cassandra)不支持事务,数据写入强一致。 表之间一致性 支持 GaussDB(for Cassandra)不支持事务,数据写入强一致。 数据迁移一致性 最终一致性 采用DRS迁移提供数据抽样对比验证能力。业务自己完成迁移时,需要业务自行完成迁移前后数据校验。 规则8:大规模存储要重点考虑数据库拆分。 GaussDB(for Cassandra)整个集群的节点数控制在100以内,超过100节点要考虑拆分,一般有垂直拆分和水平拆分两种方法。 垂直拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库等,这种方式多个数据库之间的表结构不同。 水平拆分:将同一个表的数据进行分块保存到不同的数据库中,这些数据库中的表结构完全相同。 规则9:设计上避免大面积删除导致的墓碑问题。 尽量使用TTL代替Delete操作。 不要出现大面积删除数据,尽量通过主键前缀删除。 单个分区键内一次范围删除所包含行数不超过1000。 范围查询避免查询已删除数据。 不推荐在单个分区内频繁做范围删除。
  • 前提条件 连接数据库的弹性云服务器必须和GaussDB(for Mongo)实例之间网络互通,可以使用curl命令连接GaussDB(for Mongo)实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 测试数据 本章介绍GaussDB(for Redis)性能测试结果,根据上述测试方法操作,展示在各种数据模型、测试场景、Workload模型组合下的性能指标。当前性能白皮书仅呈现中小规格并发能力下的数据库性能数据,如需更高的并发能力,可水平或垂直升级数据库规格。 总数据量小于内存场景下的测试数据请参见表1。 总数据量大于内存场景下的测试数据请参见表2。 表1 总数据量小于内存场景测试数据 实例规格 测试模型 Workload模型 QPS(次/秒) Average Latency(毫秒) P99 Latency(毫秒) 4U*3节点 value_length=100字节 clients=90 100% Write 125590 0.66 1.85 value_length=100字节 clients=105 100% Read 139741 0.62 1.51 value_length=100字节 clients=90 50% Read+50% Write 125620 Read:0.56 Read:1.32 Write:0.55 Write:1.30 8U*3节点 value_length=100字节 clients=128 100% Write 216392 0.62 1.92 value_length=100字节 clients=128 100% Read 202970 0.62 1.89 value_length=100字节 clients=128 50% Read+50% Write 212052 Read:0.63 Read:1.94 Write:0.63 Write:1.92 表2 总数据量大于内存场景测试数据 实例规格 测试模型 Workload模型 QPS(次/秒) Average Latency(毫秒) P99 Latency(毫秒) 4U*3节点 value_length=100字节 clients=75 100% Write 123942 0.62 1.30 value_length=100字节 clients=96 100% Read 125351 0.63 1.54 value_length=100字节 clients=96 50% Read+50% Write 122485 Read:0.64 Read:1.65 Write:0.64 Write:1.61 8U*3节点 value_length=100字节 clients=120 100% Write 196596 0.62 2.02 value_length=100字节 clients=120 100% Read 187716 0.62 1.90 value_length=100字节 clients=120 50% Read+50% Write 197097 Read:0.62 Read:1.94 Write:0.62 Write:1.94 注:clients是连接数,对应memtier命令中t和c字段的乘积。 父主题: 性能白皮书
  • 迁移原理 使用开源工具kvrocks2redis进行Kvrocks到GaussDB(for Redis)的迁移,在此基础上,从GaussDB(for Redis)源码层面对Kvrocks的namespace功能进行适配。 迁移过程分为全量和增量两个阶段:迁移开始后,先进行全量迁移,此时对kvrocks打快照,并记录对应的数据版本(seq)。然后解析全量数据文件成redis命令写入GaussDB(for Redis)。全量迁移完成后进入持续的增量迁移过程,迁移工具循环给Kvrocks发送PSYNC命令,将获取到的增量数据不断转发给GaussDB(for Redis),完成增量迁移 。
  • 实例状态 数据库实例状态是数据库实例的运行情况。可以通过管理控制台查看数据库实例状态。 表1 实例状态 状态 说明 正常 数据库实例正常和可用。 异常 数据库实例不可用。 创建中 正在创建数据库实例。 创建失败 数据库实例创建失败。 重启中 正在重启数据库实例。 重置密码中 正在重置管理员密码。 节点扩容中 正在扩容该实例下的节点个数。 节点缩容中 正在删除该实例下的节点。 存储扩容中 正在扩容实例的磁盘容量。 规格变更中 正在变更实例的CPU和内存规格。 转包周期中 实例的计费方式正在由“按需计费”转为“包年/包月”。 转按需中 实例的计费方式正在由“包年/包月”转为“按需计费”。 备份上传中 正在上传备份文件。 备份中 正在创建数据库备份。 恢复检查中 该实例下的备份正在恢复到新实例。 SSL切换中 正在开启或关闭SSL安全连接。 冻结 账户余额小于或等于0元,系统对该用户下的实例进行冻结。您需前往费用中心充值成功,欠款核销后,冻结的实例才会解冻。 解冻中 欠款核销后,正在解冻数据库实例。 包周期变更资源检查中 包周期实例在进行变更过程中所持续的状态。 父主题: 用户指南
  • 使用须知 默认情况下,一个租户可以创建500条安全组规则。 为一个安全组设置过多的安全组规则会增加首包延时,因此,建议一个安全组内的安全组规则不超过50条。 目前一个GaussDB(for Cassandra)实例仅允许绑定一个安全组。 内网和公网连接实例时,需要配置的安全组规则请参见表1。 表1 安全组规则说明 场景 配置的安全组规则说明 内网连接实例 使用内网连接GaussDB(for Cassandra)实例时,设置安全组规则分为以下两种情况: ECS与GaussDB(for Cassandra)实例在相同安全组时,默认ECS与GaussDB(for Cassandra)实例互通,无需设置安全组规则。 ECS与GaussDB(for Cassandra)实例在不同安全组时,需要为GaussDB(for Cassandra)和ECS分别设置安全组规则。 设置GaussDB(for Cassandra)安全组规则:为GaussDB(for Cassandra)所在安全组配置相应的入方向规则,具体操作请参见操作步骤。 设置ECS安全组规则:安全组默认规则为出方向上数据报文全部放行,此时,无需对ECS配置安全组规则。当在ECS所在安全组为非默认安全组且出方向规则非全放通时,需要为ECS所在安全组配置相应的出方向规则。具体操作请参见《弹性云服务器用户指南》中“设置安全组规则”章节。 公网连接实例 使用公网连接GaussDB(for Cassandra)实例时,需要为GaussDB(for Cassandra)所在安全组配置相应的入方向规则。具体操作请参见操作步骤。
  • 如何使用GaussDB(for Influx)的hint功能 GaussDB(for Influx)支持hint功能,来提高查询性能。该功能只能用于单时间线(单时间线可以简单理解为查询语句中需要指定所有的tag的值)查询的场景,使用hint功能时只需要在查询语句前面加上“/*+ full_series */” 即可。 例如: 常规查询语句: select value from cpu where server_id=1; 使用hint查询对应的语法则为: select /*+ full_series */ value from cpu where server_id=1; 父主题: 产品咨询
  • 操作步骤 获取GaussDB(for Redis)实例的负载均衡地址和端口信息。 负载均衡地址的查看方法请参见查看负载均衡地址及端口。 端口信息的获取方法请参见查看实例节点端口。 登录弹性云服务器,具体操作请参见《弹性云服务器快速入门》中“登录弹性云服务器”。 使用Golang客户端连接GaussDB(for Redis)实例,本文以使用go-redis SDK为例。 go-redis的下载地址为:https://github.com/go-redis/redis。 使用单机方式连接GaussDB(for Redis)集群 package main import ( "fmt" "github.com/go-redis/redis" ) func main() { client := redis.NewClient(&redis.Options{ Addr: "xx.xx.xx.xx:8635", //步骤1获取到的负载均衡地址 Password: "xx", // 密码 DB: 0, // 使用默认的0号数据库 }) pong, err := client.Ping().Result() fmt.Println(pong, err) err = client.Set("key1", "value1", 0).Err() if err != nil { panic(err) } val, err := client.Get("key1").Result() if err != nil { panic(err) } fmt.Println("key1", val) } 预期输出为: PONG key1 value1 使用go-redis连接GaussDB(for Redis)时,需要使用普通模式,不能使用集群模式,如上示例代码所示。 上述实例代码中的GaussDB(for Redis)地址和密码,请根据实际情况填写。 使用集群方式连接GaussDB(for Redis)集群 package main import ( "fmt" "github.com/go-redis/redis" ) func main() { client := redis.NewClusterClient(&redis.ClusterOptions{ Addrs: []string{ // 步骤1获取到的负载均衡地址 " xx.xx.xx.xx:8635", }, Password: "xx", // 密码 }) pong, err := client.Ping().Result() fmt.Println(pong, err) err = client.Set("key1", "value1", 0).Err() if err != nil { panic(err) } val, err := client.Get("key1").Result() if err != nil { panic(err) } fmt.Println("key1", val) }
  • 典型应用 IoT传感器时序数据分析 物联网应用,规模和可靠性至关重要。GaussDB(for Influx)提供了高吞吐量和并发性,您可以通过快速的响应时间来支持大量的连接。因此非常适合要求苛刻的物联网应用。 优势: 超强写入 小批量写入场景性能为开源版本InfluxDB的4.5倍,大批量写入场景性能为开源版本InfluxDB的3.3倍。 弹性扩展 基于计算存储分离的分布式架构,分钟级计算节点扩容,应对业务高峰期。 证券及加密货币交易数据 GaussDB(for Influx)存储用户银行的银行流水,可应用于金融行业的风控体系,构建反欺诈系统。 优势: 高效查询 就近区域部署,快速响应查询。 实时分析 数据同步上云,支持云上时序数据分析。 软硬件设备实时监控 使用GaussDB(for Influx)保存用户行为数据,支撑精准营销和用户画像。 优势: 高效写入和查询 最高每天处理万亿级时间点写入能力,多节点多线程并行高性能查询。 实时分析 数据同步上云,支持云上时序数据分析。 都市环保数据采集 GaussDB(for Influx)支持海量时间线的写入,为环保采集点提供稳定可靠的数据库支撑。 优势: 高效写入和查询 向量化查询引擎,高效的聚合、卷积等时序数据查询算子,可高效处理高并发大数据量写入和查询。
  • 使用须知 磁盘容量变更目前既支持扩容,也支持缩容。 GaussDB(for Redis)磁盘用量超过95%时,实例会进入只读模式,此时实例只支持读取和删除数据,不支持写入新数据。为了避免影响业务访问,建议当磁盘用量超过80%时,及时进行磁盘扩容。 缩容场景下,待变更到的磁盘容量必须大于已用量的125%,向上取整。 容量变更无需重启实例,在此期间,服务不中断,不影响您正常使用数据库。 存储详情支持在“实例管理”页面显示,您可以联系客服进行开通。
  • 成本分配 成本管理的基础是树立成本责任制,让各部门、各业务团队、各责任人参与进来,为各自消耗云服务产生的成本负责。企业可以通过成本分配的方式,将云上成本分组,归集到特定的团队或项目业务中,让各责任组织及时了解各自的成本情况。 华为云成本中心支持通过多种不同的方式对成本进行归集和重新分配,您可以根据需要选择合适的分配工具。 通过关联账号进行成本分配 企业主客户可以使用关联账号对子客户的成本进行归集,从而对子账号进行财务管理。详细介绍请参见通过关联账号维度查看成本分配。 通过企业项目进行成本分配 在进行成本分配之前,建议开通企业项目并做好企业项目的规划,可以根据企业的组织架构或者业务项目来划分。在购买云资源时选择指定企业项目,新购云资源将按此企业项目进行成本分配。详细介绍请参见通过企业项目维度查看成本分配。 图1 选择企业项目 通过成本标签进行成本分配 标签是华为云为了标识云资源,按各种维度(例如用途、所有者或环境)对云资源进行分类的标记。推荐企业使用预定义标签进行成本归集,具体流程如下: 图2 添加标签 详细介绍请参见通过成本标签维度查看成本分配。 使用成本单元进行成本分配 企业可以使用成本中心的“成本单元”来拆分公共成本。公共成本是指多个部门共享的计算、网络、存储或资源包产生的云成本,或无法直接通过企业项目、成本标签分配的云成本。这些成本不能直接归属于单一所有者,因此不能直接归属到某一类别。使用拆分规则,可以在各团队或业务部门之间公平地分配这些成本。详细介绍请参见使用成本单元查看成本分配。 父主题: 成本管理
  • 使用须知 目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问。 该弹性云服务器必须处于目标实例所属安全组允许访问的范围内。 如果目标实例所属安全组为默认安全组, 则无需设置安全组规则。 如果目标实例所属安全组非默认安全组,请查看安全组规则是否允许该弹性云服务器访问。 如果安全组规则允许弹性云服务器访问,即可连接实例。 如果安全组规则不允许弹性云服务器访问,需要在实例安全组添加一条入方向的访问规则。具体操作请参考设置安全组规则。
  • 指定每次查询获取的行数 在创建集群连接时,可以指定每次查询获取的行数,具体为下列setFetchSize内参数。 Cluster cluster = Cluster.builder() .addContactPoint(contactPoint) .withPort(8636) .withQueryOptions(new QueryOptions().setFetchSize(20)) .build(); 设置成功后,在该配置下产生的会话,都会一次只获取设置的行数,在缓存(20行)耗尽会触发向服务端拉取数据的请求,并且等待返回,会有相应的等待时间延迟。
  • 提前获取下一页 如果需要手动提前获取更多行存入当前结果集避免等待,可以参考以下代码,在结果集剩余10行时,先提交并行从服务器拉取更多行的请求。 ResultSet rs = session.execute("select * from space3.table3;"); for (Row row : rs) { if (rs.getAvailableWithoutFetching() == 10 && !rs.isFullyFetched()){ System.out.println("pre-fetch more rows. "); rs.fetchMoreResults(); } System.out.println(row); }
  • 保存当前分页状态并复用 保存当前分页状态。 PagingState pagingState = resultSet.getExecutionInfo().getPagingState(); String string = pagingState.toString(); byte[] bytes = pagingState.toBytes(); 加载当前分页状态并进行复用。 PagingState pagingState = PagingState.fromString(string); Statement st = new SimpleStatement("your query"); st.setPagingState(pagingState); ResultSet rs = session.execute(st); 注:分页情况只可以获取、储存和复用,不支持修改并应用在新的其他查询语句上。 Cassandra并不支持offset查询,即无法跳过结果集的一部分,直接获取指定index范围的结果。如果需要对应功能,需要在业务中进行封装模拟,但该查询仍然是顺序查询,客户可以丢弃无效结果。更多高级用法与介绍可以参考DataSax Java驱动程序3.11。
  • 计费示例 假设您在2023/03/08 15:50:04购买了一个包年/包月GaussDB(for Mongo)实例(规格:4 vCPUs 16GB,节点数量:3,存储空间:100GB,备份空间:110GB(赠送100GB,后续收费空间10GB)),计费资源包括实例规格(vCPU、内存、节点数量)、存储空间、备份空间、公网带宽。购买时长为一个月,并在到期前手动续费1个月,则: 第一个计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59 第二个计费周期为:2023/04/08 23:59:59 ~ 2023/05/08 23:59:59 2023/04/08 23:59:59~2023/05/01 23:59:59期间,使用免费备份空间50GB。 2023/05/01 23:59:59~2023/05/08 23:59:59期间,使用计费备份空间10GB,计费时长168小时。 图1给出了上述示例配置的费用计算过程。 图中价格仅为示例,实际计算请以云数据库 GaussDB NoSQL价格详情中的价格为准。 图1 包年/包月GaussDB(for Mongo)费用计算示例 按需计费模式下,各计费项的计费示例请参见计费示例。
  • 计费说明 GaussDB(for Mongo)的计费项由实例规格费用、存储空间费用、备份空间费用和公网流量费用组成。具体内容如表1所示。 标 * 的计费项为必选计费项。 表1 GaussDB(for Mongo)实例计费项 计费项 计费项说明 适用的计费模式 计费公式 * 实例规格 计费因子:vCPU和内存,不同规格的实例类型提供不同的计算和存储能力。 包年/包月、按需计费 实例规格单价 * 购买时长 实例规格单价请参见云数据库 GaussDB NoSQL价格详情中的“集群-规格费用”。 * 存储空间 计费因子:存储空间,按统一标准进行计费。 包年/包月、按需计费 存储空间单价 * 存储容量 * 购买时长 请参见云数据库 GaussDB NoSQL价格详情中的“集群磁盘空间计费信息”。 备份空间 计费因子:备份空间,按统一标准进行计费。 按需计费 备份空间单价 * 备份收费容量 * 购买时长 请参见云数据库 GaussDB NoSQL价格详情中的“备份空间计费信息”。 说明: 计费时长:备份超过免费空间大小的使用时长。 公网流量 如有互联网访问需求,您需要购买弹性公网IP。 计费因子:带宽费、流量费和IP保有费。 包年/包月计费模式支持按带宽计费方式,收取带宽费。 按需计费模式支持按带宽计费、按流量计费和加入共享带宽三种计费方式,分别收取带宽费+IP保有费、流量费+IP保有费、带宽费+IP保有费。 包年/包月、按需计费 带宽费支持使用带宽加油包抵扣,流量费支持使用共享流量包抵扣。 按固定带宽值采用阶梯计费 0Mbit/s~5Mbit/s(含):均为一个统一的单价 大于5Mbit/s:按每Mbit/s计费 公网带宽单价请参见弹性 云服务器价格 详情中的“带宽价格”,或者弹性公网IP价格详情。
  • 使用CCM私有证书连接实例的示例代码 package main import ( "fmt" "io/ioutil" "crypto/tls" "crypto/x509" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod client "github.com/influxdata/influxdb1-client/v2" ) func main(){ pool := x509.NewCertPool() caCertPath := "/data/CA/agent/ca.crt" caCrt, err := ioutil.ReadFile(caCertPath) if err != nil { fmt.Println("ReadFile err:", err) return } pool.AppendCertsFromPEM(caCrt) // 此处是将ca.crt证书内嵌到程序中,也可以使用sudo cp {client}/ca.crt /etc/ssl/certs命令将证书添加到本机上。 c, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "https://ip:port", Username: "******", Password: "******", TLSConfig: &tls.Config{ RootCAs: pool, InsecureSkipVerify: false, // false表示需要校验服务端的证书。 }, }) if err != nil { fmt.Println("Error creating InfluxDB Client: ", err.Error()) } q := client.NewQuery("select * from cpu","database","ns") if response, err := c.Query(q); err == nil && response.Error() == nil { fmt.Println("the result is: ",response.Results) } }
  • 使用非SSL方式连接实例的示例代码 package main import ( "fmt" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod client "github.com/influxdata/influxdb1-client/v2" ) func main(){ c, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "http://ip:port", Username: "******", Password: "******", }) if err != nil { fmt.Println("Error creating InfluxDB Client: ", err.Error()) } q := client.NewQuery("select * from cpu","db0","ns") if response, err := c.Query(q); err == nil && response.Error() == nil { fmt.Println("the result is: ",response.Results) } }
  • 使用默认SSL证书连接实例的示例代码 package main import ( "fmt" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod client "github.com/influxdata/influxdb1-client/v2" ) func main(){ c, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "https://ip:port", Username:"******", Password:"******", InsecureSkipVerify: true, // true表示不验证服务端的信息,可能存在被攻击的风险,建议设为false,具体请参见使用CCM私有证书连接实例的示例代码。 }) if err != nil { fmt.Println("Error creating InfluxDB Client: ", err.Error()) } q := client.NewQuery("select * from cpu","databases","ns") if response, err := c.Query(q); err == nil && response.Error() == nil { fmt.Println(response.Results) } }
  • 监控指标 如下监控指标需要在实例节点查看,具体方法请参见查看监控指标。 表1 GaussDB(for Cassandra)支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) nosql005_disk_usage 存储容量使用率 该指标为存储容量使用率。 单位:% 0~100 % GaussDB(for Cassandra)实例 1分钟 nosql006_disk_total_size 存储容量总容量 该指标为实例的存储容量总容量。 单位:GB ≥ 0 GB GaussDB(for Cassandra)实例 1分钟 nosql007_disk_used_size 存储容量使用量 该指标为实例的存储容量使用量。 单位:GB ≥ 0 GB GaussDB(for Cassandra)实例 1分钟 nosql009_dfv_write_delay 存储写时延 该指标用于统计某段时间写入数据到存储层的平均时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 nosql010_dfv_read_delay 存储读时延 该指标用于统计某段时间从存储层读取数据的平均时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra001_cpu_usage CPU使用率 该指标用于统计测量对象的CPU使用率。 单位:% 0~100 % GaussDB(for Cassandra)实例的节点 1分钟 cassandra002_mem_usage 内存使用率 该指标用于统计测量对象的内存使用率。 单位:% 0~100 % GaussDB(for Cassandra)实例的节点 1分钟 cassandra003_bytes_out 网络输出吞吐量 该指标用于统计平均每秒从测量对象的所有网络适配器输出的流量。 单位:Bytes/s ≥ 0 Bytes/s GaussDB(for Cassandra)实例的节点 1分钟 cassandra004_bytes_in 网络输入吞吐量 该指标用于统计平均每秒从测量对象的所有网络适配器输入的流量。 单位:Bytes/s ≥ 0 Bytes/s GaussDB(for Cassandra)实例的节点 1分钟 cassandra014_connections 活动连接数 该指标用于统计当前Cassandra实例节点的活动连接数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra015_read_latency 读耗时 该指标用于统计数据库读请求的平均耗时。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra016_write_latency 写耗时 该指标用于统计数据库写请求的平均耗时。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra037_pending_write 挂起的写任务数 描述当前排队等待的写任务数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra038_pending_read 挂起的读任务数 描述当前排队等待的读任务数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra044_range_slice_latency scan耗时 描述平均scan耗时。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra049_dropped_mutation 写丢弃次数 描述平均写丢弃次数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra052_dropped_read 读丢弃次数 描述平均读丢弃次数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra092_load_info 节点负责的数据量 节点负责的数据量大小。 单位:Bytes ≥ 0 Bytes GaussDB(for Cassandra)实例的节点 1分钟 cassandra093_write_count_latency 累计写请求 节点启动累计的写请求个数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra094_write_1min_rate 最近一分钟平均写速率 最近一分钟内的平均写速率。 单位:Counts/s ≥ 0 Counts/s GaussDB(for Cassandra)实例的节点 1分钟 cassandra095_write_p75_latency p75写时延 p75写时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra096_write_p95_latency p95写时延 p95写时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra097_write_p99_latency p99写时延 p99写时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra098_read_count_latency 累计读请求 节点启动累计的读请求个数。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra099_read_1min_rate 最近一分钟平均读速率 最近一分钟内的平均读速率。 单位:Counts/s ≥ 0 Counts/s GaussDB(for Cassandra)实例的节点 1分钟 cassandra100_read_p75_latency p75读时延 p75读时延 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra101_read_p95_latency p95读时延 p95读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra102_read_p99_latency p99读时延 p99读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra103_range_slice_count_latency 累计range读请求 累计range读请求。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra104_range_slice_1min_rate 最近一分钟平均range读速率 最近一分钟平均range读速率。 单位:Counts/s ≥ 0 Counts/s GaussDB(for Cassandra)实例的节点 1分钟 cassandra105_range_slice_p75_latency p75range读时延 p75range读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra106_range_slice_p95_latency p95range读时延 p95range读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra107_range_slice_p99_latency p99range读时延 p99range读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra163_write_p999_latency p999写时延 p999写时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra164_read_p999_latency p999读时延 p999读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra165_large_partition_num 大key数量 当前节点大key的数量。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟 cassandra166_write_max_latency 最大写时延 最大写时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra167_read_max_latency 最大读时延 最大读时延。 单位:ms ≥ 0 ms GaussDB(for Cassandra)实例的节点 1分钟 cassandra168_imbalance_table_num 表数据分布不均匀的个数 表级别的数据分布不均匀的表数量。 单位:Counts ≥ 0 Counts GaussDB(for Cassandra)实例的节点 1分钟
  • 测试结果 性能结果 表6 性能数据 qps_avg统计 节点规格 客户端并发数 预置数据量 _read95_update5 _update50_read50 _read65_update25_insert10 _insert90_read10 开源Cassandra集群性能数据 4U6GB 32 50 2884 5068 8484 10694 8U32GB 64 100 2796 2904 5180 7854 16U64GB 128 200 5896 14776 14304 15707 32U128GB 256 400 8964 22284 19592 22344 GaussDB(for Cassandra)集群性能数据 4U6GB 32 50 8439 10565 9468 23830 8U32GB 64 100 24090 24970 21716 44548 16U64GB 128 200 48985 51335 43557 67290 32U128GB 256 400 91280 85748 74313 111540 GaussDB(for Cassandra)与开源Cassandra性能比 4U6GB 32 50 2.93 2.08 1.12 2.23 8U32GB 64 100 8.62 8.60 4.19 5.67 16U64GB 128 200 8.31 3.47 3.05 4.28 32U128GB 256 400 10.18 3.85 3.79 4.99 测试结论 社区版Cassandra对读较不友好,GaussDB(for Cassandra)在读时延的性能表现上,要优于社区版数十倍。 在写性能表现上,GaussDB(for Cassandra)与社区版基本保持一致。 社区版和GaussDB(for Cassandra)在节点扩容过程中,对业务都有轻度的影响。 GaussDB(for Cassandra)扩容较快,影响业务的时间较为短暂,为10s,且不涉及参数调整,扩容过程十分钟。 社区版根据数据量的大小,参数的设置,整个扩容流程比较长,对性能的影响也参差不齐,50G预置数据,在实验场景中,扩容会超过30分钟。 计算公式:最快迁移速度=(nodetool setstreamthroughput 32设置的迁移流量限制,默认为200Mbps)*原节点数。 本测试过程中,最快的迁移速度=32Mbps/s*3=12MB/S=720MB/min=0.703GB/min,计算可得50GB数据在此场景下迁移的最快时间是:50/0.703=71.1分钟。
  • 测试环境 开源Cassandra测试环境 表1 开源Cassandra测试环境 名称 开源Cassandra集群 Cassandra版本 3.11.5 集群节点数 3 操作系统版本 Centos7.4 ECS规格 通用增强型4vCPUs | 16GB 通用增强型8vCPUs | 32GB 通用增强型16vCPUs | 64GB 通用增强型32vCPUs | 128GB GaussDB(for Cassandra)测试环境 表2 GaussDB(for Cassandra)测试环境 名称 GaussDB(for Cassandra)集群 区域 华东-上海二 集群节点 3 可用区 可用区三 版本 3.11 规格 4vCPUs | 16GB 8vCPUs | 32GB 16vCPUs | 64GB 32vCPUs | 128GB
共100000条