gf框架之并发安全容器 – gmap,以及与sync.Map的性能比较

gf框架提供了几个非常实用的并发安全容器,其中gmap就是项目开发中最常用的一个。

gmap具体的方法请参考godoc:https://godoc.org/github.com/johng-cn/gf/g/container/gmap

gmap内部有多个类型结构体定义,包括:IntBoolMapIntIntMapIntInterfaceMapIntStringMapInterfaceInterfaceMapStringBoolMapStringIntMapStringInterfaceMapStringStringMapUintInterfaceMap

从执行效率上考虑,基于不同的需求场景,选择合适的类型结构体,其执行效率是不一样的,以下使用基准测试来对比各个类型的写入性能(测试代码):

Continue reading “gf框架之并发安全容器 – gmap,以及与sync.Map的性能比较”

gkvdb v2.0发布,性能改进及高可用版本

项目地址:https://gitee.com/johng/gkvdb

距离在开源中国发布的gkvdb v1.81已经过去了近3个月,在这三个月中gkvdb也变得越来越成熟稳定,本次发布最大的两点在于gkvdb的性能改进以及高可用特性。

其中,性能改进主要是针对于gf框架改进的一些对应的协调改进工作,以及将同步机制从定时同步调整为使用golang的channel实现的实时同步,提高了同步的效率。

高可用特性保证了在任何的情况下,只要API调用成功,那么这条数据即是成功,处理结果在任何异常情况下也不会发生改变,该特性使得gkvdb可以被推广使用到更复杂的生产环境中,保证写入数据的稳定可靠。特别是,gkvdb经过了严格的并发安全测试,在高并发的环境下也表现得非常出色。

自己的博客,本次发布信息也就这些吧。

gf框架之gparser – 强大灵活的数据格式编码/解析包

gf框架针对常用的数据格式编码解析,提供了异常强大灵活的功能,由gparser包提供,支持Go变量(interface{})、Struct、JSON、XML、YAML/YML、TOML数据格式之间的相互转换,支持按照层级进行数据检索访问、支持运行时动态新增/修改/删除层级变量(并发安全)等特性。gparser包使得对于未知数据结构、多维数组结构的访问、操作变得异常的简便。
Continue reading “gf框架之gparser – 强大灵活的数据格式编码/解析包”

gf框架之gvalid – 强大灵活的数据校验/表单校验模块

gf提供了非常强大易用的数据校验功能,通过gvalid包提供,封装了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验等特性。由于gf是模块化、低耦合设计,gvalid包也可以在项目中单独引入使用。

使用方式:

Continue reading “gf框架之gvalid – 强大灵活的数据校验/表单校验模块”

gf框架之grpool – 高性能的goroutine池

Go语言中的goroutine虽然相对于系统线程来说比较轻量级,但是在高并发量下的goroutine频繁创建和销毁对于性能损耗以及GC来说压力也不小。充分将goroutine复用,减少goroutine的创建/销毁的性能损耗,这便是grpool对goroutine进行池化封装的目的。例如,针对于100W个执行任务,使用goroutine的话需要不停创建并销毁100W个goroutine,而使用grpool也许底层只需要几千个goroutine便能充分复用地执行完成所有任务。经测试,在高并发下grpool的性能比原生的goroutine高出几倍到数百倍!并且随之也极大地降低了内存使用率。

性能测试报告:http://johng.cn/grpool-performance/ Continue reading “gf框架之grpool – 高性能的goroutine池”

gkvdb的性能测试(v1.0)

分别从100W、500W、1000W的写入、查询、删除次数及耗时,计算对应的每次操作耗时平均数,用以衡量性能。

需要注意的是,

1、为方便测试,使用的数据是按照 Key: key_xxx => Value: value_xxx 顺序递增的,而不是使用的随机数据,因此对于leveldb和boltdb来说性能会有所提高,但不影响大概的测试结果;

2、以下的时间单位为微秒(μs),1微秒(μs)=0.001毫秒(ms)=0.000001秒(s);

3、性能测试的代码在这里Continue reading “gkvdb的性能测试(v1.0)”

gkvdb的介绍及设计

gkvdb是Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能Key-Value嵌入式数据库,gkvdb是开源的、免费的,基于MIT协议进行发布,项目地址:https://gitee.com/johng/gkvdb。gkvdb的使用方式极其简单,可参考项目地址中的说明进行操作即可。为了保证gkvdb的高性能,除了使用简单可靠的DRH算法外,gkvdb的一些组件也进行了非常优秀的设计,本文主要对gkvdb的一些核心组件进行简单的介绍。 Continue reading “gkvdb的介绍及设计”

dister的使用示例

这一节我们来演示搭建一个dister集群,为简单起见,我们这个集群只有3个节点:192.168.2.15、192.168.2.63、192.168.2.114,名称分别设置为node1、node2、node3。

一、dister选举流程

node1:

node2:

node3:

Continue reading “dister的使用示例”