每周推特 2010-06-13

6 月 13th, 2010 | Posted by | Filed under 生活轨迹
  • 滨江的一室一厅房型主要集中在哪啊 #
  • 一室一厅一卫的房子真贵…… #
  • @jxu 但我只想单住,不想合租 in reply to jxu #
  • 300M的路由器到了,终于可以通过笔记本控制台机上的8个虚拟机搞测试了 #
  • 为了搞出能匹配MySQL各种CREATE TABLE少见情况的正则,费劲了脑子,追究还是水平差了点,写不出这么完善的正则。突然一想,把libmysqld.a编译进来算了,让MySQL的Parser去解析不就好了嘛,然后从information_schema里面读出来…… #
  • 搞出今晚这事的哥们,搞不好就真能工资已欠费了。幸亏还有binlog能全库恢复,要是没有完整binlog,要是这库上不止跑了一个应用又是ROW方式日志,今天就会彻底的悲剧。希望能给总想要更大权限的开发敲响警钟。 #
  • 希望能通过这次故障,推动一些规范,尤其觉得,应用不应该拥有DELETE权限,应用删数据应该是逻辑的而不是物理的,由DBA定期的转移逻辑删除的数据。 #
  • 其实优秀论文早就内定了,还是那些所谓的好学生,要靠庇护生存的好学生,不知道有啥竞争力 #
  • RT @Doriscafe: 某女友短信來,說遇到本世紀最囧事件:體育課的時候ob掉出來了…杯具! //ob是啥…… #
  • 还得回去答辩,哎~算凑热闹好了 #
  • 长期呆在杭州的话,长租一个毛坯房,自己简易装修下恐怕是最划算的方案 #
  • @yanzisky1989 我呀…… in reply to yanzisky1989 #
  • @heysql 装修也就花个几千块,能租上3年早就赚了 in reply to heysql #
  • @heysql 说白了大家都是寄党篱下,哪天拆迁队来了,一样的悲剧了 in reply to heysql #
  • 蒋公所书:壹、忠勇为爱国之本,二、孝顺为齐家之本,三、仁爱为接物之本,四、信义为立业 之本,五、和平为处世之本,六、礼节为治事之本,七、服从为负责之本,八、勤俭为服务之本,九、整洁为强身之本,十、助人为快乐之本、十壹、学问为济世之本、十二、有恒为成功之本。大赞,比毛语录强多了 #
  • 手机坏了,悲剧 #
  • 准备买个黑莓9000,用联通号。我还是信任黑莓,我这500块的8700,任我折磨,各种折腾,多次白屏再敲几下又恢复了,质量真是我见过最好的手机。 #
  • 传说我那算法清华的高材生都没看懂,我能对教育说啥,理论上学过线性代数的都应该一眼看明白,可见学过就忘 #
  • 已购买联通号,18658156856,觉得这个号码挺好的,竟然也在66元套餐里可以选,答辩完回来采购黑莓9000,9700太贵,不然就9700了,强了不少 #
  • 被数据库折腾的不想睡了,直接等答辩,答辩完到车上睡去 #
  • @hhzhhz 已经买9000了…… in reply to hhzhhz #

Powered by Twitter Tools

标签:

YY的数据交换总线

6 月 6th, 2010 | Posted by | Filed under 架构设计

数据交换是目前我们非常头痛的一件事情,数据仓库从数据库拉数据,不同的IDC之间要相互同步数据,一旦结构变更,没有及时的通知到一方,数据交换就出问题了,靠解日志的方式,也多少存在一些问题。
这些问题的根源都是一个问题,异构性。
Java的成功让我们知道,解决异构性的最好方案就是虚拟机,这种虚拟化机制能不能用到我们的数据交换中呢?
企业系统总线可能是一个可以借鉴的方案,我这里就YY了一个数据交换总线,Data Exchange Bus。

YY的数据交换总线

在DEB架构中,客户端并不直接访问数据库,而是访问DEB的访问接口。每个连上来的应用需要连接不同的数据库,怎么分辨,这里引入“数据通道”的概念,我们称一个点对点的数据连接为一个数据通道,每一个源点发出的请求,会被分发到与它连接的每个数据通道中,这个分发的任务,就由数据路由模块完成。数据路由模块还应该有一个虚拟化功能,将多台分库的数据源虚拟为一个单点数据源,暴露给数据通道控制器时就是一个点。
由于是异构系统,所以需要对各种数据库之间不同的SQL进行转译,一个方式是在数据通道里配置客户端结点的SQL版本和目标结点的SQL版本,然后SQL翻译模块进行翻译。还有一种办法就是规定客户端使用我们指定的SQL版本,例如SQL92,这样SQL翻译模块做起来就简单多了。
数据路由分发请求后,如果SQL要求排序分组等操作时怎么办?这个时候就需要做分布式排序操作,这恐怕是这里最难实现的。通过分布式计算系统提供基本的MapReduce接口,然后分布式排序引擎对每个分库选出来的数据分别排序,然后做归并,直接返回给用户,如果还存在分组,那么数据传递给分布式分组函数引擎,对排序后的数据再进行分组加工,然后返回给客户端。

其实这里面的每个模块,我们都是可以实现或者已经实现的,但是却没有有效的整合在一起,做成一套整体的数据交换平台。我这里纯属YY一下。

MySQL binlog的地雷

6 月 6th, 2010 | Posted by | Filed under 未分类

上周在研究MySQL binlog格式的时候,发现了一些MySQL binlog的风险点,记录一下。

5.1版本后,MySQL引入了基于ROW方式的binlog格式,不同于Statement方式的是,ROW方式记录了变更的内容,而不仅仅是SQL
通过mysqlbinlog工具可以解析查看,mysqlbinlog mysql-bin.000001就可以查看解出后的格式,Statement方式记录的SQL被还原,但是Row方式记录的内容,还是BASE64的结构。
mysqlbinlog -vv mysql-bin.000001就可以将Row方式记录的内容也解开来,可以看到类似这样的内容:
### UPDATE test.a
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2=’abc’ /* VARSTRING(32) meta=32 nullable=1 is_null=0 */
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2=’cba’ /* VARSTRING(32) meta=32 nullable=1 is_null=0 */
我们可以发现,binlog中并没有记录列名,只记录了顺序,这样会有什么风险呢?
单机的时候问题不大,但是在双Master的结构下,这问题可就大了,假设Master A <--> Master B正在相互复制,我在Master B做一个DDL改变了字段顺序,那么从B DDL完成开始,到A接受执行完这个DDL为止,之间A产生的这张表的数据复制到B都是错误的!因为MySQL只按字段顺序应用binlog。

如何避免这个问题呢?有两个办法,最保险的只加字段不删字段,加字段总是在表末尾,一句话:不改变字段的顺序。另一个办法就是改变字段顺序的DDL只在提供服务的主机上执行,如果双Master都提供服务,这就不行了,只能在末尾添加字段。

这只是地雷之一,还有第二个地雷。mysqlbinlog这个工具的作者真的比较懒,-d参数过滤数据库的时候,只有Statement方式记录的SQL能被过滤,所有按Row方式记录的SQL都没有被过滤!也就是说,假设你的数据库是基于Row方式记录binlog的,你想通过mysqlbinlog -d db1来过滤出db1的SQL,这是不靠谱的,所有Row方式记录的SQL全部被解出来了,你要是到数据库去应用这些解出来的SQL,你就准备悲剧了,各种Duplicate Key!

还有一个不算地雷但是值得说一下的是,即使不需要使用-d参数,你需要全部binlog都解出来,到数据库去应用,也会有一个悲剧点,Row方式记录的SQL都是Base64格式,解出来还是一样,传到数据库去执行的话,MySQL还会把这些BASE64的字串解成SQL,再去应用,所以数据库Load可能会增长的很高。

每周推特 2010-06-06

6 月 6th, 2010 | Posted by | Filed under 生活轨迹
  • @dfrg_msc 没有吧,一直没F你? in reply to dfrg_msc #
  • 少小太努力,长大PhD,长大还努力,终身Faculty,后面两句是:即使faculty,无法娶到妻。单身一辈子,死磕计算机!!! #
  • Your brain has two parts, the left & right part. The left part has nothing right, and the right part has nothing left…… #
  • 仔细查看了MySQL的binlog格式,以及mysqlbinlog工具的解析方法,地雷很多…… #
  • 八点半了……改论文去…… #
  • 基于ROW方式复制的binlog,采用mysqlbinlog -d db并不能正确的获取到db的binlog,而是全部ROW方式记录的SQL都被解出来了。除非全库应用,否则基于MIXED或ROW的binlog不要用来恢复某个库,不靠谱。 #
  • 基于ROW方式的双Master结构,千万不可以在slave stop的状态下在其中一台机器执行ALTER TABLE调整字段顺序,否则slave start后就悲剧了,新数据全乱了。必须要改字段,也千万别改变顺序,改名没问题,在末尾加字段也OK。 #
  • 发现mysql cluster已经支持指定某些列存磁盘,某些列存内存。 #
  • keepalived+lvs+mysql双Master负载均衡测试中 #
  • DBA还得帮开发调程序,Orz,真有除了Java啥也不会的开发,简单的脚本语言都不懂 #
  • 贝尔实验室只有10%的程序员可以10分钟内写出二分查找,被Java/.Net,被STL惯坏的程序员,还有多少能快速写出二分查找和快排的?也许再过一段时间,讲算法库的算法怎么写的都能出书了——这本是程序员应具备的基本技能。 #
  • @GaoQi08 框架提高了开发效率,却让使用的人越来越笨,不想去追根溯源 in reply to GaoQi08 #
  • 一晚上又耗在开发那调Bug了,哎……为啥报错中一有mysql的字眼就说是数据库错误捏…… #
  • 大学物理啊大学物理……高等数学啊高等数学……还有20天考试…… #
  • MySQL 5.1.36存在Bug,JDBC连接的时候可能导致数据库所有连接全部断掉,row/row0mysql.c的1534行,释放锁无法完成,断开了全部连接。出问题的应该是个pre_built结构体。 #
  • 我买过的正版软件:天网防火墙,已经废弃。KV 2007/瑞星2003/卡巴斯基2009,都不用了,现在是360。EdrawMax,很好的绘图软件,比Visio便宜多了。iTouch的软键盘锁。我决定还是多支持做得好的国产软件,买得起的还是买一下正版。 #
  • 以为接一个无线路由器只有自己用网速就会快的电脑盲,我只能脸上冒黑线。得,自己买个无线路由去,我只是想把台机服务器和笔记本连起来,让我能从笔记本操作台机上众多的虚拟机。 #
  • 有消息说日本人有地沟油回收,经过处理后作为汽车燃料推向市场,中国人也有地沟油回收,经过处理后作为食用油推向市场,百年之后,中国人幸运的全面进化为汽车人 #
  • 西太后可以用3000W两军费去修颐和园,今儿挡中央可以用4000亿去办世博会.两相对比,西太后的3000W是给自己乐呵,挡中央的4000亿是给洋人乐呵.果然是退步不小 #
  • 毕业卡我是填06级还是07级呢,教育部登记我是07级,学校登记我是06级。是高中读2年看起来牛B点还是大学读3年牛B点,这一年扣到哪里呢…… #
  • 终于把论文的格式改完了,我已经快崩溃了 #
  • 想想我当年的偶像求伯君都做游戏了,这是开发者的问题还是国民的问题? #
  • @HicroKee 没高考的飘过…… in reply to HicroKee #
  • @blogkid 如果一个国家有暴雪这样的游戏公司,也有微软这样的软件公司,是不是啥问题。但是咱们这,是个门户都去搞游戏,连扛民族软件大旗的金山也堕落去做网游了,这还成了主要收入来源,我觉得挺悲剧的。 in reply to blogkid #
  • @qianhw MySQL的Query Cache是按表维护的,如果一个表被更新了,那么涉及它的所有Query Cache都会失效。把表的字段拆的分散一点可以更好的利用Query Cache,不过要看值得不值得。除非有SQL高频率的执行且涉及的表很少修改,否则我都不用QC的 in reply to qianhw #
  • RT @chndonny: 有玩RC的吗?入了一台HSP 94111 PRO :)//高端玩具……当年想我爸给我买个这种遥控车,没有获得老妈批准。到大学才玩过遥控的玩具,在实验室组装的山寨遥控直升机。 #
  • @pickuplichun 我在YY,数据路由,跨IDC同步等等问题,可否靠一个数据交换平台来集中完成。 in reply to pickuplichun #
  • @pickuplichun 我靠,已经很NB了 in reply to pickuplichun #
  • 其实答辩就是一场三国杀,你是主公,你的导师是忠臣,其他老师是反贼,负责记录的老师就是内奸 #
  • 君要臣死,臣Facebook,太TMD有创意了 #

Powered by Twitter Tools

标签:

每周推特 2010-05-30

5 月 30th, 2010 | Posted by | Filed under 生活轨迹
  • 肚子痛……吃坏什么东西了么…… #
  • TED讲座:成年人能从孩子那里学到什么,http://goo.gl/HuIu #
  • 作为一个成年人,为孩子创造把我们拍在沙滩上的机会很重要 #
  • 我不觉得我补考单跟科目数基本相等大学就白读了,我从来没有因为过不了就打小抄,我会很尽可能的答完,等有空了再来好好学一遍,补考给过掉,再没时间就重修,每一门过掉的课,都是看过理解了才过的。So, 我很少有60的课,要么就70以上,要么挂掉,除非老师实在想放我过。 #
  • 我值得自豪的是,每个课设我都是优秀,都是我自己一行一行代码敲出来的,超出老师预期追求完美的去完成的,甚至向老师申请延期花2年时间做完了C++课设——适量预测识别算法,向老师申请做一个C编译器抵消我从来不交编译纸上作业…… #
  • 我反倒觉得,门门课90+,从不挂科,逢课必到,一行代码没敲过,每天沉静在考试和书本中的“尖子生”,就课后练习的代码都是找别人写的,大学真白读了。 #
  • 虽然我编译原理只有80几分,但我是写过编译器的,从写代码的过程中来领悟编译,哪怕再过10年,我翻出我的代码,我也能重新想起编译原理的细节,比起做了一学期习题考了90几的同学,他们考完就忘,根本没有领悟编译的精髓。 #
  • 大学的悲哀莫过于老师大多喜欢天天啃书考90,却讨厌真正用实践去理解考70的学生。 #
  • 明天交毕设,目前还没动笔……悲剧…… #
  • 一晚上终于把中文分词加到了FullText索引,明天,哦不,今天中午去交差,论文就瞎扯了流行的分词算法凑字数,然后把自己的实现代码结构啥的一顿狂彻,Over~ #
  • 这次是班级聚的最齐的一次,以后还要这么齐就难了~ #
  • @yanzisky1989 我错了…… in reply to yanzisky1989 #
  • @yanzisky1989 睡着了电话没听到…… in reply to yanzisky1989 #

Powered by Twitter Tools

标签: