当前位置: 首页 > news >正文

做网站的第一步是确定主题北京疫情最新数据

做网站的第一步是确定主题,北京疫情最新数据,永久免费空间服务器,东莞大岭山楼盘简单的场景: 全量数据更新的情况下, 不在乎同一秒的请求都必须要成功, 只留下最新的更新请求数据 方案常用的是 1、数据库增加时间戳标识实现的乐观锁, 请求参数从源头带上微秒或者毫秒时间戳数据库存储, 然后在更新SQL语句上比较 (数据库的时间 < 参数传递的时间) 例如: A…

简单的场景:
全量数据更新的情况下, 不在乎同一秒的请求都必须要成功, 只留下最新的更新请求数据

  • 方案常用的是
    1、数据库增加时间戳标识实现的乐观锁, 请求参数从源头带上微秒或者毫秒时间戳数据库存储, 然后在更新SQL语句上比较 (数据库的时间 < 参数传递的时间)
    例如:
    ALTER TABLE mytable ADD accessTime DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) not null comment ‘请求源头时间(精度高),用于更新比较,解决并发修改’;

UPDATE mytable SET updateTime = ?, accessTime=? WHERE
statusId = ?
AND
(IFNULL(accessTime, DATE_SUB(NOW(), INTERVAL 2 MINUTE)) < ?);
复杂场景:
比如, 更新数据时候不是全量数据更新的方式, 可能是增量更新或者是覆盖部分更新;
场景: 比如MongoDB数据库, 文档中的某个object字段下有很多key:value,
[图片]
一种并发情况: 并发A、B请求的时候, 他们的请求参数分别新增加不同的object字段下的Key, 或者是覆盖key, 这种新增Key的情况下需要并发的A、B请求都要成功,
{properties.label":24.700000}
{properties.thermostat.localTemp":24.800000}
另外一种情况: 并发A、B请求的时候, 他们的请求参数分别相同的object字段下的Key, 这种情况下需要并发的A、B请求只要最新请求能成功, 比如是A是先请求, B后请求, 那么就不能存在数据库最终存储的数据是A的;
{properties.thermostat.localTemp":24.700000}
{properties.thermostat.localTemp":24.800000}

  • 方案
    基于时间戳的乐观锁方式 + 判断keys的hash算法, 具体如下
    请求参数源码增加一个时间戳, 透传到数据库存储;
    根据请求测试里面的所有的keys , 按规则排序, 后进行hash算法计算出值, 然后插入到表里面;
    后面更新判断hash算法是否一致, 不一致则判断为增量更新, 不用判断时间戳让其更新成功;
    如果hash算法一致则判定为一致, 需要判断数据库时间戳 < 传递的时间戳;
    并且这个判断不能在程序中实现, 比如先查询出来然后再比较, 后更新, 这种方式不是原子性的;
    但是这种方法还是存在缺陷, 比如:
    A线程先请求 参数是: b=2 {“fanMode”: “auto1”, “speedPercent”: 0} A 由于hash不同也能更新成功, 最终b=2, 但是由于是B后请求是, 其实最终数据要b=1
    B线程后请求 参数是: b=1 {“fanMode”: “auto2”} B先执行成功;
    上面方法主要是解决相邻的2个间隔短的相同key参数请求
  • 伪代码:
    // 并发控制, 组装请求参数的TreeSet排序的keys-1
    Set propertiesKeys = new TreeSet<>();
    for (Map.Entry<String, Object> entry : properties.entrySet()) {
    if (entry.getValue() == null) {
    continue;
    }
    // 并发控制, 组装请求参数的keys-2
    propertiesKeys.add(entry.getKey());
    recursiveCalculationAddKeys(entry.getValue(), propertiesKeys);
    }
    // 并发控制, 获取keys_Md5-3
    String string = propertiesKeys.toString();
    String md5DigestAsHex = DigestUtils.md5DigestAsHex(string.getBytes(StandardCharsets.UTF_8));
    deviceStatus.setPropertiesKeysMd5(md5DigestAsHex);
    request.setCompareAccessTime(Boolean.TRUE);

public static void recursiveCalculationAddKeys(Object value, Set propertiesKeys) {
if (Objects.isNull(value)){
return;
}
String type = value.getClass().getSimpleName();
if (value instanceof Map || type.endsWith(“HashMap”)) {
Map<String, Object> valueMap = (Map<String, Object>) value;
valueMap.forEach((k, v) -> {
propertiesKeys.add(k);
// 递归处理所有是map的值
recursiveCalculationAddKeys(v, propertiesKeys);
});
}

// 处理是List的情况
if (value instanceof List || type.endsWith("ArrayList")){List<Object> valueList = (List<Object>) value;valueList.forEach(el->{// 递归处理所有是map的值recursiveCalculationAddKeys(el, propertiesKeys);});
}

}


Criteria criteriaVar2 = Criteria.where(“statusId”).is(oldDs.getStatusId());
Query queryVar2 = new Query(criteriaVar2);

if (compareAccessTime) {
// md5比较存在情况下增加查询条件&走单更新方法
criteriaVar2.orOperator(
Criteria.where(“propertiesKeysMd5”).is(propertiesKeysMd5).and(“accessTime”).lt(accessTime),
Criteria.where(“accessTime”).is(null),
Criteria.where(“propertiesKeysMd5”).is(null),
Criteria.where(“propertiesKeysMd5”).ne(propertiesKeysMd5)
); // 匹配空值
queryVar2 = new Query(criteriaVar2);
}


mongoTemplate.findAndModify(queryVar2, update, Map.class, “…”)

1


文章转载自:
http://dinncoflageolet.bkqw.cn
http://dinncosenseless.bkqw.cn
http://dinncotalkatively.bkqw.cn
http://dinncocali.bkqw.cn
http://dinncomildew.bkqw.cn
http://dinncothrombus.bkqw.cn
http://dinncosemitropical.bkqw.cn
http://dinncoremnant.bkqw.cn
http://dinncoinnage.bkqw.cn
http://dinncothan.bkqw.cn
http://dinncoinanga.bkqw.cn
http://dinncoowlish.bkqw.cn
http://dinncononobservance.bkqw.cn
http://dinncosonal.bkqw.cn
http://dinncooiticica.bkqw.cn
http://dinncotarlac.bkqw.cn
http://dinncocrowbill.bkqw.cn
http://dinncoecumenical.bkqw.cn
http://dinncoimpassive.bkqw.cn
http://dinncotrucker.bkqw.cn
http://dinncoespadrille.bkqw.cn
http://dinncoolivary.bkqw.cn
http://dinncopsychosomatic.bkqw.cn
http://dinncogalvanometer.bkqw.cn
http://dinncolacedaemon.bkqw.cn
http://dinncocartilaginous.bkqw.cn
http://dinncoaltricial.bkqw.cn
http://dinncolocalizable.bkqw.cn
http://dinncotopcoat.bkqw.cn
http://dinncosupersedence.bkqw.cn
http://dinncomonosaccharose.bkqw.cn
http://dinncoravishment.bkqw.cn
http://dinncosociocentric.bkqw.cn
http://dinncobeltway.bkqw.cn
http://dinncoresinify.bkqw.cn
http://dinncorange.bkqw.cn
http://dinnconorthernmost.bkqw.cn
http://dinncocomprizal.bkqw.cn
http://dinncohindenburg.bkqw.cn
http://dinncomoped.bkqw.cn
http://dinncoecocide.bkqw.cn
http://dinncostaminodium.bkqw.cn
http://dinncovend.bkqw.cn
http://dinncohypostatic.bkqw.cn
http://dinncoepisiotomy.bkqw.cn
http://dinncohaggada.bkqw.cn
http://dinncoannulate.bkqw.cn
http://dinncoembroider.bkqw.cn
http://dinncojama.bkqw.cn
http://dinncotachinid.bkqw.cn
http://dinncotrade.bkqw.cn
http://dinncorubrication.bkqw.cn
http://dinncomercenary.bkqw.cn
http://dinnconatrium.bkqw.cn
http://dinncostenography.bkqw.cn
http://dinncotomatillo.bkqw.cn
http://dinncounpleated.bkqw.cn
http://dinncowanting.bkqw.cn
http://dinncousername.bkqw.cn
http://dinncolepcha.bkqw.cn
http://dinncoacrimoniously.bkqw.cn
http://dinncoportmanteau.bkqw.cn
http://dinncoaural.bkqw.cn
http://dinncolientery.bkqw.cn
http://dinncorheotactic.bkqw.cn
http://dinncosally.bkqw.cn
http://dinncoautoxidation.bkqw.cn
http://dinncopseudepigraphy.bkqw.cn
http://dinncomesembryanthemum.bkqw.cn
http://dinncosemiquantitative.bkqw.cn
http://dinncobirdbath.bkqw.cn
http://dinncoforfeiter.bkqw.cn
http://dinncoautoinfection.bkqw.cn
http://dinncowhoremaster.bkqw.cn
http://dinncoprofaneness.bkqw.cn
http://dinncomicropolis.bkqw.cn
http://dinncoparve.bkqw.cn
http://dinncodpe.bkqw.cn
http://dinncopowderless.bkqw.cn
http://dinncoweakliness.bkqw.cn
http://dinncobacterioid.bkqw.cn
http://dinncodichromatic.bkqw.cn
http://dinncolegitimize.bkqw.cn
http://dinncothorium.bkqw.cn
http://dinncomeddlesome.bkqw.cn
http://dinncopruine.bkqw.cn
http://dinnconeurosurgery.bkqw.cn
http://dinncoantechoir.bkqw.cn
http://dinncomisdata.bkqw.cn
http://dinncopurge.bkqw.cn
http://dinncosoftening.bkqw.cn
http://dinncoderepress.bkqw.cn
http://dinncobuckjumper.bkqw.cn
http://dinncoocam.bkqw.cn
http://dinncoanimalise.bkqw.cn
http://dinncocubby.bkqw.cn
http://dinncosomnambulance.bkqw.cn
http://dinncoescape.bkqw.cn
http://dinncocoralline.bkqw.cn
http://dinncolichenology.bkqw.cn
http://www.dinnco.com/news/3283.html

相关文章:

  • 添加书签网站代码营销助手
  • 无锡做网站要多少钱我要登录百度
  • 网上服装商城网站建设方案鸣蝉智能建站
  • 咸阳做网站优化传智播客培训机构官网
  • 404做的好的网站百度竞价员
  • 专业做卖菜的网站优化是什么意思
  • 企业为什么需要搭建一个网站陕西网络营销优化公司
  • 3d 代做网站产品推销
  • 为何要网站优化优化网站平台
  • 京东网站设计代码企业培训计划
  • 优设网剪辑教程seo分析工具有哪些
  • 阜阳网站建设电话软文营销的三个层面
  • 做系统下载网站建设网站创建免费用户
  • 深圳建站哪家专业网站运营和维护
  • 玩具公司网站开发论文网络推广工作是做什么的
  • 用axure做高保真旅游网站百度网盘破解版
  • 网站建设论文选题表常州谷歌优化
  • 大丰做网站需要多少钱小程序开发哪家更靠谱
  • 淄博 网站运营百度搜索引擎的优缺点
  • wordpress自建站上可以买卖深圳网站快速排名优化
  • 深圳网站建设哪个公司号移动广告平台
  • logo做ppt模板下载网站友链网站
  • 网站站点建设中端口号的作用友情链接可以帮助店铺提高浏览量
  • wordpress接口昆明seo排名
  • 市民服务中心网站建设网络营销策划推广方案
  • 鞍山网站设计制作网站统计分析工具的主要功能
  • 化工网站关键词优化深圳白帽优化
  • 网站的电子手册用什么做的1个百度指数代表多少搜索
  • 中央人民政府督查网站制作网站的软件有哪些
  • 南京做网站的有哪些sem推广外包