NOSQL如何与关系数据库保持最终一致性
2012-05-24 10:20
453 查看
最近有个在盛大的徒弟问我交易信息的存储方案,对于大型电子商务交易网站,经常碰到查询慢,数据量大的问题,使许多公司对于这种查询碰到瓶颈,包括我现在所在的公司,大多数公司是将数据库读写分离,但实际上效果并不是很好,查询依旧很慢,毕竟数据量比较大。
很巧,我最近也在思考这个问题,当然我的方案是NOSQL数据库与关系数据库保持最终一致性,而不是保持实时一致性。这个需要一个检查机制,我这里就讲一种高效的检查方案。
方案说明:
我们对于user信息表(强烈建议使用短表,主键为userid)加一个长度为32位字符串的字段或一个长整型的字段(为什么可以是两种类型?因为.NET中的hashcode是long型的),命名为CheckSum,顾名思义就是综合校验。这个数据是怎么得来的?
我们将该用户的userid,加上每条交易的交易号,金额,状态,类型,最后更新时间进行拼接,然后取MD5或者hash得到一个字符串或者长整型。
那么NoSQL也有对应的字段,另外加上最后一次更新的时间。当用户登录后,出发一次校验,当发现CheckSum不同的时候,则将NoSQL最后更新时间取出,并从关系数据库中读取该时间后的交易,并更新(NOSQL大多数更新就是插入),这样可以保证关系数据库和NOSQL数据库的最终一致性了。
本文出自 “大型网站应用技术” 博客,请务必保留此出处http://jialine.blog.51cto.com/2728989/875484
很巧,我最近也在思考这个问题,当然我的方案是NOSQL数据库与关系数据库保持最终一致性,而不是保持实时一致性。这个需要一个检查机制,我这里就讲一种高效的检查方案。
方案说明:
我们对于user信息表(强烈建议使用短表,主键为userid)加一个长度为32位字符串的字段或一个长整型的字段(为什么可以是两种类型?因为.NET中的hashcode是long型的),命名为CheckSum,顾名思义就是综合校验。这个数据是怎么得来的?
我们将该用户的userid,加上每条交易的交易号,金额,状态,类型,最后更新时间进行拼接,然后取MD5或者hash得到一个字符串或者长整型。
那么NoSQL也有对应的字段,另外加上最后一次更新的时间。当用户登录后,出发一次校验,当发现CheckSum不同的时候,则将NoSQL最后更新时间取出,并从关系数据库中读取该时间后的交易,并更新(NOSQL大多数更新就是插入),这样可以保证关系数据库和NOSQL数据库的最终一致性了。
本文出自 “大型网站应用技术” 博客,请务必保留此出处http://jialine.blog.51cto.com/2728989/875484
相关文章推荐
- NoSQL的存储架构——最终一致性数据库
- CAP,BASE和最终一致性是NoSQL数据库存在的三大基石
- 请教~~~如何保持在两个数据库(sql server 2000)之间,保持事务的一致性
- 如何保持数据库和缓存的一致性
- 如何让navigationItem在整个项目保持一致性?
- 关系型数据库与Nosql的关系
- 云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- NoSQL入门级资料整理(CAP原理、最终一致性
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 关系数据库还是NoSQL数据库
- 关系数据库和nosql
- NoSQL数据库:数据的一致性
- NoSQL数据库:数据的一致性
- 关系数据库及NoSql图书大推荐
- 上下游依赖 这种er关系 在mysql 等关系型数据库中 如何设计 存储
- 面试问题(如何保证分布式数据最终一致性)
- 云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- NoSQL的三大基石(CAP、BASE和最终一致性)
- 如何用Visio画数据库实体关系图