首页 > 数据库技术 > 详细

数据库操作:编辑表向线上表更新

时间:2016-04-13 23:52:21      阅读:492      评论:0      收藏:0      [点我收藏+]
需求:表edit需要将数据更新到表release,里边会涉及增删改操作,如何做比较好???
            1、edit表是最新的数据,release表是线上表。
            2、会有不同的容器调用release表,也就是需要解决容器之间的锁的问题,其他容器只有读操作,正在操控的容器有读写操作,因为更新操作无法做到原子,所以在操作之间可能会遇到其他容器查询为空或读了一半等出错的状态
 
 
a.   在另外一张表version里,打上到底使用哪张表.   即读取数据的时候是在两个表之间来回跳跃的
 
以下操作在我们做update的容器里需要加锁    1、update version = edit,另外的容器读的时候,先看version指向哪个表,再去读, 2、如果需要考虑效率的话,建一个tmp表,将edit中数据insert到tmp中,然后删除release表,再给tmp表改名为release。3、解锁,之后再需要更新的时候再重复1中,将version先改为release
 
 
缺点:比较繁琐,同时该update操作需要加锁。
 
 
b.  分析一下业务逻辑,到底需要建两张表么????最好的办法是只维护一张表
重新梳理一下业务逻辑,我们的原始需求是:  
1、给每个list添加删除修改排序“tag”,当点击发布的时候需要将对tag的修改操作更新到线上,scheme应该是 tagID, tagName, listID, sort,tagID递增的
2、另外的容器读取分类是在该表查找该listID对应的所有的“tag”
3、如果编辑时增加了一个新tag,那么线上也会多了一个tag,此时出现bug,因此应该加一个status状态   enum为 ONLINE, OFFLINE,那么新增加的tag为OFFLINE,发布时改为ONLINE,此时不会影响线上
4、如果编辑时删除了一个分类,为了不影响线上,我们不能在表里删除这个tag,应该加一个valid状态,enum为VALID, INVALID, 删除的直接打上INVALID即可
5、修改tagName这个操作可以转化为增加和删除操作,首先将之前的tag的valid状态改为INVALID,然后insert一个和原tag都一样但name改变了的tag,但是发现之前的tagID是主键,现在重复了,所以
        需要再添加一个递增id作为主键,将catID变为随机数。
6、排序操作我们默认的是冒泡法的排序,那么也可以转化为增加和删除。

 

数据库操作:编辑表向线上表更新

原文:http://www.cnblogs.com/777fleet/p/5389251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!