mongodb+mysql+redis保持数据一直问题

海A天空 2015-03-08 01:14:07
项目存储架构准备使用mongodb+mysql+redis
现在对两点不太清晰,在此询问下各位大侠,给俺指点下迷津呀

一、mongodb+mysql,一个文档数据库+传统关系数据库,在系统中根据业务模块去选择哪类,哪位大侠用过这两个组合,给小弟具体指出大致划分规则。mysql具有稳定的事务处理和丰富的sql查询,mongodb在数据扩展性和高并发很有优势。如果我有以下几种场景:
1、某个模块数据量很大,但是在这个模块写数据时事务逻辑稍微有点复杂,一致性要求不是太高,没有下单或者付款流程那么严格。
2、一些基础数据,就是不经常变化的数据,但是需要经常查询。
等等情景
还有大侠们遇到的或想到的情景,改选择哪个?

二、准备用redis作为缓存层
但是问题来了,如何保证redis和mongodb还有mysql中的数据一致。
比如:
1、在执行一个操作时在mongodb或mysql中更新成功了,但是在redis中更新失败了,这种情况如何避免?出现了怎么解决?
2、在redis中更新成功了,但是在mongodb或mysql中事务失败了呢?
3、有可能你会提出:可以先更新mongodb或mysql,然后根据结果更新redis。但是还是有问题,如果你把他们放到一个事务里,二者都成功了,但是有可能在commit事务时出错,这样就只有redis更新了。如果你不把他们放到一个事务里,有可能在mongodb或mysql提交事务更新成功后,redis更新前断电了呢,这样redis没有更新。
...全文
407 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
海A天空 2015-03-10
  • 打赏
  • 举报
回复
引用 1 楼 eshujiushiwo 的回复:
HI 楼主你好 一。 两者皆可 二。 1.做缓存层,如果是介于应用与db之间的缓存,那么应该是会先写redis,然后回写db。 2.额,有点笼统,看你程序怎么写的,还有为何会失败呢,需要这些信息来做判断的,一般也不会出现这问题,如果程序写失败了就返回错误,或重写。 3.如果做缓存层,一般都是先写redis 然后回写db的,这种情况下redis 可以用集群来保证高可用(当然数据还是不落地来保证性能)
你好,按照您说的,先写redis 然后回写db,如果回写db出错的话,重写,重写3次都失败,这个时候是不是需要再写一次redis呀,把历史正确数据写入redis,保证redis和db的一致性。 还是说设计一套日志系统,针对不同的错误信息自动处理数据,保证redis和db的一致性。
eshujiushiwo 2015-03-09
  • 打赏
  • 举报
回复
HI 楼主你好 一。 两者皆可 二。 1.做缓存层,如果是介于应用与db之间的缓存,那么应该是会先写redis,然后回写db。 2.额,有点笼统,看你程序怎么写的,还有为何会失败呢,需要这些信息来做判断的,一般也不会出现这问题,如果程序写失败了就返回错误,或重写。 3.如果做缓存层,一般都是先写redis 然后回写db的,这种情况下redis 可以用集群来保证高可用(当然数据还是不落地来保证性能)

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧