gorm

go-admin在线开发平台学习-2[程序结构分析]

点点圈 提交于 2021-02-18 15:36:48
紧接着上一篇,本文我们对go-admin下载后的源码进行分析。 首先对项目所使用的第三方库进行分析,了解作者使用的库是否是通用的官方库可以有助于我们更快地阅读程序。接着对项目的main()方法进行分析,因为程序使用cli的方式启动,对cli不同的命令进行分析。基于此俩点开始工作。 go-admin中使用的第三方库 cobra 强大的cli封装,支持命令嵌套 cast 简单安全的类型转换 casbin 轻量级开源访问控制框架,采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等 gorm 一个神奇的,对开发人员友好的 Golang ORM 库 sentinel-golang 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。 opentracing-go 分布式追踪库 cron 定时任务库,支持cron表达式 启动分析 main.go作为程序第一个入口文件,main()方法作为程序入口 使用corboa命令行的方式进行启动,有多个不同的命令,如下所示 查看系统版本 go-admin version 查看系统配置 go-admin config 服务启动 go-admin

How do I prevent exceptions from causing a transaction rollback under Grails?

佐手、 提交于 2021-02-06 08:51:14
问题 My Grails service is having an issue where a swallowed exception unrelated to a transaction is causing the transaction to rollback even when it is unrelated to the persistance of the domain object. In my service I have something along the lines of updateSomething(domainObj) { def oldFilename = domainObj.filename def newFilename = getNewFilename() domainObj.filename = newFilename domainObj.save(flush: true) try { cleanUpOldFile(oldFilename) } catch (cleanupException) { // oh well, log and

How do I prevent exceptions from causing a transaction rollback under Grails?

孤人 提交于 2021-02-06 08:49:58
问题 My Grails service is having an issue where a swallowed exception unrelated to a transaction is causing the transaction to rollback even when it is unrelated to the persistance of the domain object. In my service I have something along the lines of updateSomething(domainObj) { def oldFilename = domainObj.filename def newFilename = getNewFilename() domainObj.filename = newFilename domainObj.save(flush: true) try { cleanUpOldFile(oldFilename) } catch (cleanupException) { // oh well, log and

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 源码解析

How to do a simple table join in Grails

时光毁灭记忆、已成空白 提交于 2021-01-27 03:50:41
问题 I'm kind of new to grails and I'm having a lot of trouble with joining two existing tables through domain objects that have been created off of those tables. Does anyone know how to do this in grails? Here are what the tables look like and an example of how I need the joined table to look. Thanks in advance for the help. Table1{ field1table1 } Table2{ field1table2 field2table2 } I need to join these 2 tables where field1table1 = field1table2 and the resulting table join I need to look like

Golang 根据Gorm和Gin开发一个后台管理系统

回眸只為那壹抹淺笑 提交于 2021-01-13 08:24:33
\\\\\\\\\\\ English | 简体中文 Project Guidelines Web UI Framework:element-ui Server Framework:gin Grom Framework: gorm 1. Basic Introduction 1.1 Project structure │ ├─conf (Config file) │ ├─docs (swagger APIs docs) │ ├─log (log file) │ ├─public (public static file) │ ├─static (head icon) ├─src │ ├─controller (Controller) │ ├─middleware (Middleware) │ ├─models (Model entity) │ ├─pkg (Project private package) │ ├─adapter (Casbin adapter) │ ├─app (Gin service response) │ ├─codes (Response code) │ ├─error (Project private error) │ ├─gredis (Redis) │ ├─query (Songo parase to SQL line) │ ├─setting

Golang 根据Gorm和Gin开发一个后台管理系统

眉间皱痕 提交于 2021-01-13 07:50:42
\\\\\\\\\\\ 项目后端地址: https://github .com/olongfen/gorm-gin-admin 项目前端地址: https://github.com/olongfen/user_admin 项目指导文档 Web UI Framework:element-ui Server Framework:gin Grom Framework: gorm 1. 基本介绍 1.1 项目结构 │ ├─conf (Config file) │ ├─docs (swagger APIs docs) │ ├─log (log file) │ ├─public (public static file) │ ├─static (head icon) ├─src │ ├─controller (Controller) │ ├─middleware (Middleware) │ ├─models (Model entity) │ ├─pkg (Project private package) │ ├─adapter (Casbin adapter) │ ├─app (Gin service response) │ ├─codes (Response code) │ ├─error (Project private error) │ ├─gredis (Redis) │ ├

golang gorm 基本使用

梦想的初衷 提交于 2021-01-13 07:40:56
原文链接: golang orm 框架之 gorm gorm 用法介绍 库安装 go get -u github.com/jinzhu/gorm 数据库连接 import ( " github.com/jinzhu/gorm " _ " github.com/jinzhu/gorm/dialects/mysql " ) var db * gorm.DB func init() { var err error db, err = gorm.Open( " mysql " , " <user>:<password>/<database>?charset=utf8&parseTime=True&loc=Local " ) if err != nil { panic(err) } } 连接比较简单,直接调用 gorm.Open 传入数据库地址即可 github.com/jinzhu/gorm/dialects/mysql 是 golang 的 mysql 驱动,实际上就是 github.com/go-sql-driver/mysql 作者这里为了好记,重新弄了个名字 这里我用的 mysql,实际上支持基本上所有主流的关系数据库,连接方式上略有不同 db.DB().SetMaxIdleConns( 10 ) db.DB().SetMaxOpenConns( 100 ) 还可以使用 db.DB

Go 开源说第二期:GORM 剖析与最佳实践

試著忘記壹切 提交于 2021-01-01 18:41:27
写在前面 随着Go在中国越来越多的应用场景,我们中国的Gopher开发的开源项目也越来越多,目前在github上面有大量的Go写的开源项目,但是很多时候一个好的项目让别人获知,同时让大家了解背后的设计设计原理,其实是很困难的一件事情。 基于这样的背景,我们GoCN社区推出这个《Go 开源说》,每两周会播出一期。希望通过这样的平台帮助到我们开源的作者,有一个平台去推广我们的开源项目,第二说说背后的设计原理和理念,产品优越性等。第三让我们用户可以了解到更多好玩有用的项目,避免自己造轮子重复发明,当然也希望通过这些分享让大家学习到每一个开源项目背后的设计理念,拥抱开源,做出自己的产品。 —— Asta 本期开源先锋 张金柱 https://github.com/jinzhu 就职于字节跳动基础架构语言团队 目前从事字节跳动的性能分析、优化及 GORM 开发相关工作 关于 GORM https://github.com/go-gorm/gorm 设计简洁、功能强大、自由扩展的全功能 ORM 设计原则 API 精简、测试优先、最小惊讶、灵活扩展、无依赖 可信赖 功能完善 关联:一对一、一对多、单表自关联、多态关联;Preload、Joins 预加载;关联模式 事务:嵌套事务, Save Point Hooks、Callbacks 自由扩展 多数据库、读写分离、Prometheus

性能提高15倍!只是把MySQL换成了ClickHouse

人盡茶涼 提交于 2020-12-15 01:56:48
简介 我们需要存储结构化时序数据,时间间隔为5分钟或1分钟,计算 95峰值 、 995峰值 、 最值 等指标,并且在网页中展示。 MySQL 项目开发初期,为了快速开发原型,验证产品,我们使用MySQL作为整个项目的存储。带来的问题是时序数据库范围分析查询耗时很长,计算30天的数据需要30s+,到了无法容忍的地步,即便是创建索引、使用BitInt存储时间戳,几乎没有性能提升。 后来我们组其他同事说换ClickHouse来存储时序数据,于是我们就开始了替换之旅。 ClickHouse ClickHouse是面向OLAP(在线分析处理)、兼容SQL标准的列式数据库,主要的不足是 不支持事务 。因此我们目前没有把整个存储都迁移到ClickHouse上,而是只把时序数据存过来。 本以为替换过程会很麻烦,可能修改大量的代码和逻辑,实际上很快,因为之前接口的逻辑设计很合理,所以只替换了数据库ORM库,从gorm换成了sqlx,花了1天时间( 前期重构逻辑花了1个星期我会乱说 )。 更重要的是,ClickHouse提供了很多聚合函数,之前计算95值需要2次查询,而现在只需要一次查询就够了,对应的SQL如下: select d.en_name, max (d.in_value) as peak_in, max (d.out_value) as peak_out, max (d.max_value)