使用Oracle数据库实现Python数据持久
2010-09-22 11:08:54 来源:WEB开发网事务考虑事项
在上面清单中所示的 count_clicks 存储过程中,注意 COMMIT 的使用要紧跟在 INSERT 语句之后。最重要的是,之后要调用 add_article_details,其执行时间可能较长。通过在这个阶段提交,新插入的文章记录立即用于其他可能的更新,否则要等待 add_article_details 完成。
考虑以下示例。假设 RSS 页面刚刚更新并且一个全新的文章链接变为可用。接下来,两个不同的用户加载您的页面并几乎同时单击这个新链接。因此,将进行两个对 count_clicks 的同时调用。在本例中,首先发生的调用将一条新记录插入到 otn_articles_rss 表中,然后它将调用 add_article_details。虽然正在执行 add_article_details,但对 count_clicks 的另一个调用可以成功执行更新操作,增加总单击次数。但是,如果此处忽略了 COMMIT,那么第二个调用将找不到用于更新的行,因此尝试执行另一个插入。事实上,这将导致不可预测的结果。它将导致独特的违反约束的错误,并且会丢失将第二次 count_clicks 调用进行的更新。
此处最令人感兴趣的部分是在 count_clicks 过程主体结尾处执行另一个 COMMIT 操作。正如您所猜测的,需要在这个阶段提交以便从更新的记录中去除锁定,从而使该记录立即可用于其他会话执行的更新。有些人可能会说这个方法降低了灵活性,使客户端无法根据自己的判断提交或回滚事务。但是,在这种特殊的情况下,这并不是一个大问题,因为无论如何从调用 count_clicks 开始的事务都应该立即提交。这是因为当用户单击某个文章链接以离开您的页面时,始终会调用 count_clicks。
构建前端层
既然已经创建了存储过程并且准备好在应用程序中使用,那么您必须弄清如何从前端层编排在数据库中实现的所有这些应用程序逻辑片段所执行的整个操作流。这就是 Python 派上用场的地方了。
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››数据库大型应用解决方案总结
- ››Oracle 数据库导入导出 dmp文件
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››Oracle Application Server 的安装
- ››使用纯文本文件打造WCF服务
更多精彩
赞助商链接