本文分享自华为云社区《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应用开发最佳实践的更多相关文章

  1. 【性能调优】:记录一次数据库sql语句性能调优过程

    一,依旧很简单的一个接口,查询列表接口,发现10并发单交易场景下,数据库表4w铺底数据,每次查询2000条数据进行orderby显示,平均响应时间2秒以上,数据库的cpu使用率高达95%: 二,抓到这 ...

  2. linux性能调优概述

    - 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...

  3. Redis基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  4. Redis 基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  5. 程序员必须掌握的性能调优 X Y Z

    热评博文:<如何设计出优美的Web API?>,现阅读量超 2500,小伙伴们不要错过哦! 2003 ~ 2008 年,这五年老兵哥我在通信行业做实习生和开发岗,主要用 C / C++ / ...

  6. EBS的性能调优

         metalink    Tuning performance on eBusiness suite (Doc ID 744143.1) 这篇文档描述了如何调查电子商务套件的整体性能下降. ...

  7. Apache Pulsar 在 BIGO 的性能调优实战(上)

    背景 在人工智能技术的支持下,BIGO 基于视频的产品和服务受到广泛欢迎,在 150 多个国家/地区拥有用户,其中包括 Bigo Live(直播)和 Likee(短视频).Bigo Live 在 15 ...

  8. MySQL性能调优与架构设计——第10章 MySQL数据库Schema设计的性能优化

    第10章 MySQL Server性能优化 前言: 本章主要通过针对MySQL Server(mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化, ...

  9. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  10. MySQL性能调优与架构设计——第8章 MySQL数据库Query的优化

    第8章 MySQL数据库Query的优化 前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 ...

随机推荐

  1. 快速获取使用dblink的视图的全部字段

    快速获取使用dblink的视图的全部字段 默认情况下,使用dblink连接的视图在PL/SQL是没法通过代码助手获取全部的字段的 如果要获取全部字段的话,可以使用一个奇怪的方法 对要获取的使用dbli ...

  2. 【知识点】如何快速开发、部署 Serverless 应用?

    简介: 本文将详细介绍如何开发和部署 Serverless 应用,并通过阿里云函数计算控制台与开发者工具 Serverless Devs 进行应用的初始化.部署:最后分享应用的调试,通过科学发布.可观 ...

  3. 从图森未来的数据处理平台,看Serverless工作流应用场景

    4月,阿里云Serverless工作流正式商业化,这是一款用于协调多个分布式任务执行的全托管 Serverless 云服务.产品致力于简化开发和运行业务流程所需要的任务协调.状态管理以及错误处理等繁琐 ...

  4. 逸仙电商Seata企业级落地实践

    简介: 本文将会以逸仙电商的业务作为背景, 先介绍一下seata的原理, 并给大家进行线上演示, 由浅入深去介绍这款中间件, 以便读者更加容易去理解 Seata 这个中间件. 作者 | 张嘉伟(Git ...

  5. 斩获大奖|阿里云PolarDB-X引领云原生分布式数据库新时代

    简介:阿里云原生分布式数据库PolarDB-X荣获"2021年度最佳分布式数据库". 12月15-16日,以"引领分布式云变革 助力湾区数字经济"为主题的全球分 ...

  6. DataWorks功能实践速览 05——循环与遍历

    ​简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率!通过往期的介绍,您已经了解到在DataWorks上进行任务运行的最关键的几个知识点,其中上期参数透传中为 ...

  7. 什么是 objdump 命令

    objdump 是在类 Unix 操作系统上显示关于目标文件的各种信息的命令行程序. 它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息. 简单来说,和 IDA 这类软件都可用于反汇编. ...

  8. [FAQ] Beego2.0.2 bee 生成的 api 项目运行 404, http server Running on http://:8080

    Beego, bee version 2.0.2 https://github.com/beego/beego/issues/4363 Tool:AI 编程助手 Refer:Beego还流行吗 Lin ...

  9. WPF 通过 EXIF 设置和读取图片的旋转信息

    本文将告诉大家如何在 WPF 里面设置图片的 EXIF 信息,包括如何设置图片的旋转信息,以及如何读取 EXIF 的内容 值得一提的是在 WPF 里面,默认的图片渲染信息是无视 System.Phot ...

  10. dotnet 写一个支持层层继承属性的对象

    我最近在造一个比 Excel 差得多的表格控件,其中一个需求是属性的继承.大家都知道,表格里面有单元格,单元格里面允许放文本,文本可以放多段文本.本文的主角就是文本段落的样式属性,包括文本字体字号颜色 ...