这个例子很简单,我们学过一遍后也知道怎么把这个事情做对。但是同样的问题如果
换个面目出现,我们就很难做对了。
这个问题如下:
Web 服务器在一系列日志文件 ip-<index>.txt 中记录了访问的 IP 地址。
其中 <index> 是序列号,每个小时递增。数据库中有一个表记录每个 IP 的
访问总次数。比如
192.168.1.1 123
127.0.0.3 111
那么程序 A 怎么正确的把日志文件的数据归总到数据库中? 数据库可能某段
时间连不上。 程序 A 可能突然被关了。
一种最简单但是错误的实现方法是
while(true) {
1. 打开下一个文件
2. 每次读文件一行,插入或更新数据库相应的表项
3. 删除文件
}
假设在步骤 2 程序被关掉了,那么它重启之后,那个归总到一半的文件会从头归总
一次。这是个错误。
第二种使用了事务,貌似正确但是错误的实现方法:
while(true) {
1. 打开下一个文件
开始事务
2. 每次读文件一行,插入或更新数据库相应的表项
提交事务
--------------------- 2-3
3. 删除文件
}
假设程序在步骤 2-3 的位置死掉了,那么还是会重复归总。
下面再给出第三种更加貌似正确但是错误的方法:
while(true) {
开始事务
1. 打开下一个文件
2. 每次读文件一行,插入或更新数据库相应的表项
提交事务
3. 删除文件
提交事务
}
究竟怎么才能对呢?这实际上是个比较难的问题。看看你能否解决这个问题。
这周的讲座将详细的讲解事务的概念,事务的实现,以及事务的正确使用。
plt
--
您收到此邮件是因为您订阅了 Google 网上论坛的“THOSSCLUB”论坛。
要向此网上论坛发帖,请发送电子邮件至 thos...@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 thossclub+...@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/thossclub?hl=zh-CN 访问此网上论坛。