首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

Gdao v1.2.2:Go 语言高效 ORM 框架,缓存优化

gdao是一个全面的go持久层解决方案。主要目的在于 减少编程量,提高生产力,提高性能,支持多数据源整合操作,支持数据读写分离,制定持久层编程规范。 灵活运用 gdao,可以在持久层设计上,减少30%甚至50%以上的编程量,同时形成持久层的统一编程规范,减少持久层错误,同时易于维护和扩展。 gdao对于go语言,相当于 hibernate+ myBatis对于java语言 gdao完整地在go语言中实现 myBatis的核心功能,实现SQL与程序分离,实现强大的动态SQL功能 GitHub : Gdao Repository 示例程序:Gdaodemo 使用文档: Gdaodoc 同类型框架性能压测数据:《Gdao—orm框架性能压测 gdao+gorm+sqlx+原生sql执行》 Gdao 1.2.2 更新内容 新增写过期缓存 通过BindExpireWriteClass或 BindExpireWriteClassWithCacheHandle设置写过期缓存,当设置的类发生写操作时,将自动清除缓存数据 。 使用示例: func TestExpireWrite(t *testing.T) { gdaoCache.BindExpireWriteClass[dao.Hstest]() //set cache for Hstest hs := dao.NewHstest() hs.Where((hs.ID.Between(0, 2)).Or(hs.ID.Between(10, 15))) hs.Limit(3) hs.Selects() //第一次查询,缓冲池没有数据,则结果集放入缓冲池 println() hs = dao.NewHstest() hs.Where((hs.ID.Between(0, 2)).Or(hs.ID.Between(10, 15))) hs.Limit(3) hss, _ := hs.Selects() //第二次查询,缓冲池有数据,返回缓存数据 println() hss[0].Insert() //新增一条数据;发生增删改操作,清除dao.Hstest类的所有缓存 println() hs = dao.NewHstest() hs.Where((hs.ID.Between(0, 2)).Or(hs.ID.Between(10, 15))) hs.Limit(3) hs.Selects() //第三次查询,缓冲池已经清空数据,结果集重新放入缓冲池 } 结果打印与解析 === RUN TestExpireWrite //第一次查询,缓冲池没有数据,则结果集放入缓冲池 [SET CACHE] [DEBUG][SELETE LIST][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? OFFSET 0 ][0 2 10 15 3] [DEBUG][SET CACHE][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? OFFSET 0 ][0 2 10 15 3] //第二次查询,缓冲池有数据,返回缓存数据 [GET CACHE] [DEBUG][SELETE LIST][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? OFFSET 0 ][0 2 10 15 3] [DEBUG][GET CACHE][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? OFFSET 0 ][0 2 10 15 3] //新增一条数据;发生增删改操作,清除dao.Hstest类的所有缓存 [DEBUG][INSERT][insert into hstest(updatetime,body,floa,level,id,age,rowname,value )values(?,?,?,?,?,?,?,?)][2024-06-21 00:00:00 +0800 CST [49 49 49 49 49 49] 1 22222222 1 33 111 bbbb] //第三次查询,缓冲池已经清空数据,结果集重新放入缓冲池 [SET CACHE] [DEBUG][SELETE LIST][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? OFFSET 0 ][0 2 10 15 3] [DEBUG][SET CACHE][ select id,age,rowname,value,updatetime,body,floa,level from hstest where id between ? and ? or (id between ? and ?) LIMIT ? OFFSET 0 ][0 2 10 15 3] 实际项目使用示例:如https://tlnet.top项目,该项目使用gdao读写数据,并使用写过期缓存数据,方便数据缓存与增删改过期 设置相应的类的写过期缓存,当这些类发生增删改时,它们的缓存数据被清除 读取数据 不使用缓存,使用UseCache(false) 通过Gdao缓存,https://tlnet.top的响应非常迅速,具备极高性能表现。 简单使用介绍 1. 安装 go get github.com/donnie4w/gdao 2. 配置数据源 gdao.Init(mysqldb,gdao.MYSQL) //gdao初始化数据源 mysqldb 为sql.DB对象 , gdao.MYSQL 为数据库类型 3. 标准化结构体操作 // 读取 hs := dao.NewHstest() hs.Where(hs.Id.EQ(10)) h, err := hs.Select(hs.Id, hs.Value, hs.Rowname) //[DEBUG][SELETE ONE][ select id,value,rowname from hstest where id=?][10] // 更新 hs := dao.NewHstest() hs.SetRowname("hello10") hs.Where(hs.Id.EQ(10)) hs.Update() //[DEBUG][UPDATE][update hstest set rowname=? where id=?][hello10 10] // 删除 hs := dao.NewHstest() hs.Where(hs.Id.EQ(10)) hs.Delete() //[DEBUG][UPDATE][delete from hstest where id=?][10] //新增 hs := dao.NewHstest() hs.SetValue("hello123") hs.SetLevel(12345) hs.SetBody([]byte("hello")) hs.SetRowname("hello1234") hs.SetUpdatetime(time.Now()) hs.Insert() //[DEBUG][INSERT][insert into hstest(floa,age,value,level,body,rowname,updatetime )values(?,?,?,?,?)][hello123 12345 hello hello1234 2024-07-17 19:36:44] 4. 原生SQL操作 //查询,返回单条 gdao是原生SQL操作入口 gdao.ExecuteQueryBean("select id,value,rowname from hstest where id=?", 10) //insert gdao.ExecuteUpdate("insert into hstest2(rowname,value) values(?,?)", "helloWorld", "123456789"); //update gdao.ExecuteUpdate("update hstest set value=? where id=1", "hello"); //delete gdao.ExecuteUpdate("delete from hstest where id = ?", 1); 5. 配置缓存 //绑定Hstest 启用缓存, 缓存默认时效为300秒, gdaoCache为缓存操作入口 gdaoCache.BindClass[dao.Hstest]() 6. 读写分离 mysqldb := getDataSource("mysql.json") // 获取备库数据源:mysqldb gdaoSlave.BindClass[dao.Hstest](mysqldb, gdao.MYSQL) //这里主数据库为sqlite,备数据库为mysql,Hstest读取数据源为mysql, gdaoSlave为读写分离操作入口 7. SQL映射 <!-- MyBatis 风格的 XML 配置文件 --> <mapper namespace="user"> <select id="selectHstest1" parameterType="int64" resultType="hstest1"> SELECT * FROM hstest1 order by id desc limit #{limit} </select> </mapper> //读取解析xml配置 hs1, _ := gdaoMapper.Select[dao.Hstest1]("user.selectHstest1", 1) fmt.Println(hs1) 8. 动态SQL映射 <!-- where if --> <select id="demo1" resultType="Hstest"> SELECT * FROM hstest <where> <if test="rowname== 'hello'"> and rowname = #{rowname} </if> <if test="id >0"> AND id = #{id} </if> </where> </select> hs := dao.NewHstest() hs.SetId(12) gdaoMapper.SelectBean("dynamic.demo1", hs) //执行映射id [SELECT * FROM hstest WHERE id = ?]ARGS[12] 9. SqlBuilder func Test_Append(t *testing.T) { bean := NewSqlBuilder().Append("SELECT * FROM hstest where"). Append("id=?", 11). Append("and rowname<>?", "hello").SelectOne() logger.Debug(bean) } 10. SqlBuilder func Test_AppendScan(t *testing.T) { var hs dao.Hstest NewSqlBuilder().Append("SELECT * FROM hstest where"). Append("id=?", 11). Append("and rowname<>?", "hello").SelectOne().Scan(&hs) logger.Debug(&hs) } 11. SqlBuilder 动态SQL func Test_sqlBuilder_if(t *testing.T) { context := map[string]any{"id": 12} builder := sqlBuilder.NewSqlBuilder() builder.Append("SELECT * FROM hstest where 1=1"). AppendIf("id>0", context, "and id=?", context["id"]) //动态SQL,当id>0时,动态添加 and id=? bean := builder.SelectOne() //查询SQL: SELECT * FROM hstest where 1=1 and id=? [ARGS][12] logger.Debug(bean) }

优秀的个人博客,低调大师

优化数据处理效率,解读 EasyMR 大数据组件升级

EasyMR 作为袋鼠云基于云原生技术和 Hadoop、Hive、Spark、Flink、Hbase、Presto 等开源大数据组件构建的弹性计算引擎。此前,我们已就其展开了多方位、多角度的详尽介绍。而此次,我们成功接入了大数据组件的升级和回滚功能,能够借助 EasyMR 来掌控大数据组件的升级与回滚流程。 在本文中,我们就将为大家详细介绍在 EasyMR 中如何接管大数据组件的升级和回滚流程。 传统大数据组件升级 大数据技术当下是全球各行业的核心技术之一,其核心要义在于把数据拆解为更小的数据块,然后在分布式的环境中加以处理。Hadoop 和 Spark 作为当前最流行的大数据处理框架,它们通过不同的方法来实现这一目标。 而在传统的大数据组件升级流程中,通常会遵循以下几个步骤: ● 环境准备 · 确保当前环境满足新版本 Spark 和 Hive 的依赖要求 · 备份当前的配置文件和重要数据 ● 下载软件 · 从官方网站下载新版本的 Spark 和 Hive 安装包 ● 停止服务 · 在升级前,停止所有正在运行的 Hadoop、Hive 和 Spark 服务 ● 替换安装包 · 将下载的新版本 Spark 和 Hive 安装包替换旧版本的安装包 ● 配置 Hive · 解压 Hive 安装包并重命名目录 · 修改 hive-site.xml 配置文件,将旧版本的配置文件复制到新版本中,并根据新版本的要求进行必要的修改和更新 · 将 MySQL 的 JDBC 驱动放到 Hive 的 lib 目录下 ● 配置 Spark · 解压 Spark 安装包 · 配置 spark-env.sh 和 spark-defaults.conf 文件,将旧版本的配置文件复制到新版本中,并根据新版本的要求进行必要的修改和更新 · 将 Spark 的 jar 包上传到 HDFS 的特定目录下 ● Hive 元数据升级 · 如果 Hive 版本有变更,可能需要使用 schematool 工具来升级 Hive 的元数据存储 ● 启动服务 · 启动 Hadoop 集群和 MySQL 服务 · 启动 Hive 服务,包括 Metastore 和 HiveServer2 ● 重新配置集成 · 根据新版本的要求重新配置 Spark 与 Hive 的集成,包括更新 hive-site.xml 和 spark-defaults.conf 文件 ● 测试验证 · 启动 Hadoop、Hive 和 Spark 服务,执行测试查询以验证升级是否成功 在上述流程中,我们能够明显看出升级流程的繁琐。同时,大数据组件部署之间存在一定差异,例如:hbase 与其他组件不同,需要备份 zookeeper。这意味着在部署时,我们首先要将各个组件间升级的差异点和升级方案进行总结。 鉴于 Hadoop 本身的复杂性,运维人员在进行升级操作时,需要确认升级方案有无遗漏之处,一旦出现步骤遗漏,便会致使升级失败,严重情况下还可能造成数据丢失。 EasyMR 接管大数据组件升级 考虑到上述传统 Hadoop 升级所产生的复杂状况,我们决定把这种复杂性交由平台来处理,由平台接管升级过程中不同组件的差异性操作以及配置文件备份等相关操作,将简单的操作逻辑呈现给用户。 接下来,我们将从 Hive、HBase 和 Spark 组件的升级方面,来介绍 EasyMR 是如何接管大数据组件的升级流程的。 Hadoop 部署 在主机模式下部署 Hadoop 时,我们需要下载 Hadoop 的安装包,并依照步骤逐步进行操作。然而,在 EasyMR 上,我们仅需按照打包文档把打包好的产品包上传至 EasyMR 平台,即可实现一键部署。 选择需要部署的 Hadoop 服务。 先分配服务需要部署的节点,随后执行部署,等待一段时间,若没有问题,便完成了 Hadoop 组件的部署工作。 Hadoop 的升级也仅需按照上述流程操作即可,EasyMR 会首先自动停止并卸载旧服务,并且备份旧的配置文件。在上述流程顺利通过后,再进行新版本的部署。 Hive 升级 上面我们已回顾了 Hadoop 组件的部署方式,接下来正式介绍 Hive 组件从 3.1.2 版本升级到 3.2.2 版本的具体步骤。 在 Hive 的升级过程中,需要先利用 mysqldump 工具对 MySQL 数据库进行备份,只有当备份成功后,方可进行后续的升级操作。 升级流程将按照 Hadoop 升级逻辑分配服务节点进行部署。 HBase 升级 HBase 升级和 Hive 升级存在差异。Hive 升级首先得备份数据库,HBase 却不用,只需操作人员在部署时确认 HBase 的兼容性问题就行。 后续同样按照升级流程,勾选产品包部署服务,分配服务部署节点即可。 Spark 升级 Spark 升级时需要留意的是,有无正在运行的任务。在 Spark 升级前,会获取 yarn_resourcemanager 上运行中的任务状态,若存在,会给出提示。然后由操作人员依据当前状况决定是否强制升级。 平台管控备份流程 上面介绍了用户层面能感知到的不同服务升级的差异,下面来讲一讲在程序后台我们开展的那些操作。 · 每次升级回滚,后台会自动将 conf 配置文件备份,防止配置丢失 · 在 HBase 升级流程中,会先备份 zookeeper 的服务数据 · 然后通过 grpc 服务调用 hbase_bak 备份脚本,对 Hadoop 的服务数据进行备份 经过上述操作,我们可以很轻松地在 EasyMR 上完成大数据组件的升级和回滚操作,其余服务也能通过类似步骤操作完成。 总结 在 AI 蓬勃发展的时代,数据已然成为 AI 应用中至关重要的一个环节。EasyMR 作为国产的大数据引擎,将会在大数据领域展开更为深入的探索,致力于简化大数据工具的操作难度,提高运维人员的工作效率。 《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057?src=szsm 《数栈产品白皮书》下载地址:https://www.dtstack.com/resources/1004?src=szsm 《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm 想了解或咨询更多有关大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szkyzg

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册