关于我

更新时间: 5月 18th, 2015

姓名:何登成

 

技术方向:Database、Concurrent Programming、Performance (Optimization & Tuning)

 

兴趣:看书/技术分享/电影

 

地点:浙江,杭州

 

Email:he.dengcheng@gmail.com

 

新浪微博:何_登成

 

声明:本站点发表的任何文章,仅代表我个人观点。

 

个人简介:

何登成,2001-2009年就读于浙江大学,期间(2005-2009)参与国产Oscar数据库的研发工作,负责 索引/锁表/事务 等模块开发,积累了丰富的数据库理论与研发经验。

 

2010年进入ALIBABA,作为应用DBA管理整个中文站的Oracle数据库,期间深入学习Oracle数据库,进一步积累自身的数据库使用与运维经验。

 

2011年7月加入网易,就职于网易杭州研究院,设计并研发基于MySQL的TNT存储引擎。

 

2014年8月重新回到阿里数据库团队,老同事,新岗位,新挑战,雄关漫道真如铁,而今迈步从头越!

  1. 老栋
    4月 17th, 201208:14

    恭喜。向前辈们学习

  2. 寂寞的肥肉
    4月 19th, 201209:53

    2001-2009年就读与浙江大学
    错比字~~

    • hedengcheng
      4月 19th, 201216:01

      呵呵,我改改…

  3. 八神
    4月 20th, 201214:35

    登博要开始霸道了,一发不可收拾啊

    • hedengcheng
      4月 20th, 201218:29

      呵呵。以前写的,翻出来晒晒。

  4. Jacky
    4月 20th, 201214:40

    我是来顶登博的。

    • hedengcheng
      4月 20th, 201218:25

      谢谢哥的支持!

  5. mysqlops
    4月 23rd, 201217:26

    顶登博!!!

  6. jametong
    4月 23rd, 201218:49

    顶登博。膜拜ing

  7. ruochen
    6月 7th, 201213:43

    膜拜…

  8. bruce.zuo
    6月 7th, 201217:30

    顶登博士

  9. yiweidujiang
    10月 11th, 201209:52

    向前辈学习!曾有幸在淘宝做外包时跟前辈有过接触,做的是一个光盘内容更新,^_^。

    • hedengcheng
      10月 12th, 201209:35

      哈哈,想起来了!当时真是搞了好多数据…

  10. realzyy
    11月 6th, 201217:06

    登博原来在B2B干过。。。

    • hedengcheng
      11月 6th, 201217:46

      呵呵,学习了好多,也结交了很多大哥!

  11. xhd
    4月 3rd, 201310:47

    您好,我是一名业余数据库内核爱好者,没事写个数据库玩玩,写的过程中遇到了一些问题,想向您请教,我把问题总结成了一篇日志,期待能得到您的答复,谢谢!
    http://blog.csdn.net/xinghongduo/article/details/8754650

  12. rainy
    12月 28th, 201322:49

    浙江大学 学长~哈哈哈

  13. android_RD
    2月 14th, 201418:29

    你好,看了你关于并发的很多文章,有个问题想请教下就是关于,寄存器什么时候和主内存进行同步数据?
    例如:有个变量int a=3, 有个线程
    ……
    run(){
    a=4;
    }
    ……
    按照计算机的执行顺序是,会先把主内存a=3这个值在寄存器里面copy进来,然后操作寄存器把这个值改成a=4,

    那计算机什么时候 会把a=4这个改动 刷回到主内存中,是在run方法执行完毕,还是在这个线程执行完毕?

    • hedengcheng
      2月 16th, 201413:27

      多个线程访问同一个全局变量,能否看到变量的最新版,是通过cache coherence协议实现的,建议你看看mesi协议。至于变量何时被写回内存,这个不同的硬件实现不同,有的硬件,在变量被写会L3 cache时,同时会写出到内存——Write Through;而有些CPu实现,则是在L3 Cache发生替换时,才会将赃数据写回内存。

  14. leeeory
    3月 16th, 201416:48

    前辈你好,
    我才刚刚入行,不是DBA,但是因为最近遇到一个很…尴尬的问题,需要请教你一下。
    因为一些很傻的原因,我们的一个程序不能够向MySQL传逗号,比如这样的SQL
    SELECT * FROM city WHERE ID IN(1,2,3)
    我们不能传【1,2,3】…因为【,】被一个少根筋的同事当作参数分割符,PHP程序会按照【,】分割参数,然后调用MySQL,所以这个SQL语句永远都会是
    SELECT * FROM city WHERE ID IN(1)

    我遇到这个问题的时候就想可不可以把逗号用其它符号代替,MySQL执行的时候再替换回来,比如这样:
    set @tmpIds := REPLACE(‘1@2@3’, ‘@’, ‘,’);
    SELECT * FROM city WHERE ID IN(@tmpIds)
    但是这样只会返回一个查询参数的结果,比如这里就只会返回ID=’1’的结果集

    现在实验了一会发现只有这样的SQL才能返回满足要求的结果:
    SELECT id FROM city WHERE FIND_IN_SET(ID, (SELECT REPLACE(‘1@2@3’, ‘@’, ‘,’)))
    但是他会把表里面所有数据行都一个个比较,太慢了

    我就是想请问一下,为什么这里 IN 子句里面用 变量会不起作用?是因为普通的查询里面 IN 子句会先被MYSQL解析成 类似于 ID=’1′ OR ID=’2′ OR ID=’3’这样子吗?

    另一个问题是这种情况有没有可行的方法能够解决呢?

    期待你的回复

    • 刀尖红叶
      3月 18th, 201414:31

      leeeory :
      前辈你好,
      我才刚刚入行,不是DBA,但是因为最近遇到一个很…尴尬的问题,需要请教你一下。
      因为一些很傻的原因,我们的一个程序不能够向MySQL传逗号,比如这样的SQL
      SELECT * FROM city WHERE ID IN(1,2,3)
      我们不能传【1,2,3】…因为【,】被一个少根筋的同事当作参数分割符,PHP程序会按照【,】分割参数,然后调用MySQL,所以这个SQL语句永远都会是
      SELECT * FROM city WHERE ID IN(1)
      我遇到这个问题的时候就想可不可以把逗号用其它符号代替,MySQL执行的时候再替换回来,比如这样:
      set @tmpIds := REPLACE(’1@2@3′, ‘@’, ‘,’);
      SELECT * FROM city WHERE ID IN(@tmpIds)
      但是这样只会返回一个查询参数的结果,比如这里就只会返回ID=’1′的结果集
      现在实验了一会发现只有这样的SQL才能返回满足要求的结果:
      SELECT id FROM city WHERE FIND_IN_SET(ID, (SELECT REPLACE(’1@2@3′, ‘@’, ‘,’)))
      但是他会把表里面所有数据行都一个个比较,太慢了
      我就是想请问一下,为什么这里 IN 子句里面用 变量会不起作用?是因为普通的查询里面 IN 子句会先被MYSQL解析成 类似于 ID=’1′ OR ID=’2′ OR ID=’3′这样子吗?
      另一个问题是这种情况有没有可行的方法能够解决呢?
      期待你的回复

      因为你的SELECT * FROM city WHERE ID IN(@tmpIds)被解释成SELECT * FROM city WHERE ID IN(‘1,2,3’),所以in里面参数其实就一个–字符串’1,2,3’,id因此只匹配字符串中第一个数字1;
      不能用in,你用 select …..where ID=1 OR ID=2 OR ID=3或者
      select …….where ID=1
      union
      select …….where ID=2不就行了?

  15. satcon
    4月 11th, 201414:17

    向前辈学习!!

  16. 笨笨爱琳琳
    10月 13th, 201411:48

    惊闻登博离开网易了??

  17. atlas
    11月 4th, 201420:39

    向楼主学习!

  18. siyuan
    12月 8th, 201400:47

    你好,请问您能分享下这个讲座的PPT吗? 非常希望能够学习一下,谢谢!
    http://v.youku.com/v_show/id_XNDMzOTk1NTQw.html

  19. androidkite
    5月 21st, 201520:32

    你好,请教一个问题,阿里云服务器现在咋样, 国内的IDC机房 和 美国 的IDC机房 之间的访问速度如何? 有没有专线?
    现在我有个业务模型,美国客户 和 中国客户都会有, 但是我想让他们访问 同一台 DB服务器,不想让业务复杂化,所以想采用云服务器, 但是担心机房和机房之间 访问速度太慢 , 不知道遇到这种问题 你有没有好的解决方案?

  20. 江南馄饨
    6月 12th, 201509:42

    大爱登博~~

  21. cndenis
    6月 12th, 201519:29

    这里的RSS好像有点问题?

  22. jjbond
    6月 23rd, 201516:46

    登博 请教个问题:
    现有表:
    CREATE TABLE `test` (
    `id` bigint(20) NOT NULL,
    `a` int(11) NOT NULL DEFAULT ‘0’,
    `b` int(11) NOT NULL DEFAULT ‘0’ ,
    `c` int(11) NOT NULL DEFAULT ‘0’ ,
    `d` int(11) NOT NULL DEFAULT ‘0’,
    PRIMARY KEY (`id`),
    UNIQUE KEY `a_b` (`a`,`b`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    记录
    +—-+—–+——+——-+——–+
    | id | a | b | c | d |
    +—-+—–+——+——-+——–+
    | 1 | 100 | 1000 | 10000 | 100000 |
    | 2 | 102 | 1002 | 10002 | 100002 |
    | 3 | 104 | 1004 | 10000 | 100000 |
    +—-+—–+——+——-+——–+

    隔离级别是RR 事务A 和事务B
    A:delete from test where a = 102;
    A:insert into test value(4,102,1002,10002,100002);
    B:delete from test where a = 104; 等待
    一直高不明白B为什么会等待?(应该是gap锁引起的)
    如果去掉中间的insert语句,或者insert的值不是已经存在的102,1002,B都不会上锁

  23. Heaven
    4月 2nd, 201611:28

    你好,能请教一下关于百度贴吧楼中楼这种在数据库里面应该如何设计吗,我观察到您的博客好像实现了类似的功能,因为我是搞前端的,所以对数据库这一块不是很了解,希望前辈能给我解惑,谢谢

  24. track
    4月 5th, 201615:34

    学习数据库的好地方,希望博主多出精品文章

  25. Fannie
    4月 21st, 201604:42

    So much info in so few words. Tolotsy could learn a lot.