面试官:为什么在系统中不推荐双写?
面试官:"阿雄是吧,做做自我介绍!"
阿 雄:"我叫阿雄,来自某a国际电商公司!"
面试官:"我看你项目里用了elasticsearch,你是怎么同步数据的呢?"
阿 雄:"在代码里写入数据库的时候,同时再写入elasticsearch!"
面试官:"那你如何保证写入数据库,和写入elasticsearch原子性问题呢?万一写入数据库成功了,写入elasticsearch失败了怎么处理?"
阿 雄:"我还是回去等通知吧!"
OK,以上情形纯属虚构,如有雷同,巧合!
其实这篇文章所探讨的数据同步策略并不限于某两种固定的存储系统之间,而想去探讨一种通用的数据同步策略。主要分为以下三个部分
- (1)背景介绍
- (2)双写缺点
- (3)改良方案
正文
背景介绍
话说阿雄在加入某a国际电商公司的时候,业务系统十分简单,一个database就能搞定一切!
可是某a国际电商公司在产品韩的领导下,业务增长迅速,阿雄发现了数据库越来越慢,于是乎阿雄加入了一些缓存,如redis来缓存一些数据,提高系统的响应能力。
又过了一段时间,产品韩发现搜索的速度灰常慢,让阿雄去改。阿雄在网上发现,现在业内都用一些elasticsearch做一些全文检索的操作,于是乎阿雄将一些需要全文检索的数据放入elasticsearch,提高了系统的搜索能力!
随着数据的膨胀,阿雄慢慢的发现了,对数据库做一些数据分析操作,性能明显的跟不上了。于是乎阿雄将数据库里的数据,导入hadoop,然后进行数据分析。
(省略一万字….)
后,阿雄和产品韩幸福的在一起了。
OK,好,现在分析上面的场景!思考个问题
1、在database,redis,elasticsearch,hadoop中的数据是有关系的,还是彼此独立的?
显然是有关系的,在这几个数据源中的数据都是相关的。只是格式不一样而已!例如,对于一条Product数据,在数据库里是
在redis里就是key为
product:pId:1
相关文章