Go语言中文网 为您找到相关结果 10

如何编写一个分布式数据库

大家好, 我是开源项目 分布式 NewSQL 数据库 TiDB 和 分布式缓存 Codis 的 创始人 刘奇, 之前在京东, 豌豆荚做 infrastructure 相关的事情, 现在在创业 (PingCAP), 方向是分布式数据库. 最近如果有朋友关注开源社区或者HackerNews 的话,可能会发现一个叫 TiDB 的数据库项目吸引了一些眼球(https://github.com/pingcap/tidb ) 。 这是我们开源的第一个东西,短短几天得到了过千Star,特别感谢大家的支持和鼓励。 今天主要介绍一下 NewSQL 与 TiDB 的设计实现, 未来的一些 Roadmap 以及 一些做开源项目的心得。 大家可能经常用数据库,但是很少写一个数据库(实在是有点 hardcore),今...阅读全文

博文 2015-09-24 10:26:00 刘奇

负载均衡--golang实现一致性hash算法

有没有好奇过redis、memcache等是怎么实现集群负载均衡的呢? 其实他们都是通过一致性hash算法实现节点调度的。 讲一致性hash算法前,先简述一下求余hash算法: hash(object)%N 一个缓存服务器宕机了,这样所有映射到这台服务器的对象都会失效,我们需要把属于该服务器中的缓存移除,这时候缓存服务器是 N-1 台,映射公式变成了 hash(object)%(N-1) ; 由于QPS升高,我们需要添加多一台服务器,这时候服务器是 N+1 台,映射公式变成了 hash(object)%(N+1) 。 1 和 2 的改变都会出现所有服务器需要进行数据迁移。 一致性HASH算法 一致性HASH算法的出现有效的解决了上面普通求余算法在节点变动后面临全部缓存失效的问题: type ...阅读全文

博文 2018-08-09 23:34:51 豆瓣奶茶

golang导出Excel表格

设置样式: package main import ( "github.com/tealeg/xlsx" "fmt" ) func main() { var file *xlsx.File var sheet *xlsx.Sheet var row *xlsx.Row var cell *xlsx.Cell var err error style := xlsx.NewStyle() fill := *xlsx.NewFill("solid", "00FF0000", "FF000000") font := *xlsx.NewFont(20, "Verdana") border := *xlsx.NewBorder("thin", "thin", "thin", "thin") style....阅读全文

博文 2018-09-05 13:30:01 zhzhlong

“朝阳群众”APP上线!解读怎么做一款深入群众的应用

每当北京警方发布这些案件侦破消息的时候,网友第一反应往往都是: 朝阳群众又立功了! 可惜的是,被网友戏称为“世界王牌情报组织”的这股东方神秘力量,始终给人感觉是一直在打游击战的“潜伏者”,来无影去无踪的,这让想要加入组织的同志只有一旁吃瓜。 ![QQ20170216-160319@2x.png](http://studygolang.qiniudn.com/170216/1dd2906f1492c276863a1ae584223126.png) “世界王牌情报组织”终于有正式根据地了! 近日,一款名为“朝阳群众HD”的APP悄然上线.... 随着北京市公安局朝阳分局官方微博“平安朝阳”的消息发布,“朝阳群众HD”赫然闯入各吃瓜群众视线。这个平台(根...阅读全文

存储组织协调引擎 REX-Ray

REX-Ray 是一个 EMC {code} 团队领导的开源项目,为 Docker、Mesos 及其他容器运行环境提供持续的存储访问。其设计旨在囊括通用存储、虚拟化和云平台,提供高级的存储功能。 当前支持的系统: * Ubuntu * Debian * RedHat * CentOS * CoreOS * OSX 运行时 CLI:

$ export REXRAY_STORAGEDRIVERS=ec2
$ export AWS_ACCESSKEY=access_key
$ export AWS_SECRETKEY=secret_key
$ rexray vol...阅读全文

中介者模式 Go语言实现

对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系。虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象间相互连接的激增又会降低其可复用性,大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,而且对系统的行为进行任何较大的改动都会十分困难。结果是你不得不定义大量的子类以定制系统的行为。因此,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式. 中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式。...阅读全文

博文 2016-04-20 03:00:02 readen

golang学习笔记6:时间和日期

time 包为我们提供了一个数据类型 time.Time (作为值使用)以及显示和测量时间和日期的功能函数。当前时间可以使用 time.Now() 获取,或者使用 t.Day() 、 t.Minute() 等等来获取时间的一部分;你甚至可以自定义时间格式化字符串,例如: fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year()) 将会输出01.09.2018 。Duration 类型表示两个连续时刻所相差的纳秒数,类型为 int64。Location 类型映射某个时区的时间,UTC 表示通用协调世界时间。包中的一个预定义函数 func (t Time) Format(layout string) string 可以根据一个格式化字符...阅读全文

博文 2018-10-15 09:34:42 编程老司机

go语言中rows.Next性能问题

下面代码中 因为数据也不算太大2W多条,但是rows.Next() 竟然执行了1分多钟,我换回C#10来秒,这让我很不理解,有大神能提点下吗?不胜感激 func queryLineInfo() string { loginfo(log_info, log_project, "数据查询开始!") rows, err = QuerySql(sqlstr) loginfo(log_info, log_project, "数据查询结束!") if err != nil { rows.Close() //fmt.Println("数据库查询失败", err) get_lineinfo.Rescode = "0000" get_lineinfo.Re...阅读全文

【每日笔记】【Go学习笔记】2018-12-27

方波 1、redis实现集群需要解决的问题列表: 1 多key读写(mget mset) 2 多key计算(集合交并集计算) 3 扩缩容 4 proxy冗余 2、一致性hash环: 1 一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,比如redis的16384个slot。 2 将机器虚拟并随机在环上分配相应slot区间。随机虚拟节点是为了解决数据倾斜问题。 3 增加机器时,将原区间上的数据重新hash到两个区间,比如[b2, c1],加入d3为[b2, d3], [d3, c1] 4 机器故障时,只会影响分配到该机器的key。 3、go协程与线程的讨论 go调度器如何管理goroutine: 实验代码: package main import ( "fmt" "time" ) fun...阅读全文

博文 2018-12-30 10:34:43 LNMPR源码研究