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

astaxie · 2016年10月25日 · 最后由 hmly 回复于 2016年10月26日 · 733 次阅读
本帖已被设为精华帖!

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,嘉宾会在空闲时间上来给大家一一回答。不欢迎任何与主题无关的讨论和喷子。

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

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

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

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

你的意思是否是这样:

  1. innodb 数据在主键后面,索引定位了主键就能定位行的锁状态和数据,所以容易实现行锁;
  2. myism 所有索引只能定位行号或者行的位置关系,无法定位数据文件中该行的位置,所以做了表锁?

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

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

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

谢谢!

@flike 了然了,多谢

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

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

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

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

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

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

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

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

xiemengjun 将本帖设为了精华贴 02月11日 01:46
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册