首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学习进度为什么老不同步?多端进度同步的排查实战

    查日志发现根因:进度上报接口没有幂等保护,学员的 APP 和网页端同时上报进度,旧的上报(第 3 节)晚到,把新的(第 12 节)覆盖了。进度被"回退",比"没记录"更伤体验。...查接口与存储——上报失败了?还是多端读的不是同一个存储?二类:同步了但被覆盖(回退)。两条进度都入库了,但旧值覆盖了新值。查写入逻辑——有没有幂等、有没有版本判断?...第二步:进度上报要"幂等 + 版本号"进度同步的核心是只让新的进度生效。...:旧的覆盖不了新的——这是进度不回退的关键;版本号可以直接用"学习进度百分比"或"章节序号"充当,不一定要单独字段。...前端把断网期间的进度暂存,恢复网络后带上最新版本号补报一次。Q5:版本号和时间戳都要吗?答:版本号是主判据(谁新听谁),时间戳做兜底参考(同时上报时谁后到听谁)。

    11410

    MVCC 多版本并发控制实现的事务

    .没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行 2.通过保存数据在某个时间点的快照实现的 3.典型的有乐观并发控制和悲观并发控制 4.innodb的mvcc是每次事务都有递增的版本号...,通过在每行记录的后面添加两列隐藏字段,两列分别是是创建版本号和删除版本号,存储操作它事务的版本号 5.在事务中增删改查就是对两列版本号字段进行操作 insert 为新插入的每一行保存当前事务版本号到...行创建版本号字段 update 插入一行新的保存当前事务创建版本号,修改原行数据的删除版本号为本次事务的版本号 delete 修改行的删除版本号字段为本次事务的版本号 select 查询 创建版本号字段...小于等于当前事务版本的数据 确保该记录是本次之前就存在的或本次事务新插的 查询 删除版本号字段 不存在或者大于当前版本的数据 确保该记录在本次事务之前没删除 6.这样的设计就不需要加锁了

    60710

    【高性能MySQL】多版本并发控制MVCC

    一个保存了行的创建时的系统版本号,另一个保存行的过期时(删除时)的系统版本号。每开始一个新的事务,系统版本号都会自动递增。...事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。...下面看一下REPEATABLE READ隔离级别下的MVCC具体如何操作的:SELECT InnoDB会根据以下两个条件检查每行记录:InnoDB 只查版本号小于或者等于当前事务版本的数据行,保证事务读取的行...INSERT InnoDB 会为新插入的行保存当前系统版本号作为行版本。DELETE InnoDB 会为删除的行保存当前系统版本号作为行删除标志。...UPDATE InnoDB会新增一行,为新插入的行保存当前系统版本号作为行版本。并且保存当前系统版本号作为删除标志到原来的行。保存这两个系统版本号,使大多数读操作都可以不用加锁。

    57600

    MySQL事务隔离级别的实现原理

    增删查改 在InnoDB中,给每行增加两个隐藏字段来实现MVCC,一个用来记录数据行的创建时间,另一个用来记录行的过期时间(删除时间)。...在实际操作中,存储的并不是时间,而是事务的版本号,每开启一个新事务,事务的版本号就会递增。...于是乎,默认的隔离级别(REPEATABLE READ)下,增删查改变成了这样: SELECT 读取创建版本小于或等于当前事务版本号,并且删除版本为空或大于当前事务版本号的记录。...INSERT 将当前事务的版本号保存至行的创建版本号 UPDATE 新插入一行,并以当前事务的版本号作为新行的创建版本号,同时将原记录行的删除版本号设置为当前事务版本号 DELETE...作者曾经有一个误区,认为按照前面说MVCC下的增删查改的行为就不会出现任何问题,也不会出现不可重复读和幻读。但其实是大错特错。

    1K10

    MySQL 事务隔离级别的实现原理

    增删查改 在InnoDB中,给每行增加两个隐藏字段来实现MVCC,一个用来记录数据行的创建时间,另一个用来记录行的过期时间(删除时间)。...在实际操作中,存储的并不是时间,而是事务的版本号,每开启一个新事务,事务的版本号就会递增。...于是乎,默认的隔离级别(REPEATABLE READ)下,增删查改变成了这样: SELECT 读取创建版本小于或等于当前事务版本号,并且删除版本为空或大于当前事务版本号的记录。...INSERT 将当前事务的版本号保存至行的创建版本号 UPDATE 新插入一行,并以当前事务的版本号作为新行的创建版本号,同时将原记录行的删除版本号设置为当前事务版本号 DELETE 将当前事务的版本号保存至行的删除版本号...作者曾经有一个误区,认为按照前面说MVCC下的增删查改的行为就不会出现任何问题,也不会出现不可重复读和幻读。但其实是大错特错。

    91310

    APP版本更新中比较APP的版本号高低并返回最高版本

    背景 App检查更新功能,每次进行功能迭代准备上线时,在后台配置一个新的版本号并上传最新的apk,然后在App点击检查更新时返回最新的版本号。 版本号是非空字符串并且只包含数字和 . 字符。...方案一 对版本号进行两两比较,判断其大小,得出最高版本。 版本号的特点,假设版本号段数不固定,可能是三段,也可能是四段。每一段的数字位数也不固定,总之从高位往低位判断,数字大的版本号大。...,还有一个版本编码(数字类型)随着版本号的增加此数字也是递增的。...我们可以在后台维护的时候把版本号和版本编码都维护进去。...我们在选取最高版本的时候,直接查数据库select max(version_numer)  from app_version;就可以直接得到最大的版本了。

    1.3K20

    华为EMUI 9对应的是安卓几?完整EMUI版本对照表来了!

    **这一查,才发现很多人也有这个疑问,网上各种说法五花八门,要么只讲了一半,要么表格缺失。...这是华为在 2018 年 10 月发布的主要系统版本,也是最后几代还严格依赖 Android 大版本号的 EMUI。...这个很多人也问,其实是因为和安卓版本号的对应关系: EMUI 5.x → Android 7 EMUI 8.x → Android 8 EMUI 6 和 7 被跳过,直接对齐 Android 版本号,这种...和 iOS 一样,为了品牌连贯性,有些版本号是跳跃的。 总结:EMUI 9 是安卓几? 如果你还在用老华为手机,系统是 EMUI 9.x,那么你实际上就是运行在 Android 9 Pie 上。...小贴士:想查某个华为/荣耀手机系统版本对应安卓几,可以对照上面的表格,也可以在「设置 → 关于手机」里查看 Android 版本号。

    65200

    【转】VS2015工程转换为VS2013、VS2012、VS2010工程方法汇总

    vs2015 enterprise版,用着还行,但用其进行开发时,会遇到很多平台配置的问题,于是狠下心又安装了vs2013,在安装vs2013时查阅了很多资料,前期都是关于两个平台能不能兼容的问题,但查了很久也没有所以然...File , Format Version12.00 ·····# Visual Studio 14 ·····VisualStudioVersion=14.0.23107.0 关键:修改上述红色标记的版本号...2013 - VisualStudioVersion=12 -Visual Studio 2015 - VisualStudioVersion=14 上述VisualStudioVersion最好可以自行查的具体一点...,如下是我亲测修改的(这里版本号之所以这么具体,实际是因为我安装了vs2013,可以参考vs2013项目修改) Microsoft Visual Studio Solution File, Format..."14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 关键:1、将ToolsVersion="14.0"改成你所需要的版本号

    3.5K10

    使用nvm在一台电脑上便捷管理多个不同版本的nodejs

    下载NVM 下载地址:Releases · coreybutler/nvm-windows · GitHub 安装NVM (1)查了一下说最好不要装C盘,主打一个听劝,在D盘新建文件夹。...四、node 的不同版本安装及切换 使用 nvm install 版本号> 命令安装指定版本的NodeJS 先别装!都先给我去配淘宝镜像!看问题部分! 问题:下载界面不动了?...出现了一个问题,这个界面就卡在这里不动了,查了一下说是NVM可能没安装成功,配置一下淘宝镜像试试。 先找到nvm文件夹下的settings文件。 添加镜像配置。...安装其他版本的node (1)可以使用 nvm list available 查询可插入版本号,LTS表示可插入稳定版本。(如未指定版本,建议安装LTS下的版本) (2)安装另一个版本的node。...(这里直接安装成功了没有卡住,推断应该是前面配置了淘宝镜像的成果) 切换node版本 (1)使用 nvm use 版本号> 切换需要使用的 NodeJS 版本。

    4.4K10

    MySQL中的InnoDB是怎么解决幻读的?

    普通读 因为普通读是不会加锁的读,故不会有next-key locks的使用,解决幻读的手段是MVCC MVCC会给每行元组加一些辅助字段,记录创建版本号和删除版本号。...而每一个事务在启动的时候,都有一个唯一的递增的版本号。每开启一个新事务,事务的版本号就会递增。...默认的隔离级别(REPEATABLE READ)下,增删查改变成了这样: SELECT 读取创建版本小于或等于当前事务版本号,并且删除版本为空或大于当前事务版本号的记录。...这样可以保证在读取之前记录是存在的 INSERT 将当前事务的版本号保存至行的创建版本号 UPDATE 新插入一行,并以当前事务的版本号作为新行的创建版本号,同时将原记录行的删除版本号设置为当前事务版本号...DELETE 将当前事务的版本号保存至行的删除版本号 比如我插入一条记录, 事务id 假设是1 ,那么记录如下:也就是说,创建版本号就是事务版本号。

    2.5K21

    门店经营看板为什么越查越慢:预聚合、增量统计与缓存设计

    看板只查汇总表,几行数据秒回。...store_id, COUNT(*), SUM(amount)FROM trade_flowWHERE stat_date = CURRENT_DATEGROUP BY store_id;-- 历史部分:查预聚合表...再加一层缓存:// 以 维度+时间窗+版本号 为 key 缓存 30~60 秒const key = `dash:${storeId}:${range}:${dataVersion}`;const hit...只有"老板自定义任意时间窗 + 任意门店组合"这种自由报表才可能全表扫,这种场景要么限制窗口上限(如最多 180 天),要么进数仓用列存/OLAP 引擎,不适合在线看板直查。...八、复盘清单历史查询是否走了预聚合表,不再扫流水明细当日数据是否单独增量计算并与历史合并是否按门店本地时区分天缓存是否带版本号、能感知数据更新是否有兜底限制,防止任意大窗口查询结语看板变慢不是数据库不行

    16010

    技术实践:保险健康APP引入第三方小程序实战,如何构建一个安全可控的沙箱环境~

    每个第三方小程序有独立版本号、发布历史、回滚入口。线上版本出现异常,运营在平台一键回滚到上一版本,10秒内生效。灰度策略按比例、按客群、按地域、按产品类型配置,不用改代码,全部在后台完成。...监管检查时,审计日志+平台工单记录+版本号追溯三件套能直接应对。双录合规支撑。...代理人展业小程序的版本号、操作日志、发布记录本身就是"销售可回溯"的事实底座——监管检查时把版本号+同一时间窗的双录记录拉出来比对,能直接证明"哪个版本、什么时间上线、销售了哪些产品"。...常见查询维度:按小程序查:某个第三方小程序过去24小时的所有API调用按API查:某个宿主API过去24小时被哪些小程序调用过按用户查:某个用户过去24小时被哪些小程序访问过(脱敏后)按异常查:调用失败的...、被拦截的、参数异常的记录查询接口的工程实现是把审计日志接入可视化平台(Grafana/Kibana),让reviewer不用写SQL就能查。

    43220
    领券