ClickHouse与Elasticsearch压测实践

打印 上一主题 下一主题

主题 546|帖子 546|积分 1638

1 需求分析

1.1 分析压测对象

1)什么是ClickHouse 和Elasticsearch

ClickHouse 是一个真正的列式数据库管理系统(DBMS)。在 ClickHouse 中,数据始终是按列存储的,包括矢量(向量或列块)执行的过程。只要有可能,操作都是基于矢量进行分派的,而不是单个的值,这被称为«矢量化查询执行»,它有利于降低实际的数据处理开销。
Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。 它可以被这样准确地形容:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
2)为什么要对他们进行压测

众所周知,ClickHouse在基本场景表现非常优秀,性能优于ES,但是我们实际的业务查询中有很多是复杂的业务查询场景,甚至是大数量的查询,所以为了在双十一业务峰值来到前,确保大促活动峰值业务稳定性,针对ClickHouse 和Elasticsearch在我们实际业务场景中是否拥有优秀的抗压能力,通过这次性能压测,探测系统中的性能瓶颈点,进行针对性优化,从而提升系统性能。
1.2 制定压测目标


为什么会选择这个(queryOBBacklogData)接口呢?
1)从复杂度来看,接口(queryOBBacklogData)查询了5次,代码如下:
  1. /**
  2. * 切ck-queryOBBacklogData
  3. * @param queryBO
  4. * @return
  5. */
  6. public OutboundBacklogRespBO queryOBBacklogDataCKNew(OutboundBacklogQueryBO queryBO) {
  7. log.info(" queryOBBacklogDataCK入参:{}", JSON.toJSONString(queryBO));
  8. // 公共条件-卡最近十天时间
  9. String commonStartTime = DateUtils.getTime(DateUtil.format(new Date(), DateUtil.FORMAT_DATE), DateUtils.ELEVEN_AM, 1, -10);
  10. String commonEndTime = DateUtils.getTime(DateUtil.format(new Date(), DateUtil.FORMAT_DATE), DateUtils.ELEVEN_AM, 1, 1);
  11. // 越库信息-待越库件数&待越库任务数
  12. WmsObCrossDockQueryBo wmsObCrossDockQueryBo = wmsObCrossDockQueryBoBuilder(queryBO,commonStartTime, commonEndTime);
  13. log.info("queryOBBacklogDataCK-wmsObCrossDockQueryBo: {}", JSON.toJSONString(wmsObCrossDockQueryBo));
  14. CompletableFuture<OutboundBacklogRespBO> preCrossDockInfoCF = CompletableFuture.supplyAsync(
  15. () -> wmsObCrossDockMapper.preCrossDockInfo(wmsObCrossDockQueryBo), executor);
  16. // 集合任务信息-待分配订单
  17. WmsObAssignOrderQueryBo wmsObAssignOrderQueryBo = wmsObAssignOrderQueryBoBuilder(queryBO, commonStartTime, commonEndTime);
  18. log.info("queryOBBacklogDataCK-wmsObAssignOrderQueryBo: {}", JSON.toJSONString(wmsObAssignOrderQueryBo));
  19. CompletableFuture<Integer> preAssignOrderQtyCF = CompletableFuture.supplyAsync(
  20. () -> wmsObAssignOrderMapper.preAssignOrderInfo(wmsObAssignOrderQueryBo), executor);
  21. // 拣货信息-待拣货件数&待拣货任务数
  22. WmsPickTaskQueryBo wmsPickTaskQueryBo = wmsPickTaskQueryBoBuilder(queryBO, commonStartTime, commonEndTime);
  23. log.info("queryOBBacklogDataCK-wmsPickTaskQueryBo: {}", JSON.toJSONString(wmsPickTaskQueryBo));
  24. CompletableFuture<OutboundBacklogRespBO> prePickingInfoCF = CompletableFuture.supplyAsync(
  25. () -> wmsPickTaskMapper.pickTaskInfo(wmsPickTaskQueryBo), executor);
  26. // 分播信息-待分播件数&待分播任务
  27. WmsCheckTaskDetailQueryBo wmsCheckTaskDetailQueryBo = wmsCheckTaskDetailQueryBoBuilder(queryBO, commonStartTime, commonEndTime);
  28. log.info("queryOBBacklogDataCK-wmsCheckTaskDetailQueryBo: {}", JSON.toJSONString(wmsCheckTaskDetailQueryBo));
  29. CompletableFuture<OutboundBacklogRespBO> preSowInfoCF = CompletableFuture.supplyAsync(
  30. () -> wmsCheckTaskDetailMapper.checkTaskDetailInfo(wmsCheckTaskDetailQueryBo), executor);
  31. // 发货信息-待发货件数
  32. WmsOrderSkuQueryBo wmsOrderSkuQueryBo = wmsOrderSkuQueryBoBuilder(queryBO, commonStartTime, commonEndTime);
  33. log.info("queryOBBacklogDataCK-wmsOrderSkuQueryBo: {}", JSON.toJSONString(wmsOrderSkuQueryBo));
  34. CompletableFuture<Integer> preDispatchCF = CompletableFuture.supplyAsync(
  35. () -> wmsOrderSkuMapper.preDispatchInfo(wmsOrderSkuQueryBo), executor);
  36. return processResult(preCrossDockInfoCF, preAssignOrderQtyCF, prePickingInfoCF, preSowInfoCF, preDispatchCF);
  37. }
复制代码
  
2)接口(queryOBBacklogData),总共查询了5个表,如下:
  1. wms.wms_ob_cross_dock
  2. wms.wms_ob_assign_order
  3. wms.wms_picking_task.
  4. wms.wms_check_task_detail
  5. wms.wms_order_sku
复制代码
 
3)查询的数据量,如下:

[code]select(ifnull(sum(m.shouldBeCrossedDockQty),0) -ifnull(sum(m.satisfiedCrossedDockQty),0)) as preCrossStockSkuQty,count(m.docId) as preCrossStockTaskQtyfromwms.wms_ob_cross_dock m finalprewherem.createTime >= '2021-12-03 11:00:00'and m.createTime = '2021-12-03 11:00:00'and m.createTime = '2021-12-03 11:00:00'and m.shipmentOrderCreateTime = '2021-12-03 11:00:00'and m.shipmentOrderCreateTime = '2021-12-03 11:00:00'and m.shipmentOrderCreateTime

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表