官方标准库对flate包的定义是:flate包实现了deflate压缩数据格式,参见 RFC 1951 。gzip包和zlib包实现了对基于deflate的文件格式的访问。
这边什么是deflate?
维基百科给出的解释是: DEFLATE 是同时使用了 LZ77 算法与 哈夫曼编码 (Huffman Coding)的一个 无损数据压缩 算法 。它最初是由 菲尔·卡茨 (Phil Katz)为他的 PKZIP 软件第二版所定义的,后来被 RFC 1951 标准化。
1)func NewReader(r io.Reader) io.ReadCloser
2)func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser
3)func NewWrite(w io.Write, level int) (*Write, error)
4)func NewWriteDict(w io.Writer, level int, dict []byte) (*Writer, error)
5)func (e InternalError) Error() string
6)func (e *ReadError) Error() string
7)func (e *WriteError) Error() string
8)func (w *Writer) Close() error
9)func (w *Writer) Flush() error
9)func (w *Writer) Reset(dst io.Writer)
10)func (w *Writer) Write(data []byte) (n int, err error)
非常好的一个资源链接: https://github.com/astaxie/gopkg/tree/master/compress/flate
如果有很好的资源,欢迎在评论区留言分享
go-mysql-server是一个SQL引擎,能解析标准SQL(基于MySQL语法)并优化查询。它提供了简单的接口,允许自定义表格数据源实现。提供与MySQL协议兼容的服务器实现。这意味着它与MySQLODBC,JDBC或默认的MySQL客户端shell接口兼容。如果写压力进一步扩大,并且数据量急剧快速增长,DB写节点即主库就会成为整个系统的瓶颈。在MySQL的日常运营中,如果DB中表和表之间的数据很多是没有关系的,或者根本不需要表关联Join *** 作,我们可以考虑按照业务把不同的数据放到不同的服务器中,即垂直分库或叫垂直切分。
不过需要注意的是,垂直分库无法解决单表数据量过大的问题,由于单一业务的数据信息仍然落盘在单表中,如果单表数据量太大,就会极大地影响SQL执行的性能。由此,在MySQL应用领域,水平分表也是互联网场景应对高并发、单表数据量过大的解决方案之一。分表在本质上可以概括为业务表在逻辑上公用一个路由结构,物理上分散存储。这就是常说的Sharding分片或者分区。
之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在 *** 作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。
这里我使用了一个原始的Go语言版本的 FunTester 测试框架,现在只有一个基本的方法,实在是因为Go语言特性太强了。框架设计的主要思路之一就是利用Go语言的闭包和方法参数特性,将一个 func() 当做性能测试的主题,通过不断运行这个 func() 来实现性能测试。当然还有另外一个思路就是运行一个多线程任务类,类似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象类,这样可以设置一些类的属性,绑定一些测试资源,适配更多的测试场景。
下面演示select的性能测试,这里我用了随机ID查询的场景。
这里我使用从35开始递增的ID进行删除。
这里使用了select的用例部分,随机ID,然后更新name字段,随机10个长度的字符串。
这里用到了 FunTester 字段都是随机生成。
到这里可以看出,性能测试框架用到的都是gorm框架的基础API使用,这里MySQL连接池的管理工作完全交给了gorm框架完成,看资料说非常牛逼,我们只需要设置几个参数。这个使用体现很像 HttpClient 设置 HTTP 连接池类似,这里我们也可以看出这些优秀的框架使用起来都是非常简单的。
PS:关于gorm的基础使用的请参考上一期的文章Go语言gorm框架MySQL实践。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)