美文网首页
TB数据库

TB数据库

作者: RadishHuang | 来源:发表于2021-04-26 14:31 被阅读0次

数据库选型

淘宝分了两种数据库,一种是MongoDB,一种是MySQL。如果没有比较复杂的数据,并发等处理,可以考虑使用MongoDB。如这次项目需要涉及到抽奖,需要使用到事务逻辑,因此选型就选择了MySQL。在文档中,这类型的叫做RDS数据库。

RDS数据库文档

MySQL

值得注意的一点是,在MySQL中,可以使用无符号,这个意思就是该字段不允许负数的存在。如图在创建奖池剩余值的时候,会设置成无符号。保证这个字段的量不会超出。

无符号

事务处理

做抽奖,要考虑的并发的问题。通常有两种处理方式,一种是队列,一种是事务。这边侧重点讲事务的处理。在更新数据库的时候,只要有一步出错,会回滚事务里的所有操作。这边做的比较简单,主要是控制剩余量的非负数。如果剩余量出现了负数,回滚更新的操作,并把该次的中奖视为是无奖品,谢谢参与。


// 扣除奖池剩余量
const reduceLotteryRemainde = async (ctx, id) => {
  const conn = await ctx.cloud.dataspace.beginTransaction();
  try {
    // 扣除该奖品的剩余量
    const remaindeText = `update ${lotteryList} set remainderNum = remainderNum - 1 where productId = ?`;
    const remaindeResult = await conn.executeSql(remaindeText, [id]);
    if (!remaindeResult || !remaindeResult.affectedRows) {
      throw new Error('更新奖品剩余量失败');
    }
    //事务提交  
    await conn.commit();
    return true;
  } catch (error) {
    await conn.rollback();
    return false;
  }
}

RDS数据库的执行语句

通过sql语句来做业务逻辑就会方便很多,比如查找总数。

// 查找用户中某个奖品数量
const lotteryCount = async (ctx, id) => {
  const { dataspace } = ctx.cloud;
  const { openId } = ctx;
  const sqltext = `select count(*) from ${userLottery} as count where productId = ? and openId = ?`;
  const result = await dataspace.executeSql(sqltext, [id, openId]);
  return (result && result.length && result[0].count) ? result[0].count : 0;
}

比如计算某一列的总和

 const { dataspace } = ctx.cloud;
  const { openId } = ctx;
  // sum用户的countNum
  const sqlText = `select sum(countNum) as countNum from ${numList} where openId = ?`;
  const result = await dataspace.executeSql(sqlText, [openId]);
  const count = (result && result.length) ? parseInt(result[0].countNum) : 0,

当插入或者更新的时候,返回类型

{
  affectedRows: 2
  fieldCount: 0
  info: ""
  insertId: 0
  serverStatus: 2
  warningStatus: 0
}

系统时间需要注意,默认都是UAT时间。服务器的时间按照UAT的来算。对比了下服务器输出的时间和当前的北京时间。

时间

相关文章

  • TB数据库

    数据库选型 淘宝分了两种数据库,一种是MongoDB,一种是MySQL。如果没有比较复杂的数据,并发等处理,可以考...

  • 个人项目

    数据库设计 分为如下几个模块: tb_area:存储地址,主键为area_id tb_head_line:存储首页...

  • 数据库的删除方法

    数据库的删除方式分为三种 一、drop 命令格式:drop table tb ---tb表示数据表的名字,下同。 ...

  • taotao-商品添加的实现

    1. 分析 1.1 数据库 相关的表:tb_item、tb_item_desc商品id应该是一串数字。可以使用毫秒...

  • mysql存储过程批量删除数据库

    测试用的数据库都是以“tb_”开头的,可以先筛选查询出要删除的数据库,再遍历游标删除数据库。

  • (mysql、oracle)数据库面试题合集

    1:如何优化你的数据库查询? 1.数据库的查询方式?-- 全表扫描:最慢 select * from tb_em...

  • Android SQLite多线程操作

    SQLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如...

  • MySQL数据库里常用的SQL语句(持续更新)

    登录数据库 查看共有多少数据库 创建数据库db1 选择数据库db1 查看当前数据库中的表 创建表tb1 查看某一个...

  • 建立rails项目

    1,rails new XXX -d mysql -TB 创建项目 mysql是指关联的数据库 2,cd 进入项目...

  • 增加、修改、删除数据库表字段

    增加数据库表字段向tb_out_people表中新增新的字段out_peo_grade及level 修改数据库表字...

网友评论

      本文标题:TB数据库

      本文链接:https://www.haomeiwen.com/subject/alhjrltx.html