ES核心干货学习(原理及数据结构)

本文主要为帮助大家理解ES原理,了解它为啥快,简化部分内容便于理解。

1. ES用途

1.1 ES是什么?

ES是建立在Lucene基础之上的分布式准实时搜索引擎。

核心:分布式和Lucene全文搜索。

1.2 什么场景需要用ES

1. 业务需要进行大量数据实时检索时,传统关系型数据库无法支撑。

2. 需要进行分词检索,语义检索

3. 需要大数据分析

符合上面特征都可以考虑,如日志收集、订单数据链查询,文章检索等。

1.3 为啥选ES

1. 能支持千万级亿级的实时检索。

2. 支持restful API接口,使用门槛低。

3. 分布式,可扩展。

4. 在OLAP场景下与市面上现有竞品(不包括ClickHouse)相比有明显性能优势。

5. 与ClickHouse相比主要是运维优势和用户基础,云服务平台支持较好,减低个人或公司的运维成本。

2. ES安装

    后续补上

3. ES基础概念

3.1 数据结构

类型

说明

举例

与Mysql逻辑对应

index

索引(自定义)

test

表名

doc

field

具体字段名,又称域(自定义)

name

字段名称

type

字段类型(ES定义)

text、keyword、integer

字段类型

1.索引

      在ES中用户的数据新增、搜索和更新等操作的对象全部对应索引。但是ES中的索引和Lucene中的索引不是一一对应的。ES中的一个索引对应一个或多个Lucene索引,这是由其分布式的设计方案决定的,在使用上类似Mysql表的概念。

2.文档

      文档对应关系型数据库中行的概念,ES的文档中可以有一个或多个字段,每个字段可以是各种类型。用户对数据操作的最细粒度对象就是文档。ES文档操作使用了版本的概念,即文档的初始版本为1,每次的写操作会把文档的版本加1,每次使用文档时,ES返回给用户的是最新版本的文档。另外,为了减轻集群负载和提升效率,ES提供了文档的批量索引、更新和删除功能。

3.字段

      一个文档可以包含一个或多个字段,每个字段都有一个类型与其对应。除了常用的数据类型(如字符串型、文本型和数值型)外,ES还提供了多种数据类型,如数组类型、经纬度类型和IP地址类型等。ES对不同类型的字段可以支持不同的搜索功能。例如,当使用文本类型的数据时,可以按照某种分词方式对数据进行搜索,并且可以设定搜索后的打分因子来影响最终的排序。再如,使用经纬度的数据时,ES可以搜索某个地点附近的文档,也可以查询地理围栏内的文档。在排序函数的使用上,ES也可以基于某个地点按照衰减函数进行排序。

3.2 存储结构 

1.集群和节点

      在分布式系统中,为了完成海量数据的存储、计算并提升系统的高可用性,需要多台计算机集成在一起协作,这种形式被称为集群,这些集群中的每台计算机叫作节点。ES集群的节点个数不受限制,用户可以根据需求增加计算机对搜索服务进行扩展。

要检查群集运行状况,我们可以在 Kibana 控制台中运行以下命令 GET /_cluster/health,得到如下信息:

{  
  "cluster_name" : "cluster",   //集群名称
  "status" : "yellow",          //集群状态
  "timed_out" : false,  
  "number_of_nodes" : 1,        //节点个数
  "number_of_data_nodes" : 1,   //数据节点个数(数据节点:存放数据的节点)
  "active_primary_shards" : 9,   //所有主分片数
  "active_shards" : 9,          //所有副本分片数
  "relocating_shards" : 0,      //正在迁移分片数量
  "initializing_shards" : 0,    //正在创建的分片数量
  "unassigned_shards" : 5,      // 未分配副本分片
  "delayed_unassigned_shards" : 0,  
  "number_of_pending_tasks" : 0,  
  "number_of_in_flight_fetch" : 0,  
  "task_max_waiting_in_queue_millis" : 0,  
  "active_shards_percent_as_number" : 64.28571428571429  
}  

集群状态通过 绿,黄,红 来标识

绿色:集群健康完好,一切功能齐全正常,所有分片和副本都可以正常工作。

黄色:预警状态,所有主分片功能正常,但至少有一个副本是不能正常工作的。此时集群是可以正常工作的,但是高可用性在某种程度上会受影响。

红色:集群不可正常使用。某个或某些分片及其副本异常不可用,这时集群的查询操作还能执行,但是返回的结果会不准确。对于分配到这个分片的写入请求将会报错,最终会导致数据的丢失。当集群状态为红色时,它将会继续从可用的分片提供搜索请求服务,但是你需要尽快修复那些未分配的分片。

2.分片

在分布式系统中,为了能存储和计算海量的数据,会先对数据进行切分,然后再将它们存储到多台计算机中,每个切片就是分片,这样不仅能分担集群的存储和计算压力,而且在该架构基础上进一步优化,还可以提升系统中数据的高可用性。在ES中,一个分片对应的就是一个Lucene索引,每个分片可以设置多个副分片,这样当主分片所在的计算机因为发生故障而离线时,副分片会充当主分片继续服务。索引的分片个数只能设置一次,之后不能更改。在默认情况下,ES的每个索引设置为1个分片。

3.副本(副分片)

为了提升系统索引数据的高可用性并减轻集群搜索的负载,可以启用分片的副本,该副本叫作副分片,而原有分片叫作主分片。在一个索引中,主分片的副分片个数是没有限制的,用户可以按需设定。在默认情况下,ES不会为索引的分片开启副分片,用户需要手动设置。副分片的个数设定后,也可以进行更改。一个分片的主分片和副分片分别存储在不同的计算机上。

3.2 ES RestFul API接口

       RestFul API 主要分两个部分: 请求url 和请求方式。

请求方式包括:get、post、delete、put等,其中put请求要求是幂等操作,非幂等操作会报错。

在这就不细说了。

4. ES索引

4.1 索引属性

创建索引:

PUT my_index   
{  
   "settings" : {  
      "number_of_shards" : 5,  // 分片数(静态配置,不可变)
      "number_of_replicas" : 1,  // 副本数 (动态配置,可改)
      "refresh_interval": "2s"    // 索引刷新到文件缓存的时间
   }  
  "mappings": {  
    "_doc": {   
      "properties": {   
        "title":    { "type": "text"  },   
        "name":     { "type": "keyword"  },   
        "age":      { "type": "integer" },    
        "created":  {  
          "type":   "date",   
          "format": "strict_date_optional_time||epoch_millis"  
        }  
      }  
    }  
  }  
} 

4.2 字段(域)说明

(1). 字符串类型: text, keyword

    text类型(可以用分词器)

    a. 支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;

    b. text类型最大支持的字符长度无限制,适合大字段存储;

    使用场景:

    存储全文搜索数据, 例如: 邮箱内容、地址、代码块、文章内容等。

    默认结合standard analyzer(标准解析器)对文本进行分词、倒排索引。

    默认结合标准分析器进行词命中、词频相关度打分。

    keyword类型:

    a.不进行分词,直接索引,支持模糊、支持精确匹配,支持聚合、排序操作。

    b.keyword类型的最大支持的长度为32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引。

    使用场景:

    存储邮箱号码、url、name、title,手机号码、主机名、状态码、邮政编码、标签、年龄、性别等数据。

    用于筛选数据、排序、聚合(统计)。

    直接将完整的文本保存到倒排索引中。

(2)数字类型:long, integer, short, byte, double, float, half_float, scaled_float

(3)日期:date

(4)日期 纳秒:date_nanos

(5)布尔型:boolean

(6)Binary:binary

(7)Range: integer_range, float_range, long_range, double_range, date_rang

5. 交互流程说明

5.1 写入流程

核心步骤说明

写入请求流转流程

1. 调用者发起写入请求后会发给集群中的某个node节点,该节点被称为协调节点。

2. 协调节点会根据数据中的Routing(可指定参数,默认用_id)值进行Hash运算决定数据存放哪个分片,计算方式比较简单:计算Routing的hash值然后和分片数进行取模运算,得到的值就是主分片编号,具体如下:

shard = hash(routing) % number_of_primary_shards

随后写入请求会转给主分片所在节点处理。

3. 主分片收到请求后会将数据写入内存并同时生成日志文件Translog(用来防止突发情况下的内存丢失,分同步或异步写入两种方式),并且将数据转发到其他副本分片,等所有写入完成(可配置是否需要副本同步写入),返回写入成功响应。

Translog刷盘配置项:

index.translog.durability:

request:同步刷盘(默认)

async:异步刷盘

index.translog.sync_interval:5s //translog异步刷盘间隔时间;默认5s一次

数据写入文件系统缓存

4. 数据写入内存后会refresh到文件系统缓存中(可配置,默认每秒执行),并生成segment段,构建索引,此时用户即可查询到数据。

refresh配置项:

index.refresh_interval:10s //refresh刷新频率,默认1s一次,可以设置为-1为禁用

5. 索引的构建主要分为2个大步骤,生成正排索引和生成倒排索引。

正排索引:生成文档ID和文档数据的对应关系,建立存储索引;

倒排索引:文档数据关键字与文档id建立索引。

6. 当translog达到一定大小(参数:index.translog.flush_threshold_size,默认:512M)或者到设置的flush时间(参数:index.translog.flush_threshold_period,默认:30分钟)会进行一次flush操作,具体流程:

1.内存中数据写入新的segment放入缓存(清空内存区)

2.生成一个提交点(commit point)并写入磁盘,表示哪些segment已写入磁盘

3.将缓存的segement写入磁盘(fsync命令)

4.清空旧的translog日志

额外细节:

1. 段合并(整个写入过程中也伴随着段合并):

       由于端是不可变的,每次refresh会创建一个新的段 ,这样会导致短时间内的段数量暴增。每一个段都会消耗文件句柄、内存和 cpu 运行周期。更重要的是,每个搜索请求都必须轮流检查每个段;所以段越多,搜索也就越慢。Elasticsearch 通过在后台进行段合并来解决这个问题。小的段被合并到大的段,然后这些大的段再被合并到更大的段。段合并的时候会将那些旧的已删除文档从文件系统中清除。被删除的文档(或被更新文档的旧版本)不会被拷贝到新的大段中。

5.2 查询流程

查询阶段步骤(我们以普通参数查询为例):

1. 客户端发送一个search请求到Node1,Node1会创建一个查询数据量大小的空优先队列,该节点就会变成协调节点。

2. Node1将查询请求转发到索引的每个主分片或它对应某个副本分片中。每个分片在本地执行查询并添加结果到本地有序优先队列中。

3. 每个分片返回各自优先队列中所有文档的 ID 和排序值给协调节点,也就是Node1,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。

汇总一下:

        首先查询请求发送会发给集群的某一个节点,某个节点把最终的结果返回给客户端,当一个搜索请求被发送到某个节点时,这个节点就变成了协调节点。 这个节点的任务是广播查询请求到所有相关分片并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户端。

      查询请求可以被某个主分片或某个副本分片处理, 这就是为什么更多的副本(当结合更多的硬件)能够增加搜索吞吐率。协调节点将在之后的请求中轮询所有的分片拷贝来分摊负载。

      每个分片在本地执行查询请求并且创建一个长度为from + size的优先队列,也就是说,每个分片创建的结果集足够大,均可以满足全局的搜索请求。分片返回一个轻量级的结果列表到协调节点,它仅包含文档 ID 集合以及任何排序需要用到的值,例如 _score 。

     协调节点将这些分片级的结果合并到自己的有序优先队列里,它代表了全局排序结果集合。至此查询过程结束。

注:a. 每次查询过程中我们都是将请求分发给主分片或者副本(二选一)

       b. 按_id查询是会直接计算hash去对应分片查询,不用分发后在合并。

5.3 删除流程

      由于segment不可变,ES的删除操作是进行逻辑删除的,先生成标记删除文件(.del)记录那些被删除,在查询的时候做过滤,然后在合并segment 时物理删除。

6. 索引建立流程

整体流程图如下:

(只说明主流程,以下讲解中所有数据结构不代表实际结构,只是便于理解的简化版)

说明:

1. 索引建立会分为正排索引和倒排索引

2. 正排索引通过文档id定位文档数据位置。

3. 倒排索引通过建立词条和id的对应关系定位文档id,通过正派索引定位文档。

注:说文档id只是便于理解,只是个对应关系的标记id,并不一定是文档的id。

这个很好理解,正排索引和倒排索引都需要,只有倒排索引是没办法定位到具体数据的,毕竟巨量数据的检索也是个问题。

6.1. 建立正排索引 

说明:

1. 正排索引的目的是在于建立快捷的文档信息快速查找的机制,核心在于快速定位文档位置(存储偏移量),所以为了记录文档位置,我们建立了域索引信息表。

2. 域索引信息表中的每个元素会记录当前域数据对应的文档信息位置(偏移量),但查询域数据本身也是个问题,所以我们提前给域数据(分词数据)进行顺序编号, 域索引信息表会按照编号和定长64位的块顺序排列。

3. 当我们知道域数据编号可以计算域索引的偏移量(size(公共数据长度)+ 64*N),从而获取对于数据在文档信息表中的位置信息,获取具体数据。

4. 为降低存储冗余和便于维护,我们提前给域(字段)进行编号并建立对应关系,生成域信息表。

举个例子(10(id), name(field),zhansan(value)):

生成name的域索引表,给“zhansan”编号为5,分配在size+5*64 到size+6*64 这段区域存储id:10对应数据的在文档信息表中的位置。

6.2. 建立倒排索引

流程如下:

1. 数据项会先进行分词拆分(非text类型域跳过),建立词典,这块会用到FST算法进行索引,通过前缀进行匹配,词典会进行排序,并放在内存中。

2. 建立词典和文档的对应关系,也就是建立倒排表,这里的倒排表写的比较简单,实际上倒排表下有两个字表:词频倒排和位置倒排。

终极问题1:ES为什么亿级大数据全文检索领域那么快?

1. 倒排索引

      倒排的数据结构在全文搜索上有着天然的优势,在建立索引的情况下,单分片查询复杂度接近O(1)。

2. 词典压缩

     ES中有大量数据压缩算法的应用,对词典的压缩保证这部分数据可以放在内存中进行检索,大大提升查询效率。

3. 分布式架构

     分布式架构下保证了ES的可拓展性,多分片副本进行分段存储,使得在查询过程中可进行负载查询,降低单节点查询压力,提升并发,进而提高查询效率。

终极问题2:那些因素会影响ES性能?

1. 硬盘!! ,硬盘性能对ES影响很大,很多操作是频繁读写硬盘,所以SSD非常必要。

2. CPU和内存,这就不说了,大点好,需要注意合理设置jvm内存,不要影响文件系统缓存的使用

3. 分片和副本的设置需要注意,分片数最好大于等于数据节点数小于等于3倍数据节点数。

4. refresh主要是生成segment放文件缓存可供实时查询,但是过多小segment会影响效率,查询实时性没那么高时建议调大一些。

3. flush是一个刷盘操作,写密集的情况下建议调大flush时间间隔,来减低IO。

4. translog 日志文件,默认会同步写盘,接受部分风险,建议改成异步。

5. 写入时如无特需要求,文档ID不要自定义!会影响写入效率,因为es需要重新计算排序,最重要的时它会进行验重,占用系统资源。

li644872790
关注 关注
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原来 Elasticsearch 还可以这么理解
MarkerHub的博客
02-23 557
来源:cnblogs.com/jajian/p/11223992.html生活中的数据先说说Lucen核心概念基本使用性能优化存储设备内部索引优化调整配置参数JVM调优由于近期在公司内部做...
ES学习以及介绍
07-17
我自己学习的Demo
ES主要功能特性和使用场景
相关项目可以查看https://gitee.com/fan-pl或https://github.com/fpl1116
04-20 1235
ES主要功能特性和使用场景
ES学习
bigdataf的博客
08-31 218
#创建 索引为blog 类型为article的文档 curl -H 'Content-Type:application/json' -XPUT http://localhost:9200/blog/article/1 -d ' { "id": "1", "title": "New version of Elasticsearch released!", "con...
es学习
weixin_43904316的博客
11-22 1507
es的简单概念: es可以更快的获得你想要搜索的数据,先对比一下和mysql的区别: es中的索引就相当于一个数据库,而类型就是一张表,文档则表示一行数据,一列代表着属性。es在存储的时候则是以json的方式进行存储的。 es之所以快是因为他维护了一张倒排索引表 比如把以上5条记录保存到es中,就会维护一张倒排索引表。比如1:红海行动就会被拆分成红海和行动。红海和行动在倒排索引中分别记录着文档1。2:探索红海行动就会被拆分成探索,红海和行动。这样倒排索引中就会分别记录对应的文档2。当我们需要进行检索.
ES系列】ES数据结构与DSL语法
m0_50697831的博客
02-06 2980
elasticsearch 数据结构 检索 搜索语法
Solr&ElasticSearch原理及应用
02-25
人们要找自己想要的信息可按他们的分类一层层进入,就能最后到达目的地,找到自己想要的信息(树状结构)。这其实是最原始的方式,只适用于因特网信息并不多的时候。随着因特网信息按几何式增长,出现了真正意义上的...
学习相关,包括spring-cloud、elasticsearch、zookeeper、数据结构和算法
01-15
学习相关,包括spring-cloud、elasticsearch、zookeeper、数据结构和算法、设计模式以及JDK常用的工具。.zip
一幅动图,搞定 Elasticsearch 核心基础原理
最新发布
05-11
一幅动图,搞定 Elasticsearch 核心基础原理
Elasticsearch 基础介绍及索引原理分析
08-25
主要介绍了Elasticsearch 基础介绍及索引原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
ES数据结构了解下
渣渣飞的博客
06-21 3653
ES数据结构一:线性数组结构。 class Pojo { constructor(){ this.elements = new Array(0); } //获取数组的长度 size(){ return this.elements.length; } //向数组末尾添加一个元素 add(element){ ...
ES学习及简介
李金华的博客
09-30 2440
一.ElasticSearch简介 1、ElasticSearch(简称ESElasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到近实时搜索,稳定,可靠,快速,安装使用方便。 客户端支持Java、.NET( C#)、PHP、Python、Ruby等多种语言。 官方网站: https://www.elastic.co/ 下载地址:https://www.elastic.co/cn/start 创始人:Shay Banon(谢巴农) 2
ES相关学习
喵大萌的博客
06-30 298
ES相关学习
ElasticsearchES)入门学习
一只慵懒的猫z的博客
12-29 2197
Elasticsearch(ES) 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合 以下是本篇文章正文内容,本文主要介绍Elasticsearch的一些基本概念和用法
ES学习——介绍
lkj41110的博客
10-20 872
前言 在了解Elasticsearch之前,我们应该先了解下: 什么是搜索引擎 目前有哪些主流的搜索引擎 搜索引擎搜索的质量应该如何评价 简介 什么是ES es全称为Elasticsearch,是一个高度可扩展且开源的全文检索和分析引擎。它可以让您快速且近实时地存储,检索以及分析海量数据。他是用java编写的基于Lucene的一款软件。用户可以很容易的使用RESTful接口进行全文搜索和结构化...
ES学习
qq_43317879的博客
04-27 212
1.了解ES ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案。 其特点是 操作简单 不用那么繁琐配置,并且支持分布式,以JSON的格式来操作,以restfull风格来操作。 相关框架Solr Solr 利用 Zookeeper 进行分布式管理,支持更多格式的数据(HTML/PDF/CSV),官方提供的功能更多在传统的搜索应用中表现好于 E...
es桶聚合的底层原理数据结构以及算法
05-18
其中最基本的是倒排索引(Inverted Index),它是Elasticsearch核心数据结构,用于快速检索文本。 在ES的聚合中,常用的是桶(Bucket)聚合。桶聚合是将文档分成多个桶(Bucket),每个桶代表一个特定的条件。...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Linux系统下date时间命令详解 5023
  • ES核心干货学习(原理及数据结构) 2953
  • 记一次线上磁盘报警引起关于文件句柄泄露问题排查 332
  • 记一次OOM Killer导致的生产事故 301
  • 深入理解Mysql原理-存储引擎InnoDB(二) 255

分类专栏

  • mysql学习之深入原理剖析 4篇

最新评论

  • 记一次线上磁盘报警引起关于文件句柄泄露问题排查

    CSDN-Ada助手: 恭喜用户写了这篇有关文件句柄泄露问题排查的博客,这是一个非常实用的技术问题。建议用户在接下来的创作中,可以结合自己的经验和实践,分享更多的技术心得和解决方案,期待更多优质的博客。 CSDN 会根据你创作的前四篇博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply4 看奖励名单。

  • ES核心干货学习(原理及数据结构)

    CSDN-Ada助手: 恭喜作者写出了这篇关于ES核心干货学习的博客,分享了原理及数据结构。这篇文章对于ES初学者来说非常有价值,讲解深入浅出,易于理解。建议作者在下一篇博客中可以深入探讨ES的应用场景,或者分享一些实战经验,让读者更好地了解ES的实际运用。感谢作者的分享,期待更多优质内容。 CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3

  • 记一次OOM Killer导致的生产事故

    CSDN-Ada助手: CS入门 技能树或许可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 深入理解Mysql原理-存储引擎InnoDB(二)
  • 深入理解Mysql原理-事务的实现机制(三)
  • 深入理解Mysql原理-MVCC详细原理剖析(四)
2023年8篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司长沙seo优化推荐来宾网站改版滨州网页设计多少钱百色英文网站建设报价嘉兴网络推广广州网站推广石家庄网站搜索优化多少钱来宾网站推广工具多少钱宜昌网站制作设计推荐海东百度seo多少钱三亚seo网站推广大芬网站推广系统推荐滨州关键词按天扣费推荐廊坊建网站价格南昌百度关键词包年推广报价庆阳网页设计多少钱常州seo排名报价泰安网站制作设计多少钱宜春网络广告推广公司吴忠网站优化按天收费哪家好漯河SEO按天计费推荐南宁seo多少钱信阳百度网站优化福州至尊标王报价大理如何制作网站报价湖州网站优化按天收费海南网站优化推广多少钱福永网络营销推荐惠州SEO按效果付费多少钱玉林网站优化按天扣费报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化