从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践
内容提要
华为云开源分享了openGemini应用开发的最佳实践,包括数据库设计、性能调优和数据写入查询等方面的建议。文章强调了熟悉业务场景对数据库设计的重要性,介绍了openGemini库和表设计的最佳实践,以及数据写入和查询的注意事项。同时,提供了openGemini的开源地址和官网链接。
延伸解读
业务场景评估:数据库选型的前置步骤
文章强调,熟悉业务场景是做好数据库设计的关键。在选型前,需从八个维度评估:数据分类、应用分类、采集频率、时间线、每分钟写入数据量、采集指标、业务查询场景和数据保留周期。这些评估能帮助判断openGemini是否适合,并指导后续的库表设计。忽略这些因素可能导致性能瓶颈或资源浪费。
多库策略与shard数量控制
openGemini支持shard延时加载,区分活动与历史shard。每个shard有独立索引和缓存,增加DB或RP会增加shard数量,从而提升并发度。建议采用多个库以充分利用资源并提升性能。但shard数量受内存和磁盘限制,粗略估算为shard数量 <= 总量内存 * 0.25 / 60M。shard或表过多会导致内存占用、磁盘I/O竞争、句柄资源消耗和元数据同步延迟,影响读写性能。
写入优化:批量、并发与内核调优
客户端写入应批量减少网络交互,并发写入并确保多批次数据时间线不交叉,以减少乱序。BatchSize需实验找到最佳值;写入并发大时可适当减小BatchSize,避免ts-store数据堆积。写QPS波动可能源于wal时延增加、磁盘IO瓶颈、数据缓存堆积或Compaction阻塞,需关注这些内核参数。
查询风险与优化技巧
时间线百万以上时,慎用全量时间线扫描、海量分组、海量数据聚合(除first/last/count/sum/mean/min/max外)及海量时间线查询,以防OOM。优化技巧包括:返回数据多时添加chunked=true&chunk_size=1000分批流式返回;简单查询使用Hint直接定位数据节点,但查询条件必须包含所有TAG;嵌套查询最里层子查询应通过TAG或时间过滤减少结果总量。
Q&A
openGemini的数据库设计最佳实践是什么?
数据库设计时需熟悉业务场景,评估数据分类、应用分类、采集频率等因素,并结合查询场景进行建表设计。
如何提高openGemini的写入性能?
建议客户端批量写入和并发写入,确保数据时间线不交叉,并关注写性能的内核参数调优。
在使用openGemini进行查询时有哪些注意事项?
避免全量时间线扫描和海量分组,使用chunked参数分批流式返回数据,并通过TAG或时间过滤嵌套查询。
openGemini的shard设计有什么限制?
shard数量受机器规格和本地磁盘性能限制,过多的shard会影响系统性能,建议适度增加DB数量以提升性能。
openGemini的开源地址和官网是什么?
openGemini的开源地址是openGemini · GitHub,官网地址是https://opengemini.org。
如何评估数据库选型时的关键因素?
在数据库选型前,需评估数据分类、应用分类、采集频率、时间线、每分钟写入数据量等多个因素。