原文:PostgreSQL防止更新丢失(覆盖) 作者:openwares.net 转自:https://blog.csdn.net/Starrain00/article/details/7333926 PostgreSQL防止更新丢失(覆盖) 所有的数据库都会遇到更新丢失(覆盖)的问题。 更新丢失(覆盖)的详细描述见数据库事务隔离级别。 发生更新丢失(覆盖)问题的关键在于”读取,计算,写回”这个过程中,当前事务使用了过期的(stale)数据,没有将其他并发事务对数据的修改纳入到计算结果中,从而在写回时将其他事务的更新覆盖了。 防止更新丢失(覆盖)的方法 悲观锁 事务中对需要修改的结果集加行锁,常用的就是select for update,或者lock table对整个表加锁。加锁之后,当前事务未处理完成之前,其他所有需要访问锁定行的事务都必须等待。这虽然能解决更新丢失(覆盖)的问题,但很明显会影响数据库的并发性能。 如果并发事务冲突的几率很高,则采用悲观锁可以减少事务回滚并重试的开销。 乐观锁 乐观锁不锁定任何行,当更新数据时再做检查数据是否已经发生了变化。多版本并发控制MVCC(Multiversion concurrency control)可以实现乐观锁。PostgreSQL使用MVCC实现并发控制。PostgreSQL的默认事务隔离级别为读已提交(Read Commited),在这个级别上会发生不可重复读现象,这个隔离级别是无法防止更新丢失(覆盖)的。 但是在可重复读(Repeatable Read)事务隔离级别,可以完全防止更新丢失(覆盖)的问题,如果当前事务读取了某行,这期间其他并发事务修改了这一行并提交了,然后当前事务试图更新该行时,PostgreSQL会提示:ERROR: could not serialize access due to concurrent update事务会被回滚,只能重新开始。 由于使用的是MVCC机制的乐观锁,内部有版本号(这个字段名字叫xmin)来控制并发,所以不会对数据集上锁,对性能的影响是很小的。但如果并发事务冲突的几率比较大,那么事务回滚的开销就比较大了。 总的来说,如果并发事务冲突的几率很低那么应该选择乐观锁,对于PostgreSQL来说,将事务隔离级别提高到Repeatable Read即可。如果事务并发冲突的几率很高,那么可以谨慎的使用悲观锁。 还有一种防止更新丢失(覆盖)的方法叫条件更新,也就是在更新时指定where子句,检测指定的条件是否已经变化来决定是否进行更新。这不是一种通用的解决方案,只能根据业务逻辑来选择特定的检测条件,并不能防止这些检测条件之外的可能存在的更新丢失问题。而且有些情况下可能很难选择合适的更新检测条件,比如一个银行账户,关键的字段有账户号和余额,很难通过WHERE条件来检测当前事务执行期间是否有其他并发事务已经修改了余额并做了提交。所以这种方法只在特定的逻辑环境下有一定的用途。 PostgreSQL可重复读隔离级小实验 先建一张表,并插入一条记录: 下面演示两个事务并发的几种情况,左边为事务A,右边为事务B。 第一种情况: begin transaction isolation level repeatable read ;        | select whatever from sometable where… Continue Reading 【转载】PostgreSQL防止更新丢失(覆盖)

原文:PostgreSQL错误解决:ERROR: current transaction is aborted, commands ignored until end of transaction blockp 作者:Starrain00 转自:https://blog.csdn.net/Starrain00/article/details/7333926 postgresql错误解决 ERROR:current transaction is aborted 2012年03月08日 18:29:31 阅读数:16401 postgresql错误解决 ERROR:current transaction is aborted, commands ignored until end of transaction bl 简单的说,出现该错误是在事务中某个sql执行错误后没有rollback,然后继续执行sql时会报改错。 以下为摘抄的一篇文章,说的比较详细 文件来源:http://blog.csdn.net/hantiannan/archive/2009/09/24/4590259.aspx 在平时的数据库操作编程中我们会时不时会遇到ERROR: current transaction is aborted, commands ignored until end of transaction blockp这样的错误。该怎么解决呢?一般我们都是直接上网查找。如果英文好一点的人的话的从错误信息就能知道大概是那个地方出错了。不过如果经验不是 很丰富的话,还是上网查找比较方便。最基本错误信息可以从官方文档中查看(http://www.postgresql.org/docs/8.4/interactive/errcodes-appendix.html )。… Continue Reading 【转载】PostgreSQL错误解决:ERROR: current transaction is aborted, commands ignored until end of transaction blockp

原文:Rails transactions: The Complete Guide 作者:Mark Daggett 转自:http://markdaggett.com/blog/2011/12/01/transactions-in-rails/ Transactions in Rails DEC 1ST, 2011 Recently I was tasked to write tests for the transactions of an existing application. This gave me the opportunity to learn more about the codebase, while also improving the test coverage. Generally, most of the transaction… Continue Reading [Reproduce]Transactions in Rails

原文:Rails transactions: The Complete Guide 作者:Victor A.M. 转自:http://codeatmorning.com/rails-transactions-complete-guide/   Rails transactions: The Complete Guide Rails transactions are a way to ensure that a set of database operations will only occur if all of them succeed. Otherwise, they will rollback to the previous state of data. Our examples will demonstrate it… Continue Reading [Reproduce]Rails transactions: The Complete Guide

原文:ActiveRecord 事务的一些试验和验证 作者:baya 转自:https://baya.github.io/2015/06/13/activerecord-%E4%BA%8B%E5%8A%A1.html ActiveRecord 事务的一些试验和验证 Jun 13, 2015 Transactions are protective blocks where SQL statements are only permanent if they can all succeed as one atomic action 我们平时说的 一手交钱,一手交货 就是一种事务。 ActiveRecord 中的事务是通过 transaction 方法实现的。 我们首先试验一个基础的例子: ActiveRecord::Base.transaction ActiveRecord::Base.transaction do david.withdrawal(100) mary.deposit(100) end 在试验之前,我们先用 Rails 创建一个 demo, 并创建好相关的 model。 $ rails new ar-transaction-demo… Continue Reading 【转载】ActiveRecord 事务的一些试验和验证

原文:Sentry 自动化异常提醒 作者:Destiny 转自:https://laravel-china.org/articles/4235/sentry-automation-exception-alert Sentry 自动化异常提醒  1年前 ⋅  6023 ⋅  45 ⋅  29 简介 Sentry 是什么?中文翻译过来是 哨兵 的意思,从字面中可以知道 『站岗、放哨、巡逻、稽查的士兵』,不错,Sentry 是程序的 哨兵 ,它可以监控我们在生产环境中项目的运行状态,一旦某段代码运行报错,或者异常,会第一时间把报错的 路由,异常文件,请求方式 等一些非常详细的信息以消息或者邮件给我们,让我们第一时间知道:程序出错了,然后我们可以从 Sentry 给我们的详细的错误信息中瞬间找到我们需要处理的代码,在老板不知情的情况下悄悄把 Bug 修复调,你肯定不想等着老板来找你吧。 开始 你如果试用 Sentry 官方提供给你的服务是需要收费的,不过可以免费试用,当然你也可以自己搭建 Sentry :文档 自行搭建当然就不收费啦。文档最下方有两种安装方式一个是 docker 一个是 python,Docker 安装 Here,Python 安装 Here 这是 Sentry 的官网,我们先不管来体验一把,注册一个账号 准备完毕之后先看文档,其实官方给出的文档非常详细 选择我们大爱的 PHP Laravel 框架, 拉取 $ composer require sentry/sentry-laravel 添加进服务提供者和门面 ‘providers’ => array( // … Sentry\SentryLaravel\SentryLaravelServiceProvider::class, ) ‘aliases’ => array( // … ‘Sentry’ => Sentry\SentryLaravel\SentryFacade::class, ) 然后在 App/Exceptions/Handler.php report 修改如下方法… Continue Reading 【转载】Sentry 自动化异常提醒

原文:A collection of JavaScript error logging services, resources and shiny things. 作者:cheeaun 转自:https://github.com/cheeaun/javascript-error-logging JavaScript error logging A collection of JavaScript error logging services, and comparisons among them. Previously, on https://gist.github.com/cheeaun/5835757. Hosted services CatchJS – Screenshots, click trails, email notifications, remote object logging, intelligent error grouping. Extremely lightweight, only 1.78KB. http://errorception.com/ – translate error… Continue Reading [Reproduce]A collection of JavaScript error logging services, resources and shiny things.

原文:phantomJs之殇,chrome-headless之生 作者:齐磊 转自:https://insights.thoughtworks.cn/phantomjs-and-chrome-headless/   phantomJs之殇,chrome-headless之生  2018年1月16日  齐磊  技术雷达, 新兴技术, 软件测试 技术雷达快讯:自2017年中以来,Chrome用户可以选择以headless模式运行浏览器。此功能非常适合运行前端浏览器测试,而无需在屏幕上显示操作过程。在此之前,这主要是PhantomJS的领地,但Headless Chrome正在迅速取代这个由JavaScript驱动的WebKit方法。Headless Chrome浏览器的测试运行速度要快得多,而且行为上更像一个真正的浏览器,虽然我们的团队发现它比PhantomJS使用更多的内存。有了这些优势,用于前端测试的Headless Chrome很可能成为事实上的标准。 随着Google在Chrome 59版本放出了headless模式,Ariya Hidayat决定放弃对Phantom.js的维护,这也标示着Phantom.js 统治fully functional headless browser的时代将被chrome-headless代替。 Headless Browser 也许很多人对无头浏览器还是很陌生,我们先来看看维基百科的解释: A headless browser is a web browser without a graphical user interface. Headless browsers provide automated control of a web page in an environment similar to popular web browsers, but are executed via… Continue Reading 【转载】phantomJs之殇,chrome-headless之生

原文:Async/Await替代Promise的6个理由 作者:KiwenLau 转自:https://kiwenlau.com/2017/04/01/nodejs-async-await/ Async/Await替代Promise的6个理由 译者按: Node.js的异步编程方式有效提高了应用性能;然而回调地狱却让人望而生畏,Promise让我们告别回调函数,写出更优雅的异步代码;在实践过程中,却发现Promise并不完美;技术进步是无止境的,这时,我们有了Async/Await。 原文: 6 Reasons Why JavaScript’s Async/Await Blows Promises Away 译者: Fundebug 为了保证可读性,本文采用意译而非直译。 Node.js 7.6已经支持async/await了,如果你还没有试过,这篇博客将告诉你为什么要用它。 Async/Await简介 对于从未听说过async/await的朋友,下面是简介: async/await是写异步代码的新方式,以前的方法有回调函数和Promise。 async/await是基于Promise实现的,它不能用于普通的回调函数。 async/await与Promise一样,是非阻塞的。 async/await使得异步代码看起来像同步代码,这正是它的魔力所在。 Async/Await语法 示例中,getJSON函数返回一个promise,这个promise成功resolve时会返回一个json对象。我们只是调用这个函数,打印返回的JSON对象,然后返回”done”。 使用Promise是这样的: const makeRequest = () => getJSON() .then(data => { console.log(data) return “done” }) makeRequest() 使用Async/Await是这样的: const makeRequest = async () => { console.log(await getJSON())… Continue Reading 【转载】Async/Await替代Promise的6个理由

原文:GitHub – ScienJus/qqbot: 基于SmartQQ(WebQQ)的QQ机器人 / a qq robot based on smartqq(webqq) api 作者:ScienJus 转自:https://github.com/ScienJus/qqbot QQBot 基于 Smart QQ(Web QQ)的 QQ 机器人 Java 版本:ScienJus/smartqq Api分析: Web QQ协议分析(一):前言 Web QQ协议分析(二):登录 Web QQ协议分析(三):收发消息 Web QQ协议分析(四):好友相关 Web QQ协议分析(五):群和讨论组相关 Web QQ协议分析(六):其他 使用方法 安装这个 Gem : gem install qqbot require ‘qqbot’并编写自己的业务逻辑,例如: require ‘qqbot’ qqbot = QQBot.new… Continue Reading 【转载】QQBot – 基于 Smart QQ(Web QQ)的 QQ 机器人