- 博客(18)
- 资源 (17)
- 收藏
- 关注
原创 mysql的事务内常用锁
众所周知,在mysql数据库内要想一次更改多条数据,且保证此期间不被其他语句打断,大家都会选择事务和锁。但是事务内的锁到底是锁住了全表还是锁住某行呢,与什么有关呢?什么情况容易造成死锁呢?纸上得来终觉浅,绝知此事要躬行 。在看完极客时间的mysql实战课程和搜索了大量博客后,我做了如下测试以验证这些结论。1、单一索引/unique列/主键 查询到已有行:mysql:5.7.32; innodb引擎表模型:CREATE TABLE `transaction_test` (...
2021-07-29 15:01:42 298
原创 mongo 设置分片键
1、mongo分片集群相关知识点mongo集群介绍:https://www.cnblogs.com/clsn/p/8214345.html分片键的选择:https://www.cnblogs.com/lijiaman/p/14289713.html再结合官网确认一下相关版本的规定:https://docs.mongodb.com/manual/sharding/2、设置分片键在MongoDB4.2以及4.2之前,文档的分片字段只有一个,且是不可以修改的。从4.2版本开始,除非分片键.
2021-04-23 19:07:28 2661
原创 go database/sql 库 连接池管理
1.了解DB结构体里的有关连接数变量type DB struct {.....freeConn []*driverConn //空闲连接队列connRequests map[uint64]chan connRequest //正在阻塞的sql请求,等有空闲连接来处理numOpen int //程序内已开启和正在开启的连接数maxIdle int //连接池内空闲连接的最大个数maxOpen int //连接池内最大可以开
2021-03-20 00:49:06 824 2
原创 mysql NULL值影响
1.NULL值比较只可以使用IS NULL或者IS NOT NULL来进行NULL值比较使用算术比较操作符= > < <>等是无法测试的。在mysql中,如果列类型是bool时,NULL表示false使用DISTINCT,GROUP BY或时ORDER BY时两个NULL值被视为相等。ORDER BY:ASC时NULL放在最前面,DESC时NULL放在最后。聚集函数比如 COUNT(), MIN()和SUM()都会忽略NULL值,只有CO...
2021-03-16 10:38:28 360
原创 http2.0协议学习总结
1、http1.1一些瓶颈问题 同一个域名下的并发连接数有限,一般是6个;即使使用了http长连接,减少tcp三次握手,但是单连接上是串行请求,当发出请求再等待会浪费大量时间,所以网络带宽增加时,并发发送的消息提升有限,网络延迟没有改善。http1.1请求之间是无状态的,有时为了传输cookie,会导致http头部体积膨胀,并且重复传输时,仍然每次都要携带,带宽利用率太低。2、http2.0改进的地方2.1、多路复用 http2.0中一个tcp连接可以多个...
2021-03-11 14:56:52 609
原创 protobuf与grpc
1.protobuf如何提升编码格式本篇知识点来自:https://time.geekbang.org/column/article/247544protobuf是一种针对多种语言的编解码工具。它的编码速度很快,并且编码后的字符流体积远远小于json等格式,能节约大量带宽。grpc的底层编解码协议就是protobuf。原理:它是通过把消息里的ASCII字段名省略,用proto中定义的数字代替。这样在编解码时就可以大量降低带宽。protobuf消息序列是按照字段序号、值类型、字段值的顺序来编码的。
2021-03-08 20:17:05 331
原创 时区+0800 CST 与+0805 LMT转换
1、+0800 CST 与+0805 LMT区别 大多数计算机保留的有关时区的数据来自IANA时区数据库(Time Zone Database, TZDB)。TZDB 中"Asia/Shanghai"的时区偏移 不止 +08:00 一个,在 1850-1900 年,偏移量为 +08:05:43,1901年以及后,偏移量才是 +08:00。所以时区+0800 CST 与+0805 LMT都是中国时区,不过对应的是不同的阶段。 更详细的就是以LMT时间1901年,也就是UTC时间1...
2021-03-06 16:50:58 4940
原创 数据库time类型存储
1.mongomongoISODate是一种存储时间的object,它支持到毫秒精度,如果要存储到纳秒精度,则最好用long存储时间戳的方式。golang time.Time是带有时区的时间,在存到Mongo时驱动会转化为ISODate类型,ISODate类型在数据库存储为UTC时间,ISODate.toLocaleString()可以显示当前带有当前时区的字符串。go mongo驱动读取时没有转化为当前时区,还是UTC时区存到time.Time,即time.Time.loc=nil /...
2021-03-01 19:31:29 4106 1
原创 sql数据库的char,varchar,text,blob类型比较
1.charchar(n):n表示字符数,最大长度是255个字符。如果是utf8编码方式, 那么char类型占255 * 3个字节。(utf8下一个字符占用1至3个字节)。1.1mysql数据库mysql官网参考手册提到这句话“一个长度CHAR列被固定在创建表声明的长度。长度可以是0到255之间的任何值。CHAR 存储值时,它们会用空格右填充到指定的长度。当CHAR被检索到的值,拖尾的空格被删除。”这句话怎么理解呢,用以下实验验证: 当定义n=5时,传入字符串"abc",那么实际存储...
2021-02-25 10:27:13 1935
原创 grpc-gateway转化grpc与http api规则
1、介绍gRPC Transcoding 是一种定义了grpc与http rest api转化规则,这种规则适用于 Google APIs, Cloud Endpoints, gRPC Gateway等,目前已被广泛使用。英文文档见:https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#google.api.HttpRule代码可见:https://github.com/g
2021-02-09 15:54:01 2495
原创 protobuf 自定义extend
1、proto2 extensionproto2 extensions 官网指导说明:https://developers.google.com/protocol-buffers/docs/proto#extensions定义:https://github.com/golang/protobuf/blob/4846b58453b3708320bdb524f25cc5a1d9cda4d4/internal/testprotos/proto2_proto/test.proto#L266使用.
2021-01-12 20:07:10 3091
原创 go函数值传递
func testarr(a []int) { a = []int{1}}func testint(a int) { a = 1}func testarrptr(a *[]int) { b := []int{1} a = &b}func testintptr(a *int) { b := 1 a = &b}func testarrptrval(a *[]int) { b := []int{1} *a =.
2020-12-15 11:57:26 121
原创 数据库upsert实现
1、mysql使用方法: 假设name是主键,则name不存在就插入VALUES后面的值,否则将对应的addr修改为testINSERT INTO user (name, age, addr)VALUES('test',20, 'here')ON DUPLICATE KEY UPDATEaddr = 'test';除了上述用法,在使用中还需要注意一些以下几点:1. user表的部分列如果有默认值,则可以省略,类似insert语法2. 默认优先判断是否需要...
2020-12-15 11:50:26 670
原创 数据库auto属性
1.sqlite3 两种方式设置auto:建表时隐式创建它INTEGER PRIMARY KEY 使用AUTOINCREMENT关键字显式创建方式1利用了rowid; 方式2是另一套不同的算法,采用了中间表SQLITE_SEQUENCE table记录增长。详细介绍见官网:https://sqlite.org/autoinc.htmlAUTOINCREMENT: AUTOINCREMENT的主键必须是INTEGER类型,但是INTEGER类型的主键本身默认就是自动...
2020-12-02 10:26:32 1130
原创 go reflect 与slice
1. sliceslice底层存储的其实一个结构,如下:type slice struct { array unsafe.Pointer len int cap int}先提供一篇文章加深理解slice对象的文章:https://segmentfault.com/a/1190000017910165?utm_source=sf-related以下我用go1.13.8 linux/amd64,再次测试:func testsl
2020-12-02 10:17:09 1533
原创 《投资者的未来》
1.书籍介绍 这本书加深了我对股票长期投资方面的认知,作者指出了一些投资陷阱,比如传统观点追求高增长率是合理的,但作者指出这是一件高风险低收益的事。由于作者都是用美股做实验的,出于兴趣,我也测试A股的情况,后面会给出一些A股的测试结果。 纵览全书,全文分为5个部分,前两部分阐述了投资者容易陷入的两个陷阱:追求高增长率和高估新事物,接着说明股东的收益应该来自哪里,然后展望未来,探讨人口危机和未来全球经济强国的转变,最后给出可供参考的投资组合策略。 下面按照书籍顺序摘...
2020-12-02 10:12:10 592
原创 通过反射深入学习go接口
1. 常见的interface用法1.1 作为方法的集合,提供方法type Animal interface { Eat()}type Dog struct {}func (d *Dog) Eat() { fmt.Println("Dog eat")}var ani Animalani = &Dog{}ani.Eat() //output: "Dog eat"1.2 作为类型容器,接受和转换各种基础类型var a interface{}nu.
2020-12-02 09:55:39 115
原创 简单的个人博客搭建过程
这几天心血来潮搭个博客玩玩。这是第一次搭建,先用最简单的方法。以下从建站开始说起,1、创建域名+dns解析 域名后缀有com、top、cn等,其中com是国际通用域名,其他的都有点非主流,因此我也选择了com。但是com域名已经被人注册了很多,可以加数字之类的避免重复已存在的域名。dns解析,就是根据让你的域名加上www,别人可以根据你的域名解析到你的服务器IP。 域名和dns我都用的是阿里云,两个每年续费也就才100左右,第一次买还有优惠。阿里云第一次买需要实名认证后才...
2020-12-02 09:49:28 202
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人