分布式计数器

想象一下,许多用户都在运行一个试图增加数据库中计数器的 Web 应用程序。每个用户必须读取当前计数,添加一个并写出更新后的值。为了确保没有人在其他人正在添加计数器时读取计数器,我们使用交易:

ref.transaction(function(value){
  if (value === null) {
    // the counter doesn't exist yet, start at one
    return 1;
  } else if (typeof value === 'number') {
    // increment - the normal case
    return value + 1;
  } else {
    // we can't increment non-numeric values
    console.log('The counter has a non-numeric value: ' + value)
    // letting the callback return undefined cancels the transaction
  }
});