首页 > 数据库 >从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践

从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践

时间:2024-06-04 09:22:23浏览次数:14  
标签:场景 openGemini 数据库 shard 查询 调优 数据

本文分享自华为云社区《DTSE Tech Talk × openGemini :从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践》,作者:华为云开源。

在本期《从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践》的主题直播中,华为云开源DTSE技术布道师&openGemini社区发起人Shawn,通过解析数据库应用开发的一般流程与开发者们分享了熟悉业务场景是做好数据库设计的关键这一重要观点,并分别向大家介绍了openGemini库和表设计、数据写入、数据查询的最佳实践,希望能让开发者们从优秀实践中获得新的启发和提升。

熟悉业务场景是做好数据库设计的关键

任何数据库都不是万能的,熟悉业务场景是做好数据库设计非常关键的一环,同时,当了解清楚业务场景再去做数据库选型时会给你带来很大的帮助。做数据库选型之前,大家可以按照以下8条去做细致的评估:

  • 数据分类
  • 应用分类
  • 采集频率(s)
  • 时间线评估
  • 每分钟写入数据量
  • 采集的指标
  • 业务查询场景
  • 数据保留周期


openGemini库和表设计最佳实践

当把业务场景都了解清楚过后,便可以做库和表的设计了。Shard是openGemini的数据分片概念,openGemini支持shard延时加载,也就有了有活动shard和历史shard的区别。每个shard有自己的索引和缓存,增加DB,或者增加RP,都会增加同等数量的shard,也就增大了数据处理的并发度。个人建议在使用openGemini时采用多个库,适度增加DB数量,有利于系统资源得到充分利用,并提升性能。

当机器规格一定时,支持的shard数量是有上限的
粗略的评估方法:shard数量 <= 总量内存 * 0.25 / 60M
Shard数量受本地磁盘性能限制,因为不同shard之间存在磁盘带宽和I/O的竞争。

shard或表过多,容易对系统性能造成影响:

  • DB/RP越多,shard越多,占用内存资源会越大,磁盘I/O竞争越大
  • 表越多,数据文件越多,占用操作系统句柄资源越多
  • Shard和表越多,元数据越多,ts-sql和ts-store与ts-meta之间同步元数据时延大,会造成数据读写性能波动

表的设计原则:

  • 建表要结合查询场景做综合考虑
  • 建表要充分考虑指标列数量,大于1000列,建议开始分表

openGemini数据写入最佳实践

现在跟大家分享一下客户端写数据最佳实践的注意事项:

  1. 客户端批量写入,减少网络交互
  2. 客户端并发写入,确保多批次数据之间时间线不存在交叉,减少乱序数据的产生
  3. BatchSize指一次批量写入的数据大小,需多次实验,找到最为合适的值
  4. ts-sql并发分发数据能力是一定的,增加sql数量才能处理更多数据
  5. 写入并发比较大的情况下,可以适当减小BatchSize,否则ts-store容易造成数据堆积

写性能的内核参数调优:正常情况下,业务的写QPS是趋于稳定的,当出现比较大的波动时,引起原因可能是:数据量增大导致wal时延增加、磁盘IO瓶颈、数据缓存堆积、Compaction阻塞等。

openGemini数据查询最佳实践

时间线比较多时(百万以上),如下查询场景要慎用,可能引发进程OOM:

  1. 全量时间线扫描,无TAG过滤
  2. 海量分组:TAG+Time | 细粒度Time
  3. 海量数据在ts-sql聚合场景(除first/last/count/sum/mean/min/max外)
  4. 海量时间线查询, tag1=xxx 可能对应百万时间线

openGemini 查询语句使用Tips:

1、查询返回的数据量比较多时,推荐添加查询参数:chunked=true&chunk_size=1000 ,可分批流式返回

例如:

curl -XPOST 'http://localhost:8086/query?db=mydb& chunked=true & chunk_size=1000 ' --data-urlencode 'q=SELECT * FROM mst'

2、在openGemini集群中,一条时间线数据只属于一个数据节点,因此在做简单查询时,可以使用Hint查询,直接定位到具体数据节点查询数据。

语法: /*+ full_series */

约束:查询条件必须包含所有的TAG

例如:

SELECT /*+ full_series */ mean(C) FROM mst WHERE A=“a1” AND B=“b1” AND time > xxx AND time < xxx

3、嵌套查询要遵循的原则:处在最里层的子查询尽可能通过TAG或者时间过滤数据,减少结果数据总量

例如:

SELECT * FROM
(SELECT temperature FROM disk_temp_monitor WHERE time > xxx AND time < xxx AND nd=“xxx” AND disk_type = SATA_HDD )
WHERE disk_type = SATA_HDD GROUP BY * LIMIT 1000

本次分享到这里就结束了,openGemini社区旨在打造开放、合作、包容的全球性技术社区,欢迎大家试用openGemini时序数据库,加入开源社区。

openGemini开源地址:https://github.com/openGemini

openGemini官网地址:https://opengemini.org

openGemini是一款开源分布式时序数据库,主要聚焦于海量时序数据的存储和分析,通过技术创新,简化业务系统架构,降低存储成本,提升时序数据的存储和分析效率。

HDC 2024,6月21日-23日,东莞松山湖,期待与您相见!

 

更多详情请参见大会官网:

中文:https://developer.huawei.com/home/hdc

英文:https://developer.huawei.com/home/en/hdc

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

 

标签:场景,openGemini,数据库,shard,查询,调优,数据
From: https://www.cnblogs.com/huaweiyun/p/18230132

相关文章

  • 成为MySQL DBA后,再看ORACLE数据库(六、逻辑存储结构)
    数据库的逻辑存储结构也可以叫做存储层次体系,ORACLE的存储层次体系按照层次从高到低分为:表空间(tablespace)、段(segment)、区(extent)、块(block)。熟悉数据库的逻辑存储结构可以帮助我们分析与定位数据库的空间容量问题。一、段段是表空间的主要组织结构。段就是占用存储空间的数据库......
  • mosh数据库——第十章
    1.触发器触发器是在插入、更新和删除语句前后自动执行的一堆SQL代码,通常我们使用触发器增强数据一致性所以首先我们需要修改默认分隔符DELIMITER$$CREATETRIGGERpayments_after_insert意思是这个触发器关联到付款表,并且会在我们插入一条记录以后点燃命名方法:先是明......
  • 数据库与低代码开发:技术革新与应用实践
    在数字化时代,企业对软件开发的需求日益增长,同时对开发效率和成本控制的要求也越来越高。在这样的背景下,低代码开发平台应运而生,它允许开发者通过图形界面和配置化操作,快速构建应用程序,而无需编写大量代码。与此同时,数据库作为数据存储和管理的核心组件,与低代码开发平台的结合,为......
  • 杂谈:300家数据库厂商谁会在竞争中脱颖而出!
    本文为墨天轮社区特约作者沈封(天下观查)独家供稿,内容原创,仅代表作者个人观点,欢迎大家交流、讨论。本文现已收录至合辑《墨天轮专家邀稿合辑:论道数据库解读新发展》,如需转载请联系作者或墨天轮官方。想成为甲骨文那样卓越的通用软件企业,必须具备两个关键条件,可靠的研发能力和广......
  • webapi 中 使用log4net 日志记录到数据库中
    1.安装三个nuget包  2.创建 log4net.config文件,选中文件鼠标右键,选择属性->复制到输出目录修改为始终复制<?xmlversion="1.0"encoding="utf-8"?><log4net><!--Debug日志--><appendername="RollingFileDebug"type="log......
  • C#知识|封装典型的SQLServer数据库查询方法。
    哈喽,你好啊,我是雷工!前边学习封装了增删改的方法封装:《C#知识|通用数据访问类SQLHelper的编写》;本节继续学习将两种典型的查询方法封装成类。下边为学习笔记。01封装单一返回结果的封装在查看封装后的代码之前,可以先看下封装前代码的写法:《C#知识|通过ADO.NET实现应......
  • NoSQL数据库:定义、特性、分类与应用场景的探索
    目录一、引言二、NoSQL的定义与起源三、NoSQL的特性四、NoSQL的分类五、NoSQL的应用场景六、NoSQL数据库在物联网(IoT)应用中的优势最近在做关于NoSQL的市场调研,于是浅写下调研的总结,给大家分享,当做科普,希望大家多多支持。一、引言在当今数据爆炸的时代,数据成为驱动社......
  • 【干货分享】8大免费的代谢数据库!助力代谢研究!
    代谢组学的飞速发展,尤其是分析技术的进步、样本数量的增加、样本类型的多样化以及多检测平台的联合应用,使代谢组数据在数量和复杂性上急剧增加。这个时候,代谢数据库便应运而生!代谢研究数据库是专门存储和提供有关代谢物、代谢途径、代谢相关蛋白质以及代谢组学数据的在线资源......
  • SpringSecurity角色认证、数据库查询账号密码、退出
    在上一次我们实现了登录拦截,以及加密密码进行登录,这次我们要加上角色认证以及把加密后的账号密码放到数据库里进行查询然后登录,最后会有一个退出,退出之后就需要再次输入账号密码角色认证我们先在我们的config上面配置好我们的登录之后以及错误之后要去哪里,以及我们自己配置的......
  • LLVM技术在GaussDB等数据库中的应用
    本文分享自华为云社区《【GaussTech第3期】LLVM技术在GaussDB等数据库中的应用》,作者:GaussDB数据库。Hi,别急!让技术触达每一个角落,赋能更多的人,GaussTech第3期《LLVM技术在GaussDB等数据库中的应用》,不仅带来满满的技术干货,还推出【分享集赞回帖赢好礼】活动,参与就能赢好礼,文末......