go-mysql

MySQL的MaxIdleConns不合理,会变成短连接

北战南征 提交于 2021-01-29 04:34:44
1 背景 最近石墨文档线上业务出现了一些性能问题,在突发流量情况下,有个业务性能急剧下降。该服务是依赖于数据库的业务,会批量获取数据库里的数据。在经过一系列的排查过程后,发现该服务到数据库的连接数经常超过MaxIdleConns,因此怀疑是数据库的配置导致的性能问题,所以以下针对数据库的代码进行了剖析,并做了相关实验。 2 配置解读 maxIdleCount int // zero means defaultMaxIdleConns; negative means 0 maxOpen int // <= 0 means unlimited maxLifetime time.Duration // maximum amount of time a connection may be reused maxIdleTime time.Duration // maximum amount of time a connection may be idle before being closed 可以看到以上四个配置,是我们Go MySQL客户端最重要的配置。 maxIdleCount 最大空闲连接数,默认不配置,是2个最大空闲连接 maxOpen 最大连接数,默认不配置,是不限制最大连接数 maxLifetime 连接最大存活时间 maxIdleTime 空闲连接最大存活时间 3 源码解析

极简化ES数据同步,终于从繁琐重复的代码里脱身了

社会主义新天地 提交于 2021-01-20 21:02:51
一、背景 Elasticsearch是最近几年非常热门的分布式搜索和数据分析引擎,携程内部不仅使用ES实现了大规模的日志平台,也广泛使用ES实现了各个业务场景的搜索、推荐等功能。 本文聚焦在业务搜索的场景分享了我们在做数据同步方面的思考和实践,希望能对大家有所启发。 二、现状调研 数据同步是个很麻烦的事情,在各种论坛、分享中被大家反复讨论。 我们的需求大致包括全量、增量地从Hive、MySQL、Soa服务、Mq等不同类型的数据源获取数据,部分数据还需要进行一定的计算或者转换,然后近实时地同步到ES中,以被用户搜索到。 为了讨论方便,假定本文的场景是文章搜索的场景: 索引内容为文章,主要的信息保存在article表里; 每个文章关联了tag,保存在article_tag表里; tag表里的tagName也需要进入ES索引,以便使用标签名字搜索文章。 在以前同步这样的数据进入ES,单条文章的数据组装伪代码如下: List<Long> tagIds = articleTagDao.query("select tagId from article_tags where articleId=?", articleId); List<TagPojo> tags =tagDao.query("select id, name from tags whereid in (?)");

Go语言MySQL数据库操作

倖福魔咒の 提交于 2020-12-18 19:13:27
一、MySQL数据库驱动 1、MySQL数据库驱动简介 Go语言官方没有实现MySQL数据库驱动,常用的开源MySQL数据库驱动实现如下: (1)Go MySQL Driver Go MySQL Driver支持database/sql接口,全部采用Go语言实现。 官方网站: https://github.com/go-sql-driver/mysql/ (2)MyMySQL MyMySQL支持database/sql接口,也支持自定义的接口,全部采用Go语言实现。 官方网站: https://github.com/ziutek/mymysql (3)GoMySQL GoMySQL不支持database/sql接口,采用自定义接口,全部采用Go语言实现。 官方网站: https://github.com/Philio/GoMySQL 2、Go-MySQL-Driver简介 Go-MySQL-Driver优点: (1)维护比较好。 (2)完全支持database/sql接口。 (3)支持keepalive,保持长连接。 Go-MySQL-Driver安装如下: go get github. com / go -sql-driver/mysql 导入包: import "database/sql" import _ "github.com/go-sql-driver/mysql" 二

HappyJoeJoe/go-bin2es

心不动则不痛 提交于 2020-04-14 17:44:53
【推荐阅读】微服务还能火多久?>>> go-bin2es go-bin2es is a service syncing binlog to es 架构图: 采用了 go-mysql 可以过滤指定的db的table, 从而把binlog数据通过 配置的方法 过滤后, 刷新到 elasticsearch7 上 特点: 支持高版本的elasticsearch7 原生支持es的嵌套对象、嵌套数组类型 实时性高, 低时延 保证数据最终一致性 基于etcd, 支持一主多备 不支持 delete 操作 支持自定义函数 UserDefinedFunc 去处理es数据, 可扩展更强 Example create database test ; create table Parent ( id int not null auto_increment primary key , name varchar ( 64 ) not null , sex char ( 1 ) not null ) comment = '父' ; create table Child ( id int not null auto_increment primary key , name varchar ( 64 ) not null , sex char ( 1 ) not null , parent_id int not

DM 源码阅读系列文章(五)Binlog replication 实现

这一生的挚爱 提交于 2019-11-29 04:04:15
作者:lan 本文为 DM 源码阅读系列文章的第五篇。 上篇文章 介绍了 dump 和 load 两个数据同步处理单元的设计实现,对核心 interface 实现、数据导入并发模型、数据导入暂停或中断的恢复进行了分析。 本篇文章将详细地介绍 DM 核心处理单元 Binlog replication,内容包含 binlog 读取、过滤、路由、转换,以及执行等逻辑。 文内涉及到 shard merge 相关逻辑功能,如 column mapping、shard DDL 同步处理,会在 shard merge 篇单独详细讲解,这里就不赘述了。 Binlog replication 处理流程 从上图可以大致了解到 Binlog replication 的逻辑处理流程,对应的 逻辑入口代码 。 从 relay log 或者 MySQL/MariaDB 读取 binlog events。 对 binlog events 进行处理转换(transformation),这里可以做三类操作: 操作 说明 Filter 根据 库/表同步黑白名单 对库/表进行过滤;根据 binlog event 类型过滤 。 Routing 根据 库/表 路由规则 对库/表名进行转换,用于合库合表。 Convert 将 binlog 转换为 job 对象 ,发送到 executor。 executor 对 job