喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
 14  1/2  1  2  > 
     
标题: [问题] 关于mysql完整性的问题  
 
deng0685
高级会员
Rank: 4


UID 84760
精华 0
积分 701
帖子 828
金钱 701 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-12-13
状态 离线
关于mysql完整性的问题

有个问题想了很久,如何确保插入mysql数据的完整性

即   如果用户在进行 多条  insert 操作,而且必须保证这些数据全部写入数据库
但是服务器在还没有全部insert完的时候就当掉了


那么我们的代码要怎么写才能保证不出现这样的错误呢


!!!!!!!!!
2008-7-8 04:33 PM#1
查看资料  Blog  发短消息  顶部
 
deng0685
高级会员
Rank: 4


UID 84760
精华 0
积分 701
帖子 828
金钱 701 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-12-13
状态 离线
[推荐阅读] 广东汕头电信服务器P4 3.0年付7500元送产权QQ445676667
在线等答案直到晚上10点........

我相信我能感动上苍地...


呵呵.........
2008-7-8 04:34 PM#2
查看资料  Blog  发短消息  顶部
 
deng0685
高级会员
Rank: 4


UID 84760
精华 0
积分 701
帖子 828
金钱 701 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-12-13
状态 离线
[推荐阅读] 某美资咨询公司急招java高级工程师。火热招聘中,期待你的加入!!
9:56   还没人帮忙~~
2008-7-8 08:18 PM#3
查看资料  Blog  发短消息  顶部
 
diekiss
金牌会员
Rank: 6Rank: 6
高级会员


UID 18243
精华 0
积分 1395
帖子 1371
金钱 1395 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2003-2-3
来自 狮山俊景
状态 离线
[推荐阅读] ◆福建电信100m独享◆100M独享带宽服务器◆QQ445676667
先说说为什么服务器会当掉吧。



 
 无限风光在险峰
 
2008-7-8 08:21 PM#4
查看资料  访问主页  发短消息  QQ  顶部
 
deng0685
高级会员
Rank: 4


UID 84760
精华 0
积分 701
帖子 828
金钱 701 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-12-13
状态 离线
[推荐阅读] 关于流水号,请教下
突然地震了...  停电了......   黑客入侵了.......  病毒发作了.........N....
2008-7-8 09:03 PM#5
查看资料  Blog  发短消息  顶部
 
fjyxian
新手上路
Rank: 1



UID 129771
精华 0
积分 9
帖子 7
金钱 9 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2008-6-24
状态 离线
[推荐阅读] union联合两条查询为一个结果集的问题
那写入一条INSERT需要多久呢?在当掉之前与写入之间又存在的相隔时间是多久呢?
当掉之后造成INSERT损失的机率又是多少呢?

呵呵..算出来就是你要的答案了.
2008-7-9 12:22 AM#6
查看资料  发短消息  顶部
 
deng0685
高级会员
Rank: 4


UID 84760
精华 0
积分 701
帖子 828
金钱 701 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-12-13
状态 离线
[推荐阅读] 奶瓶-妳別一付盛氣凌人的樣子
那打个比方
我要一次性插入 10W条记录
而且必须保证这些数据全部都写入或者全部没有写入

那么在插入的中间突然断电

  那不就是出现了这个问题了

当然 这是我假设~~~
程序就是要保证他的健壮性

你说呢
2008-7-9 07:41 AM#7
查看资料  Blog  发短消息  顶部
 
水清无鱼
注册会员
Rank: 2
初级会员



UID 30292
精华 0
积分 182
帖子 489
金钱 182 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-7-23
来自 北京
状态 离线
[推荐阅读] GET怎么不能传中文啊!!!


QUOTE:
原帖由 deng0685 于 2008-7-9 07:41 AM 发表
那打个比方
我要一次性插入 10W条记录
而且必须保证这些数据全部都写入或者全部没有写入

那么在插入的中间突然断电

  那不就是出现了这个问题了

当然 这是我假设~~~
程序就是要保证他的健壮性

你 ...
突然断电了,那你回滚都来不及。
不管用什么操作方法,最后总是要一条条写入数据库的,这需要时间。
ps:断电了,那你不会用ups啊。有了ups,那就可以有回滚的时间了。全部插入成功再commit就行了。

刚才有个朋友说了:换个好机房才是王道。

[ 本帖最后由 水清无鱼 于 2008-7-9 08:21 AM 编辑 ]




为地震中的遇难者、受伤者、救援者、捐献者祝福……
2008-7-9 08:19 AM#8
查看资料  访问主页  发短消息  QQ  顶部
 
deng0685
高级会员
Rank: 4


UID 84760
精华 0
积分 701
帖子 828
金钱 701 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-12-13
状态 离线
[推荐阅读] 求一个第三方网页获取内容的问题~
恩..........

   是不是我智商太低   
还没有很理解上面这么仁兄的意思..
2008-7-9 11:02 AM#9
查看资料  Blog  发短消息  顶部
 
wwdwwd
注册会员
Rank: 2
初级会员



UID 66770
精华 0
积分 76
帖子 55
金钱 76 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-9-20
状态 离线
[推荐阅读] 一个辣手的问题
大概明白楼主的意思了。有几点:
1:一般情况下可以用事务来解决部分问题。如果其中一条sql更新不正确,则整体回滚,保证数据的完整性;
2:innodb存储引擎里面有一个设置,用来设置跟事务相关的数据完整性问题;
照抄手册中内容如下:

  innodb_flush_log_at_trx_commit

当innodb_flush_log_at_trx_commit被 设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。当这个值为1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。当设置为2之时,在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。尽管如此,在对日志文件的刷新在值为2的情况也每秒发生一次。我们必须注意到,因为进程安排问题,每秒一次的刷新不是100%保证每秒都发生。你可以通过设置这个值不为1来获得较好的性能,但随之你会在一次崩溃中损失二分之一价值的事务。如果你设置这个值为0,那么任何mysqld进程的崩溃会删除崩溃前最后一秒的事务,如果你设置这个值为2,那么只有操作系统崩溃或掉电才会删除最后一秒的事务。尽管如此,InnoDB的崩溃恢复不受影响,而且因为这样崩溃恢复开始作用而不考虑这个值。注意,许多操作系统和一些磁盘硬件会欺骗刷新到磁盘操作。尽管刷新没有进行,你可以告诉mysqld刷新已经进行。即使设置这个值为1,事务的持久程度不被保证,且在最坏情况下掉电甚至会破坏InnoDB数据库。在SCSI磁盘控制器中,或在磁盘自身中,使用有后备电池的磁盘缓存会加速文件刷新并且使得操作更安全。你也可以试着使用Unix命令hdparm来在硬件缓存中禁止磁盘写缓存,或使用其它一些对硬件提供商专用的命令。这个选项的默认值是1。



我的理解如下:
在使用innodb存储引擎更新数据时,不会直接把数据更新到磁盘上,而是把数据更新到日志缓冲和数据缓冲中。按照一定的规则会把日志缓冲和数据缓冲中的信息更新到磁盘上,上面的参数正式说明这个规则。据我猜测,当日志缓冲被更新到磁盘上时,对应的数据缓冲也会被更新到磁盘上,以保证统一。

innodb_flush_log_at_trx_commit=0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新

innodb_flush_log_at_trx_commit   日志缓冲到日志文件                                日志文件到磁盘刷新
0                                                                                                1次/s,0次/事务                                        1次/s,,0次/事务
1                                                                                                0次/s,1次/事务                                        0次/s,1次/事务
2                                                                                                0次/s,1次/事务                                        1次/s,0次/事务



按照如上的理解:楼主是不用担心的,mysql崩溃或操作系统崩溃,会丢失一些事务,但数据的完整性可以得到保证,故而可以重新来一次就行。当然有ups之类的更好。

[ 本帖最后由 wwdwwd 于 2008-7-9 11:37 AM 编辑 ]
2008-7-9 11:36 AM#10
查看资料  发短消息  QQ  顶部
 14  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.039679 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP