居然是你

Day 14 - 订单中心基于elasticsearch 的解决方案

blogsit 发表了文章 • 3 个评论 • 17672 次浏览 • 2018-12-14 15:24 • 来自相关话题

       ElasticSearch分布式搜索储存集群的引入,主要是为了解决订单数据的存储与搜索的问题。

项目背景:
      15年去哪儿网酒店日均订单量达到30w+,随着多平台订单的聚合日均订单能达到100w左右。原来采用的热表分库方式,即将最近6个月的订单的放置在一张表中,将历史订单放在在history表中。history表存储全量的数据,当用户查询的下单时间跨度超过6个月即查询历史订单表,此分表方式热表的数据量为4000w左右,当时能解决的问题。但是显然不能满足携程艺龙订单接入的需求。如果继续按照热表方式,数据量将超过1亿条。全量数据表保存2年的可能就超过4亿的数据量。所以寻找有效途径解决此问题迫在眉睫。由于对这预计4亿的数据量还需按照预定日期、入住日期、离店日期、订单号、联系人姓名、电话、酒店名称、订单状态……等多个条件查询。所以简单按照某一个维度进行分表操作没有意义。ElasticSearch分布式搜索储存集群的引入,就是为了解决订单数据的存储与搜索的问题。

具体解决方案:

1、系统性能
        对订单模型进行抽象和分类,将常用搜索字段和基础属性字段剥离DB做分库分表。存储订单详情,ElasticSearch存储搜素字段。订单复杂查询直接走ElasticSearch。如下图:

elasticsearch1.png

       通用数据存储模型

elasticsearch2.png


关键字段
    ■ 业务核心字段,用于查询过滤
系统字段
    ■ version 避免高并发操作导致数据覆盖
大字段
    ■ order_data订单详情数据(JSON)
    ■ 可灵活需要索引的字段返回的字段

 
 
2、系统可用性
     系统可用性保障:双机房高可用如下图。

       
elasticsearch3.png

     数据可用性保障:
            一、异步多写保证数据一致性。

                
二、数据补充机制:
  1、每天凌晨task扫描数据库热表数据与es数据版本进行比较。
  2、将第三方推送过来数据中的,订单号即时插入订单同步队列表中。如果数据模型解析转换、持久化成功。删除队列中订单号。同时设置1分钟一次的task 扫描队列表。
  3、推送第三方的数据也采用同样的方式。保证给第三方数据的准确性。


elasticsearch4.png


3、系统伸缩性
      elasticSearch中索引设置了8个分片,目前Es单个索引的文档达到到1.4亿,合计达到2亿条数据占磁盘大小64G,集群机器磁盘容量240G。

 
 
 

es查询性能问题

rochy 回复了问题 • 3 人关注 • 1 个回复 • 3444 次浏览 • 2018-12-14 13:07 • 来自相关话题

elasticsearch id

rochy 回复了问题 • 2 人关注 • 1 个回复 • 5071 次浏览 • 2018-12-14 13:02 • 来自相关话题

elasticsearch单值桶

回复

hnj1575565068 发起了问题 • 1 人关注 • 0 个回复 • 1915 次浏览 • 2018-12-14 09:46 • 来自相关话题

写入压测导致cpu context switch 过高,cpu sys 过高,系统卡住

zqc0512 回复了问题 • 5 人关注 • 3 个回复 • 4388 次浏览 • 2019-01-07 10:58 • 来自相关话题

spring boot 2.0可以整合elasticsearch 5.4.0吗

qqq1234567 回复了问题 • 2 人关注 • 2 个回复 • 1874 次浏览 • 2018-12-13 18:20 • 来自相关话题

query cache和filter cache的区别和联系?

rochy 回复了问题 • 3 人关注 • 1 个回复 • 3324 次浏览 • 2018-12-13 17:13 • 来自相关话题

es没有写入,监控发现有bulk的任务?

fanmo3yuan 回复了问题 • 3 人关注 • 2 个回复 • 2564 次浏览 • 2018-12-17 11:03 • 来自相关话题

ES中如何实现以下等价的solr搜索意图?

Memento 回复了问题 • 2 人关注 • 1 个回复 • 2119 次浏览 • 2019-11-07 14:53 • 来自相关话题

请教:日志已导入es,但因为一个空格没匹配到,导至无法分词,那么我能在es中修改该条日志,重新匹配吗?

rochy 回复了问题 • 2 人关注 • 1 个回复 • 2752 次浏览 • 2018-12-13 11:18 • 来自相关话题

status 503

bellengao 回复了问题 • 2 人关注 • 1 个回复 • 3205 次浏览 • 2018-12-15 10:43 • 来自相关话题

Shard大小官方推荐值为20-40GB, 具体原理呢?

medcl 回复了问题 • 7 人关注 • 2 个回复 • 7320 次浏览 • 2018-12-13 10:19 • 来自相关话题

随机函数用完需要删除seed的字符串嘛?怎么删除?

rochy 回复了问题 • 2 人关注 • 1 个回复 • 2979 次浏览 • 2018-12-12 14:55 • 来自相关话题

ik分词器搜索不出单词、数字等

端小强 回复了问题 • 5 人关注 • 4 个回复 • 8401 次浏览 • 2018-12-12 19:29 • 来自相关话题

es索引更新时通过mapping限制指定字段更新

medcl 回复了问题 • 2 人关注 • 2 个回复 • 7000 次浏览 • 2018-12-11 20:34 • 来自相关话题