代码改变世界

vitess源码阅读笔记cache系列之用go实现mysql连接池ConnectionPool

2012-04-06 16:16 by ngaut, 1674 阅读, 0 推荐, 收藏, 编辑
摘要:上一篇笔记我们了解了通用资源池,就像人和人不同,池与池亦有异。往池里放水就成了水池,往池里放内存就成了内存池。往池里放mysql连接呢?自然就成了本篇笔记的主角mysql连接池。当然这个连接池也分几种。又的连接只用来做mysql查询,有的用来做事务操作。用来做mysql查询的连接池在vitess里面叫做ConnectionPool。ConnectionPool在架构图中扮演的角色是什么呢?架构图上已经非常清晰的注明了,见架构图的右下角。还是先上数据结构,看看往池里面放的是什么typePoolConnectioninterface{ExecuteFetch(query[]byte,maxrows 阅读全文

vitess源码阅读笔记cache系列之用go实现通用资源池

2012-04-06 14:34 by ngaut, 2628 阅读, 1 推荐, 收藏, 编辑
摘要:更新日志:更新至2012.4.8的vitess代码新的代码增加了同步用的条件变量,没有空闲资源时的排队不再使用channel来同步(使用其它编程语言的同学可以方便的移植这个代码了),转而使用condition variable。不再使用mu.RLock,统一使用Lock,不再纠结。整体代码清晰了许多。 为了进一步提高性能和代码复用,vitess还提供了通用的池管理,RoundRobin.go中实现了通用的资源池,方便管理池内资源总数,超时。先上第一道菜:RoundRobin在整个vitess架构中扮演的什么角色?个人觉得RoundRobin的重要性在vitess中怎么着也能算个丐帮的几个长老之 阅读全文

vitess源码阅读笔记cache系列之memcache客户端(兼谈让人又爱又恨的gc和golang的错误处理机制)

2012-04-06 10:43 by ngaut, 4750 阅读, 0 推荐, 收藏, 编辑
摘要:memcache的客户端实现文件是memcache.go,实现了memcached的协议客户端,对于学习golang的客户端网络编程,memcache.go还是非常值得一看的。奇怪的是vitess的安装文档没有提到要求安装memcached,至于为什么使用memcache,而不是进程内的cache以节省开销呢?vitess的文档是这样描述的:Go’s existing mark-and-sweep garbage collector is sub-optimal for systems that use large amounts ofstatic memory (like caches... 阅读全文

vitess源码阅读笔记笔记之LRUCache

2012-04-05 18:58 by ngaut, 1157 阅读, 0 推荐, 收藏, 编辑
摘要:LRUCache的作用以及在vitess中扮演的角色,文档上是这样描述的:vtocc builds a plan for every query that requires bind variables. It stores these plans in an LRU cache今天先来分析LRUCache本身的具体实现提到cache就不能少了key-value(以下简称kv),提到kv就不能不提到两个必须实现的接口。get和set,LRUCache也不例外。kv最便捷的实现方法就是map,至于map底层实现是hash表还是红黑树,暂时无需关心,LRUCache大概也是这样想的,使用了map作 阅读全文

vitess源码阅读笔记笔记之基本概念与架构图

2012-04-05 15:22 by ngaut, 1735 阅读, 2 推荐, 收藏, 编辑
摘要:vitess中需要理解的基本概念DDL和DML的区别SQL statements are often divided into three categories:DML (Data Manipulation Language). These SQL statements are used to retrieve and manipulate data. This category encompasses the most fundamental commands including DELETE, INSERT, SELECT, and UPDATE. DML SQL statements.. 阅读全文

vitess源码阅读笔记笔记之起因和编码风格

2012-04-05 13:22 by ngaut, 1488 阅读, 2 推荐, 收藏, 编辑
摘要:初学golang,找个项目作学习一下1. why golang? 这个问题总是免不了无休止的争论,不想多说,如果你有如下体验,自然知道我在说什么,否则也不要问。 编译巨慢的模板,特别是让人又爱又恨的boost 逻辑拆分得支离破碎的asio 侵入性巨强的share_ptr 查过项目中内存泄漏,句柄泄漏 不受控的异常抛出 多线程程序的如履薄冰 过多层次的抽象2. why not xxx? erlang ? 不可否认非常强大,本人也很欣赏二郎的设计,无奈中c的毒太深,不适应erlang的语法 scala ? 尽管很强大,还有自己喜欢的actor,但静态语言设计得有必要这么复杂么,... 阅读全文