这次还是以介绍TokuDB内部机制为主, 本篇来谈谈TokuDB内部的线程池模型。
TokuDB内部有一个线程池实现kibbutz, 代码: https://github.com/Tokutek/ft-index/blob/master/util/kibbutz.cc
其调度思想基于work-stealing, 代码也很简洁, 大体思路就是:维护一个任务队列, 空闲线程自己去这个队列领取任务。
kibbutz中文为“基布兹”,是以色列的一个集体社区,感兴趣的戳这里。
keep running, just do it!
这次还是以介绍TokuDB内部机制为主, 本篇来谈谈TokuDB内部的线程池模型。
TokuDB内部有一个线程池实现kibbutz, 代码: https://github.com/Tokutek/ft-index/blob/master/util/kibbutz.cc
其调度思想基于work-stealing, 代码也很简洁, 大体思路就是:维护一个任务队列, 空闲线程自己去这个队列领取任务。
kibbutz中文为“基布兹”,是以色列的一个集体社区,感兴趣的戳这里。
PG 9.4版本里面,增强了对json数据的支持,受到了很大关注。9.4之前,PG已经原生支持json数据类型了,但只是用字符串的形式存储和处理。这样做天然有性能上的缺点:每次对json字符串里面的数据进行查询,一般需要全表扫描加字符串匹配,效率很低。当然也可以在存储json的字符串字段上创建GIN索引,但需要对查询中用到的json的key或value创建单独索引,造成要被动维护很多索引。所以,这种json类型,只适用于把PG单纯作为数据存储,只读入读出数据,不对数据进行限定key或value查询的场景。
Logical Decoding是9.4里面的一个主要功能,是向最终实现逻辑复制迈出的一大步。简言之,它的功能是从PG的WAL日志中,读取数据库更新信息,然后“翻译”(Decode)成逻辑的形式,可发送到远程从库做数据同步。这个功能还可以用于,DBA在数据库宕机,并发生主从切换后,检查原主库有哪些更新宕机前未同步到从库,并手动同步来弥补丢失的(已提交)的更新。这里我们探索一下它的使用和实现原理。
在MySQL中,表是和操作系统中的文件对应的,而文件名在有的操作系统下是区分大小写的(比如linux),有的是不区分大小写(比如Windows),表名与文件名的大小写对应关系,MySQL 是通过lower_case_table_names 这个变量来控制的。