MySQL DBA's Blog

鼓浪屿,其实我不想离开你(乱弹篇)

July 19th, 2010

本系列的最后一篇,就扯些和鼓浪屿有关而又不是那么系列的事情。

一、望远镜不是好抢的!
由于技术上的失误,我们三个人上鼓浪屿的时候,坐了15块钱/人的游览船。船开了一会会,某处的喇叭就开始喊“船上有望远镜,大家可以到前面来拿,看看海峡对面的风景”。我和光哥正四处张望哪里有望远镜时,均量已经得意地拿着望远镜出现在我们面前。三个人很二地蹲在船头看着n远的台湾,废了半天劲什么都没看见。过了会,船上的水手过来收取每个望远镜十块的使用费。当时我们的冲动是趁他不注意把望远镜扔进海里,来个死无对证。幸好我们是社会主义好青年,所以乖乖付了十块钱。

二、便利贴是用来说倾诉的~
不管是龙头大排档,还是张三疯欧式奶茶店,墙上都贴满了客人们亲手写的便利贴。
有独自旅行者对未来自己的寄托,有小两口浓情蜜意的见证,偶尔也有饥渴者留下的电话号码和好事者的备注。

三、每家都有小别墅
鼓浪屿上别墅到处都是,几乎家家户户都住的是别墅,只是装修有差异罢了。
家庭旅馆的兴起,使得鼓浪屿上的别墅着实火了一把。又能自己住又能赚钱,何乐不为呢?

四、酒吧很多很生猛
世界杯决赛那天,我们半夜跑去酒吧看比赛。赛前老板决定放点电影,光哥要求来点刺激的。
老板突然眼神一变,很正气凛然地说:“K粉要不要?一万一条!要不要?”
于是我们几个很安静地闭嘴了……

五、海景很脏很丑陋
虽然说鼓浪屿是个著名的旅游景点,但是海水真的很脏。
跳进充满垃圾和泥沙的海水中,需要不亚于直面房价的勇气。
奇怪的是,这样的海水,居然还能撑起好几个海水浴场。相当崩溃……

六,没吃沙茶面,好遗憾……
这次实在是没空吃沙茶面了。幸好八月中旬技术保障部组织了一次厦门outting。
嘿嘿,正好把沙茶面补上~

鼓浪屿,其实我不想离开你(美食篇)

July 14th, 2010

按照上一篇blog的记述,我们已经安全抵达鼓浪屿,并找到了著名的缘中园安顿下来,接着就是品尝各种各样的美食了。
鼓浪屿上的美食,主要分为海鲜和甜点、饮品。海鲜主要集中在龙头路的大排档和海滨浴场的沙滩边。甜点主要是台湾特色的凤梨酥、绿豆糕。饮品有冰椰子、鲜榨果汁,以及欧式奶茶。不得不提一下,我到了鼓浪屿之后深感肚皮之小,肠胃功能之弱。建议大家备好健胃消食片和止泻药,不然真的会饮恨当场。
Read the rest of this entry »

鼓浪屿,其实我不想离开你(交通篇)

July 14th, 2010

月初买了本《2010中国自助游》,在家翻得心神荡漾。
正好赶上光哥在群里提议去鼓浪屿,于是迅速定了房间和火车票,10号清晨出发。

本来想预定厦门轮渡的如家,结果被光哥鄙视了一把。考虑到之后的两天将会在鼓浪屿上度过,如家确实不太方便,于是就在岛上的家庭旅馆里面选了一个。岛上最有名的家庭旅馆是“娜雅”,其次是“船屋”和“缘中园”。
娜雅的卖点在于猫,著名的“张三疯”就安家在娜雅。而船屋内的卖点是,房间按照船上的等级进行装修。缘中园的装修也很不错,特别是三人房和豪华房,都是两层的小阁楼。娜雅和船屋需要提前一个月进行预定,而且需要预付定金。缘中园提前两个星期就可以,不需要定金。以下是缘中园三人房的实地拍摄:




Read the rest of this entry »

handler和handlerton

July 9th, 2010

很久之前看过Understanding MySQL Internals的一些片段。最近很烦,于是又翻了翻(纯发泄)。

handlerton提供的是存储引擎的一些特性。比如记录点、提交、回滚。同一个引擎跨表的操作需要在handlerton里面完成,比如说引擎的初始化,跨表的事务。
handler提供了表的基本操作。比如打开关闭表、扫描数据索引,都可以在handler里面找到相应的接口。每个handler的子类进行初始化对象的时候,必须向构造函数传递一个handlerton对象的引用。
handler类有很多纯虚函数,必须要在handler的子类里面实现。这些函数决定了存储引擎的底层io方式,包括数据存取和索引。
ha_example.h里可以很方便地找到这些纯虚函数:
int open(const char *name, int mode, uint test_if_locked); // required
int close(void); // required
int rnd_init(bool scan); //required
int rnd_next(uchar *buf); ///< required
int rnd_pos(uchar *buf, uchar *pos); ///< required
void position(const uchar *record); ///< required
int info(uint); ///< required
int external_lock(THD *thd, int lock_type); ///< required
ha_rows records_in_range(uint inx, key_range *min_key, key_range *max_key);
int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info); ///< required
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, enum thr_lock_type lock_type); ///< required

貌似有点困了。改日用GDB调试一下EXAMPLE引擎,再上来写一个~