事务型系统由sql迁移到nosql问题总结
来源:互联网 发布:网站的源码如何查看 编辑:程序博客网 时间:2024/05/02 02:17
场景:
业务系统:需要保证高一致性的交易系统
nosql数据库:简单的key value型数据库,用hash实现的key value。
业务系统:需要保证高一致性的交易系统
nosql数据库:简单的key value型数据库,用hash实现的key value。
在这样的场景下通常会面临的问题如下:
1、表中有多个索引的问题。
例如表 t_acct(a,b,c) 索引为a,b。业务系统会以a b为key做查询,也会对b进行修改。
解决这样的问题是把表进行拆分为,存入key value数据库时,拆分为两条数据
(a,a b c) (b, a b c)
但是这样带来两个问题1、数据冗余 2、单条记录操作的原子型。数据冗余可以忍受,但是操作的原子性是无法忍受的,对于这个问题后边后又绝方案。
1、表中有多个索引的问题。
例如表 t_acct(a,b,c) 索引为a,b。业务系统会以a b为key做查询,也会对b进行修改。
解决这样的问题是把表进行拆分为,存入key value数据库时,拆分为两条数据
(a,a b c) (b, a b c)
但是这样带来两个问题1、数据冗余 2、单条记录操作的原子型。数据冗余可以忍受,但是操作的原子性是无法忍受的,对于这个问题后边后又绝方案。
2、需要对表范围查找的问题
对于key value数据库,范围查找的场景,暂时没有看到相关解决方案。但是一般范围查找都是offline的应用,可以通过准实时同步key value数据库的数据到关系型数据库中来解决。
对于key value数据库,范围查找的场景,暂时没有看到相关解决方案。但是一般范围查找都是offline的应用,可以通过准实时同步key value数据库的数据到关系型数据库中来解决。
3、单机事务的问题
通常key value型的内存数据库,不支持事务,但是也有通过近似的机制来模拟事务的情况。
在redis上,事务是通过multi指令来简单支持的。先发送命令,调用exec时一次执行所有指令。
redis> multi
OK
redis> incr a
QUEUED
redis> incr b
QUEUED
redis> exec
1. (integer) 1
2. (integer) 1
这样大大减少了失败的可能性。既可以近似看作事务,也可以保证高性能。
通常key value型的内存数据库,不支持事务,但是也有通过近似的机制来模拟事务的情况。
在redis上,事务是通过multi指令来简单支持的。先发送命令,调用exec时一次执行所有指令。
redis> multi
OK
redis> incr a
QUEUED
redis> incr b
QUEUED
redis> exec
1. (integer) 1
2. (integer) 1
这样大大减少了失败的可能性。既可以近似看作事务,也可以保证高性能。
4、分布式事务的问题
通常销售操作要对两个表进行操作,用户信息表和订单表,在分布式环境下就涉及到了分布式事务。
对于分布式事务ebay已经提出了解决方案,最重要的技术就是消息队列和消息应用状态表。
详细说明可以参考http://queue.acm.org/detail.cfm?id=1394128
通常销售操作要对两个表进行操作,用户信息表和订单表,在分布式环境下就涉及到了分布式事务。
对于分布式事务ebay已经提出了解决方案,最重要的技术就是消息队列和消息应用状态表。
详细说明可以参考http://queue.acm.org/detail.cfm?id=1394128
- 事务型系统由sql迁移到nosql问题总结
- svn_auth系统由windows迁移到linux下遇到的问题
- geoserver由windows迁移到linux64位系统
- SQL到NoSql
- 从SQL到NoSQL
- 由Github迁移到GitCafe
- 32位系统迁移到64位系统注意事项(总结)
- 企业应用系统由oracle迁移到阿里云mysql数据库的思考
- sql server 2005数据库迁移到oracle10g遇到的问题
- 顺利完成由mambo迁移到mambors
- 博客由Hexo迁移到CSDN
- 从websphere6.1迁移到weblogic10.3的问题总结
- 项目从intellij idea迁移到eclipse中问题总结
- 浦科特系统迁移问题
- SQL到NoSQL概览性总结之一 数据库应用场景选型
- sql server迁移到oracle
- Sql Sever迁移到Mysql
- mysql 迁移到 sql server
- 313
- epoll服务器编程-demo
- 不能上网诡异问题||强制linux DHCP 客户端重新获取IP (dhclient)
- ClassPath in Ant for Javac task
- 不想当穷人就好好读读这篇文章 都是大实话啊
- 事务型系统由sql迁移到nosql问题总结
- MYSQL安装
- 使用公用表表达式(CTE)简化嵌套SQL
- Myeclipse10下载,安装,破解,插件,优化介绍.
- C#对Illustrator (ai) 操作
- 线程池的原理和连接池的原理
- ganglia
- 写在CSDN的心情
- Practical Java(重点版)之性能