主从模式

主节点有单点故障问题:没有主从自动切换,没有failover,主机down掉了的话,整个数据变成只读。并且需要一台机单独做索引,浪费资源,所有数据都需要在这台机器上单独存在一份,索引变化较大的时候同步会占用很大的带宽和资源。

配置文件改动:改动了solrconfig.xml最终还是要手动上传至从机,而且没有做xml相关的有效性验证,上传后有可能配置出错就直接覆盖原来的配置了,而且也没有提示。

1.索引

一条数据到分发到哪个shard-》具体的replica-》shard大到一定程度之后如何扩容

1.1路由规则

SolrCloud中对于文档分布在哪个shard上

提供了两种路由算法:compositeId和implicit

在创建Collection时,需要通过router.name指定路由策略,默认为compositeId路由。

compositeId

该路由为一致性哈希路由,shards的哈希范围从80000000~7fffffff。初始创建collection是必须指定numShards个数,compositeId路由算法根据numShards的个数,计算出每个shard的哈希范围,因此路由策略不可以扩展shard。

implicit

该路由方式指定索引具体落在路由到哪个Shard,这与compositeId路由方式索引可均匀分布在每个shard上不同。同时只有在implicit路由策略下才可创建shard。

利用solrJ新建索引时,需要在代码中指定索引具体落在哪个shard上,添加代码:

doc.addField("_route_", "shard_X");

同时在schema.xml添加字段

<field name="_route_" type="string"/>

1.2索引过程

整体逻辑:路由规则定位所属shard->所属shard的leader->replica

具体表现:文档->任意replica->不是leader的话,转发至同shard的leader->转发给本shard的replica->基于路由规则不是本shard,会转发到对应shard的leader->对应shard的replica

1.3分片(纵向扩容还有:升级硬件)

shard-》shard1、shard2

整体逻辑:旧shard此时继续提供服务并把旧索引转到新的shard上

旧shard同时继续索引新文档

旧shard同时把新文档转发给新shard,新shard索引新文档

旧索引全部迁移到新shard之后,旧shard关闭,新文档直接转发到新的shard上了

implicit路由:只要创建Shard即可: 新建索引时,将索引建到新建Shard上,查询操作,指定collection名称,得到的仍是整个集群返回的结果。

compositeId路由:实现上述需求稍微麻烦一下,通过分裂(SPLITSHARD)操作实现。如下图,对Shard1进行分裂,分裂URL为:

http://10.21.17.200:9580/solr-4.10.0-web/admin/collections?action=SPLITSHARD&collection=log4j201503&shard=shard1此时Shard1的数据会平均分布到shard1_0和shard1_1上,在利用DELETESHARD API删除Shard1,即可保证数据不冗余

1.4增加机器(横向扩容)

1.5索引速度

1.一致性哈希

SolrCloud对于单条document的Hash值的获取提出了以下两个要求:

1、hash计算速度必须快,因为hash计算是分布式建索引的第一步。

2、hash值必须能均匀的分布于每一个shard,如果有一个shard的document数量大于另一个shard,那么在查询的时候前一个shard所花的时间就会大于后一个,SolrCloud的查询是先分后汇总的过程,也就是说最后每一个shard查询完毕才算完毕,所以SolrCloud的查询速度是由最慢的shard的查询速度决定的。

基于以上两点,SolrCloud采用了MurmurHash 算法以提高hash计算速度和hash值的均匀分布。

CloudSolrServer,SolrCloud批量添加索引的时候,建议在客户端提前做好document的路由,内部进行文档路由,开销较大。

2.提交频率

commit越频繁越会生成小且多的segment,于是merge出现的更频繁,越耗资源,目前互联网中很多项目中采用缓存机制来弥补这个实时性。

2.查询

含有该collection的任意机器-》任意replica-》基于shard个数,启动一个shard对应一个replica的分布式查询-》由最初的replica合并后面启动的多个子查询的结果-》返回给客户

查询速度

1.跟业务相结合,数据量不大并发不大时就采用非hash路由,数据量集中,一次查询也不用后面多个节点,多个十几个shard去合并查询,浪费时间和资源!

配置文件:schema

positionIncrementGap用于短语检索控制
 positionIncrementGap is used for phrase query of multi-value fields e.g. doc1 has two titles.

>   title1: ab cd

>   title2: xy zz

  if your positionIncrementGap is 0, then the position of the 4
terms are 0,1,2,3. if you search phrase "cd xy", it will hit. But you
may think it should not match so you can adjust positionIncrementGap to a
larger one. e.g. 100. Then the positions now are 0,1,100,101. the
phrase query will not match it.

positionIncrementGap:0

ab cd xy zz

positionIncrementGap:100

ab         cd         xy                zz

ab cd在第一种情况能命中,第二种情况不能命中

precisionStep

precisionStep 数值类型的值转换成字符串类型的值时,影响切分之后term的个数!

precisionStep
越小那么被“切”成的的字符串就会多。precisionStep
越小则value被“切”成的term就越多,也就是说索引体积将会增大。被“切”分的term越多则可能在NumericRangeQuery中被细分

的小区间中存在的可能性也就越高,那么查询遍历的次数也就越少,性能也就越好。因此,理想的precisionStep只能依据自己的测试而获取。同时请注意如果只是对其进行sort而不需要范围查询可以将precisionStep=Integer.MAX_VALUE。这样只会生成一个term,从而不会增大索引体积。

普通检索类型:

key:value

key:"term"

k1:v1 AND k2:v2

k2:v2 NOT k3:v3

k2:v2 OR k3:v3

+k2:v2 AND -k3:v3

全文检索框架

阿里妈妈:mdrill

腾讯:Hermes

google:Dremel

Facebook:Presto

impala是c++开发的,不支持多数据源,只能针对hive元数据

阿里巴巴:Druid

parquet:Twitter和Cloudera

CarbonData:华为

实时处理框架:

Twitter替代Storm的方案:Heron

大数据可视化框架:

Nanocubes

查询客户端:

Airpal

solr 主从模式和solrcloud集群模式的更多相关文章

  1. Solr 10 - SolrCloud集群模式简介 + 组成结构的说明

    目录 1 什么是SolrCloud 2 SolrCloud的结构 2.1 物理结构 2.2 逻辑结构 2.2.1 Collection(集合) 2.2.2 Core(内核) 2.2.3 Shard(分 ...

  2. Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析

    Redis 的几种常见使用方式包括: 单机模式 主从模式 哨兵模式(sentinel) 集群模式(cluster) 第三方模式 单机模式 Redis 单副本,采用单个 Redis 节点部署架构,没有备 ...

  3. 关于redis主从|哨兵|集群模式

    关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...

  4. redis主从|哨兵|集群模式

    关于redis主从.哨兵.集群的介绍网上很多,这里就不赘述了. 一.主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重 ...

  5. Redis集群模式之分布式集群模式

    前言 Redis集群模式主要有2种: 主从集群 分布式集群. 前者主要是为了高可用或是读写分离,后者为了更好的存储数据,负载均衡. 本文主要讲解主从集群.本章主要讲解后一半部分,Redis集群. 与本 ...

  6. Windows环境下Zookeeper的安装和部署(单机模式和伪集群模式)

    第一部分:单机模式 1)下载地址:http://www.pirbot.com/mirrors/apache/zookeeper/,建议下载stable版本 2)解压缩 将下载好的压缩包解压到指定目录, ...

  7. Storm集群扩容——从单机模式拓展到集群模式,以此类推

    Storm是分布式的实时流处理系统,单机模式肯本不能体现其强大特点,尤其是当需要处理的数据很大很快的 时候,Storm可以随时扩容,而且操作非常简单,编写的应用程序自动负载均衡. 前面已经介绍了如何安 ...

  8. Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)

    目录 1 pom.xml文件的配置 2 SolrJ操作SolrCloud 1 pom.xml文件的配置 项目的pom.xml依赖信息请参照: Solr 09 - SolrJ操作Solr单机服务 (So ...

  9. Redis三种集群模式介绍

    三种集群模式 redis有三种集群模式,其中主从是最常见的模式. Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的.哨兵顾名思义,就是用来监控的,主要作用就是 ...

随机推荐

  1. ios上架

    1.登录developer.apple.com 2.点击member center后 进下图 3.点击certificates Identifiers进下图 4.点击Certificates进下图,首 ...

  2. 重拾java系列一java基础(3)

    这一章主要复习下以前所接触的算法, (1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较 ...

  3. 极客DIY:使用树莓派制作一架四轴无人机

    如果你想DIY一台属于自己的无人机,那么接下来可以阅读这篇文章,阅读完毕之后也许对你会有启发. 这个项目主要用到的零件主要来自Erle Robotics(一个使用Linux系统的开源四轴飞行器项目). ...

  4. UE正则表达式查找和替换(将【,;】)替换为换行

  5. BZOJ 2393 Cirno的完美算数教室

    就是爆搜嘛. 先从大到小排个序能减去dfs树上很大的一部分.这个技巧要掌握. #include<iostream> #include<cstdio> #include<c ...

  6. Codeforces Round #365 (Div. 2)-D Mishka and Interesting sum(树状数组)

    题目链接:http://codeforces.com/contest/703/problem/D 思路:看了神犇的代码写的... 偶数个相同的数异或结果为0,所以区间ans[l , r]=区间[l , ...

  7. A Knight's Journey_DFS

    Description Background The knight is getting bored of seeing the same black and white squares again ...

  8. 简单模仿javascript confirm方法的例子

    页面中有个删除按钮: <?php $i = 1; foreach ($packages as $package) { ?> <tr> <td height="3 ...

  9. 即使连网了ping也会失败

    /*************************************************************************** * 即使连网了ping也会失败 * 说明: * ...

  10. LeetCode Convert Sorted Array to Binary Search Tree(数据结构)

    题意: 将一个有序的数组建成一棵平衡的BST树. 思路: 因为数组已经有序,每次可以从中点开始建根,再递归下去分别处理左/右子树. /** * Definition for a binary tree ...