Lucene系列-index弹性扩展

原创 2015年11月19日 11:46:46

Lucene系列-index扩展

Shard与Replica

  • Shard:index数据分片.当索引数据到达百亿级别的,单份数据索引读取和搜索都是非常耗时间的,即使在用earlytermination的情况下,latency也在100ms左右. 数据分片成shard,可以快速的提高搜索效率.
  • Replica:shard的备份,在搜索QPS较高的时候,Replica可以提供搜索的吞吐量. 一般包含一个primary shard和多个replica shards.

Index扩展

index扩展一般包含横向扩展和纵向扩展,将大数据切分成小数据块,或者将数据分片复制copy到一台机器.

横向扩展策略:
考虑线上机器运行,此时要保证搜索正常的work,并向外提供搜索服务.
1.首先应该停掉index write操作, 即利用一些消息队列存储操作阶段的线上来的增量消息.
2.循环依次复制所有的消息分片.
3.打开之前的index服务接口和新的replica.

纵向扩展策略:
当索引量比较大,disk读写速度变慢,搜索latency变高.我们需要增加分片,从而改变单个shard index的大小
纵向扩展分两种:
(1)增加新的shard,之后所有的新增索引建到新的shard上,之前的删除操作要遍历所有的shard.
(2)增加新的shard,把所有数据在平均分配一下.例如之前有2个shard,现在将2个shard的数据平均分配到3个shard上.新增的数据还是按路由规则(hash规则)写入到某一个特定的shard中.

以下策略是主要是针对无原始数据或者重建索引时间代价比较大的,这种情况下,即使在hadoop index 离线索引也不可抵消.我们实现了以下方案.具体实现:
以2个shard扩展成3个shard为例,如图:
这里写图片描述
我们定义document文档路由规则, hash函数: routeId = documentId % shardSize;
根据hash函数我们可以知道,shard1上的数据需要分裂数据到shard1’, shard2’, shard3’上.我们知道lucene底层数据的删除是先将要删除的doc设置标识位delete标识, 在index merge的时候进行删除.我们可以利用这个规律来进行. 假设shard1有三个文档.原始标识位是111,然后复制2份, 这时候就有三份shard1.通过设置标识位100,010,001,这样就shard1的数据根据我们之前定义的规则hash出来了.同理shard2也是这样.
如此进行之后,将分配到同一个node上的两个segment数据合并成统一的一份索引.
上面要注意的问题:
1.上线服务一致性问题,即在shard1,shard2分裂的过程中,这个时间段如果还继续向外提供服务,可能不稳定.因此如果有多个replica服务就可以停掉此服务.
2.线上数据的copy是比较费时间的,即相对于数据重建索引的代价而言,一般较小

lucene和ElasticSearch基本概念

lucene和ElasticSearch基本概念
  • everlasting_188
  • everlasting_188
  • 2016年07月04日 18:37
  • 3208

elasticsearch-索引与分片实现原理

添加索引 我们往 Elasticsearch 添加数据时需要用到 索引 —— 保存相关数据的地方。索引实际上是指向一个或者多个物理 分片 的 逻辑命名空间 。 一个 分片 是一个底层的 工作单元...
  • chuan442616909
  • chuan442616909
  • 2017年01月13日 16:25
  • 4426

ES内部分片处理机制

ES内部分片工作机制
  • mgxcool
  • mgxcool
  • 2015年10月19日 15:07
  • 4408

lucene分布式架构-满足高并发的实时检索需求

lucene分布式架构-满足高并发的实时检索服务
  • a276202460
  • a276202460
  • 2017年03月16日 18:46
  • 2069

Lucene系列-index弹性扩展

Lucene系列-index扩展Shard与Replica Shard:index数据分片.当索引数据到达百亿级别的,单份数据索引读取和搜索都是非常耗时间的,即使在用earlytermination的...
  • madman188
  • madman188
  • 2015年11月19日 11:46
  • 468

基于弹性计算平台——构建高可用、可扩展的应用

前不久,Facebook宣布投资10亿美元收购仅成立15个月的移动照片分享应用Instagram,消息传出时,人们不仅惊叹于这笔巨额的交易,更为这支13个人的小团队感到不可思议。Instagram的A...
  • jincm13
  • jincm13
  • 2012年08月03日 09:24
  • 1959

Lucene扩展停用词字典与自定义词库

介绍如何在Lucene 6.0中扩展停用词,如何通过自定义字典把"厉害了我的哥"分成一个词...
  • napoay
  • napoay
  • 2017年02月04日 18:23
  • 4004

从Lucene到Elasticsearch

Lucene的总体架构:     文档:索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入索引或将索引搜索出来的数据。     字段:文档的一个片段,它包括两个部分:字段的名称和内容。 ...
  • qq_17864929
  • qq_17864929
  • 2017年09月14日 10:32
  • 442

Elasticsearch - 搜索引擎Lucene

1.1. Scaling Lucene怎样在Lucene之上构建一个分布式、高度伸缩、接近实时的搜索引擎呢?让我们回顾一下在搜索引擎(基于lucene)伸缩性这条路上都做了那些尝试,并且elastic...
  • xifeijian
  • xifeijian
  • 2015年11月03日 23:52
  • 4129

三、lucene3.5的分词语法[停用词扩展、同义词搜索等]

1 、 2、语汇单元的结构解释 3、同义词的设计思路 4、分词器的比较和测试 package org.lucene.test; import java.io.File;...
  • wxwzy738
  • wxwzy738
  • 2013年04月21日 21:33
  • 2962
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lucene系列-index弹性扩展
举报原因:
原因补充:

(最多只允许输入30个字)