GoCN第二期《老司机带你看Go风景》——数据库达人陈非

GoCN 本期老司机系列我们请来了数据库开发的达人,之前也分享过很多数据库开发经验 —— @flike 为大家解答关于Go 数据库开发方面的问题。


大家好,我叫陈非(常用网络ID:flike)。 2013年硕士毕业于电子科技大学,同年加入奇虎360的Web平台部,从事MySQL数据库中间件的设计与研发工作。2015年初加入了珠海金山WPS 云平台团队,开始用Go开发后端服务,在这个过程中慢慢地被Go语言简洁的编码风格深深吸引。后来为了造一个更好的轮子,决定用Go实现一个好用的MySQL数据库中间件。经过几个月的开发,kingshard第一个可用的版本发布,得到了社区很多工程师的关注。这也坚定了我继续开发和维护kingshard的信心。2016年又机缘巧合的来到了腾讯云,从事分布式数据库的设计和研发工作。个人对分布式数据库、MySQL内核、数据库中间件和NoSQL比较感兴趣,欢迎交流与讨论。



本次活动持续两天,2016-10-25至2016-10-26,嘉宾会在空闲时间上来给大家一一回答。不欢迎任何与主题无关的讨论和喷子。

已邀请:

flike - kingshard数据库中间件作者

赞同来自: itfanr

@itfanr。我觉得TiDB是一个非常有技术挑战的项目,可以说是代表了NewSQL的一个方向。一旦TiDB稳定下来了,应用场景非常广泛。但从不稳定到稳定的过程,需要很多公司去参与和完善,我觉得这个地方也是很大的一个挑战。

flike - kingshard数据库中间件作者

赞同来自: 云开

@vincentVega,我觉得这种场景更适合用Redis吧

ianwoolf

赞同来自:

1.我想先问下mysql行锁的问题:
myism不支持行锁的原因,是否是存储结构,只能根据索引确定行id,用行id无法确定更改的行数的具体位置,所以锁表。
innodb因为存储结构的关系,可以根据索引确定行,所以支持行锁?


2.现在市面上相关中间件好像无法确定一个sql能否走索引,这样只能凭人力和监控去判断sql是否有问题。我想问下这方面是否有相关解决办法?

flike - kingshard数据库中间件作者

赞同来自:


  1. 我的理解是这样的:Innodb是索引和数据放在同一个文件中的,就像你说的找到了索引就可以确定该行数据,所以加行锁就可以通过锁定索引进行。而MyIsam索引和数据是分开存储的,这种模式通过对索引来锁数据,操作起来比较困难。
    2.确实中间件目前只是转发SQL,更多的是作为读写分离、和负载均衡的解决方案。目前监控和判断SQL还是只能由DBA操作。
    @ianwoolf,有关MySQL内核,我也是初窥门道,说的不一定对,哈哈。

ianwoolf

赞同来自:

你的意思是否是这样:



  1. innodb数据在主键后面,索引定位了主键就能定位行的锁状态和数据,所以容易实现行锁;

  2. myism所有索引只能定位行号或者行的位置关系,无法定位数据文件中该行的位置,所以做了表锁?

flike - kingshard数据库中间件作者

赞同来自:

1.是的。
2.嗯,还有一个问题就是:MyIsam设计之初就没有考虑要支持事务,所以它支持行级锁意义也不大。

itfanr - @inspur

赞同来自:

您好,我是个数据库外行,就问一个稍微浅显点的问题吧。


请问您是怎么看待TiDB这个项目的?感觉前景如何?


谢谢!

ianwoolf

赞同来自:

@flike 了然了,多谢

vincentVega

赞同来自:

大量的关注和粉丝这种操作或加1 减1这种操作,在golang中如何正确使用mysql才能支撑高并发

ianwoolf

赞同来自:

关注和粉丝应该没什么高并发吧,qps能上3k?
我觉得1-2w的qps对mysql应该不叫事,如果扛不住,去看看自己的语句和索引。


如果是尖峰式的qps,我觉得加个队列、做分布式 或者 拆分应该能解决吧,期待大神的回答

marvin

赞同来自:

我想问一下 我不需要读写分离。只是简单的做表分区 ~支持按年、月、日维度的时间分表方式。~ 用Kingshared可以么?或者说你有没有比较好的建议?

flike - kingshard数据库中间件作者

赞同来自:

可以,不需要读写分离的话,你不设置slave就行。@marvin

hmly

赞同来自:

请比较一下MyCat和KingShard各自的优缺点,最后两者哪个更完善和成熟。谢谢!

要回复问题请先登录注册