## 临时笔记
人无法同时把精力集中在多个地方,所以我现在应该集中精力放在后端,然后再来前端,各个击破才是王道,不然徘徊不前,左右不是,这种处境很糟糕。
* * * * *
第一步实现系统,第二部就要开始做性能优化了,比如加索引
* * * * *
方案报价 价格
方案执行 价格(白总可以修改的价格)
新客户:没有做过广告 || 没拜访记录
“新/老”不是针对于个人,而是客户属性
白总分配行业给副总,副总就得到行业下的客户,副总一下,包括副总都可以看到这些客户。
* * * * *
// 定时任务一分钟执行一次。
// 执行时打一个点,上次的点如果不存在,则以90天前为点
// 再次执行时,获取当前时间,到上一个点内的更新订单,并再次打点
// 在分页过程取的过程中,要发出多次请求,多次请求的参数时间区间是一样的,也就是区间固定了,只是每次页码不同,首先明确这点很重要
// 此接口返回订单列表的排序时按照最后更新时间倒序排序的
// 上面说过,订单散落在时间线上,是有排序规则,并且更新时会向前移动的
// 这个很重要,这里面的细节是关键,包含了依据此接口同步订单的基本原理
// 先来想一个问题,可能容易忽略的问题,订单为什么会发生更新呢?它自己更新吗?什么时候更新呢?
// 这是这个问题的关键,理解这个问题了,你就彻底理解这种根据最后时间(区间)增量查询订单的精髓了。
// 订单之所以会更新是因为状态发生变化了,它自己肯定不能自动更新,肯定是操作使它状态发生改变,比如用户支付,系统自动关闭等等,是这些操作改变了订单状态。
// 那这些操作在什么时候发生呢?这个操作时间也可以理解为订单的最后更新时间,一般操作成功了就变更最后更新时间为当前操作时间。
// 事实是没人知道这个操作在什么时候发生,你无法预测用户什么时候取消订单,什么时候支付。
// 毫无疑问,这个问题无解。
// 但我们换一个思路想一下,我们是不是可以确定这个操作只会发生在:{过去某一时刻的时间点,当前时间点},这是毋庸置疑的吧,没有会穿越未来做操作吧。
// 这有回到了区间问题。
// 还记得上面说到的 [向前推移的当前时间点]吗,这个点划过的足迹,都有可能是操作出现的位置,而宏观傻上任何操作都不可能发生在过去或是未来,只在当前此时发生,这看似哲学的问题,揭示的是事物的基本原理。所以可以这样理解,这个移动的时间点就是一只手,在向前移动的时候可能会把需要更新的订单拉到当前位置,所有的操作都是这么发生的,订单就是这样被更新的。反复理解这句话,你就能明白这个理论的重要性。
// 当我们固定区间后,但是时间点还是在继续向前移动,此时我们区间的订单有可能被拉过去,也就是说,现在我们面临的分页问题不是传统的total增多,而是减少,并且排序是不变的。
// 此时再去理解 “使用最后更新时间范围增量同步时,必须采用倒序的分页方式(从最后一页往回取)才能避免漏单问题。” 这句话的含义就能理解了
// 如果我们服务器时间比拼多多慢的话,会导致区间落后,造成获取订单永远延时,如果比拼多多快的话可能造成区间总是过前,导致总是取不到订单,所以服务器时间只能慢不能快
// 我们不漏单核心原因:
// 1. 接口返回数据是按照 最后更新时间倒序的,即: order_modify_at desc
// 2. 从最后一页往回取即表示是这样处理数据的:order_modify_at asc ,即 早先变化的,先处理,比较符合逻辑
// 3. 区间为 过去时间 ~ 当前时间 之间,如果分页过程中有订单发生了变化,变化订单就会向右脱离这个区间(注意不会在区间内移动,而是直接脱离),此时 total 减小
// 4. 分页过程中 total 不可能增多的原因是,因为要增多,只能从左边进入(新增订单/订单变化),但这是不可能的,因为没有人能回到过去去下单和更新订单
// 其实这样来看的话,从第一页和最后一页开始取,对于漏单是没有影响的,都可以。因为我们区间规则的原因决定了。
// 官方:“从最后一页往回取才能不漏单”核心原因:
// 务必尽早的处理久远的订单,因为它们更可能发生更新(会脱离区间)。
// !!!!!!!为了防止时间快了,这里左区间每次都向后扩展慢1分钟,模拟服务器时间比拼多多慢(暂不需要这样)
----
last update:2017-6-30 23:53:06
- 开始
- 公益
- 更好的使用看云
- 推荐书单
- 优秀资源整理
- 技术文章写作规范
- SublimeText - 编码利器
- PSR-0/PSR-4命名标准
- php的多进程实验分析
- 高级PHP
- 进程
- 信号
- 事件
- IO模型
- 同步、异步
- socket
- Swoole
- PHP扩展
- Composer
- easyswoole
- php多线程
- 守护程序
- 文件锁
- s-socket
- aphp
- 队列&并发
- 队列
- 讲个故事
- 如何最大效率的问题
- 访问式的web服务(一)
- 访问式的web服务(二)
- 请求
- 浏览器访问阻塞问题
- Swoole
- 你必须理解的计算机核心概念 - 码农翻身
- CPU阿甘 - 码农翻身
- 异步通知,那我要怎么通知你啊?
- 实时操作系统
- 深入实时 Linux
- Redis 实现队列
- redis与队列
- 定时-时钟-阻塞
- 计算机的生命
- 多进程/多线程
- 进程通信
- 拜占庭将军问题深入探讨
- JAVA CAS原理深度分析
- 队列的思考
- 走进并发的世界
- 锁
- 事务笔记
- 并发问题带来的后果
- 为什么说乐观锁是安全的
- 内存锁与内存事务 - 刘小兵2014
- 加锁还是不加锁,这是一个问题 - 码农翻身
- 编程世界的那把锁 - 码农翻身
- 如何保证万无一失
- 传统事务与柔性事务
- 大白话搞懂什么是同步/异步/阻塞/非阻塞
- redis实现锁
- 浅谈mysql事务
- PHP异常
- php错误
- 文件加载
- 路由与伪静态
- URL模式之分析
- 字符串处理
- 正则表达式
- 数组合并与+
- 文件上传
- 常用验证与过滤
- 记录
- 趣图
- foreach需要注意的问题
- Discuz!笔记
- 程序设计思维
- 抽象与具体
- 配置
- 关于如何学习的思考
- 编程思维
- 谈编程
- 如何安全的修改对象
- 临时
- 临时笔记
- 透过问题看本质
- 程序后门
- 边界检查
- session
- 安全
- 王垠
- 第三方数据接口
- 验证码问题
- 还是少不了虚拟机
- 程序员如何谈恋爱
- 程序员为什么要一直改BUG,为什么不能一次性把代码写好?
- 碎碎念
- 算法
- 实用代码
- 相对私密与绝对私密
- 学习目标
- 随记
- 编程小知识
- foo
- 落盘
- URL编码的思考
- 字符编码
- Elasticsearch
- TCP-IP协议
- 碎碎念2
- Grafana
- EFK、ELK
- RPC
- 依赖注入
- 开发笔记
- 经纬度格式转换
- php时区问题
- 解决本地开发时调用远程AIP跨域问题
- 后期静态绑定
- 谈tp的跳转提示页面
- 无限分类问题
- 生成微缩图
- MVC名词
- MVC架构
- 也许模块不是唯一的答案
- 哈希算法
- 开发后台
- 软件设计架构
- mysql表字段设计
- 上传表如何设计
- 二开心得
- awesomes-tables
- 安全的代码部署
- 微信开发笔记
- 账户授权相关
- 小程序获取是否关注其公众号
- 支付相关
- 提交订单
- 微信支付笔记
- 支付接口笔记
- 支付中心开发
- 下单与支付
- 支付流程设计
- 订单与支付设计
- 敏感操作验证
- 排序设计
- 代码的运行环境
- 搜索关键字的显示处理
- 接口异步更新ip信息
- 图片处理
- 项目搭建
- 阅读文档的新方式
- mysql_insert_id并发问题思考
- 行锁注意事项
- 细节注意
- 如何处理用户的输入
- 不可见的字符
- 抽奖
- 时间处理
- 应用开发实战
- python 学习记录
- Scrapy 教程
- Playwright 教程
- stealth.min.js
- Selenium 教程
- requests 教程
- pyautogui 教程
- Flask 教程
- PyInstaller 教程
- 蜘蛛
- python 文档相似度验证
- thinkphp5.0数据库与模型的研究
- workerman进程管理
- workerman网络分析
- java学习记录
- docker
- 笔记
- kubernetes
- Kubernetes
- PaddlePaddle
- composer
- oneinstack
- 人工智能 AI
- 京东
- pc_detailpage_wareBusiness
- doc
- 电商网站设计
- iwebshop
- 商品规格分析
- 商品属性分析
- tpshop
- 商品规格分析
- 商品属性分析
- 电商表设计
- 设计记录
- 优惠券
- 生成唯一订单号
- 购物车技术
- 分类与类型
- 微信登录与绑定
- 京东到家库存系统架构设计
- crmeb
- 命名规范
- Nginx https配置
- 关于人工智能
- 从人的思考方式到二叉树
- 架构
- 今日有感
- 文章保存
- 安全背后: 浏览器是如何校验证书的
- 避不开的分布式事务
- devops自动化运维、部署、测试的最后一公里 —— ApiFox 云时代的接口管理工具
- 找到自己今生要做的事
- 自动化生活
- 开源与浆果
- Apifox: API 接口自动化测试指南