ES 相关知识点

1、关闭索引的作用

关闭索引的作用
关闭索引 POST /my_index/_close
关闭索引后, 不能再对索引进行读写. 否则都会报错.
索引数据会持久化到磁盘, 不再占用内存资源
如果需要时, 可以再开启索引 POST /my_index/_open

2、Elasticsearch与Mysql数据同步

Elasticsearch与Mysql数据同步
Mysql数据同步到ES中分为两种,分别是全量同步增量同步。全量同步表示第一次建立好ES索引之后,将Mysql中所有数据一次性导入到ES中。增量同步表示Mysql中产生新的数据,这些新的数据包括三种情况,就是新插入Mysql中的数据,更新老的数据,删除的数据,这些数据的变动与新增都要同步到ES中。

Mysql与ES的数据同步实现方式

业界有一些开源方案,开源中间件来实现。

  1. 基于Mysql的binlog日志订阅:binlog日志是Mysql用来记录数据实时的变化。
    这里主要的是binlog同步组件,目前实现的有国内的阿里巴巴开发的canal。
  2. 使用go-mysql-elasticsearch。
  3. ES官方数据收集和同步组件logstash

3、es怎么实现master选举

es怎么实现master选举

discovery.zen.minimum_master_nodes深度解析

discovery.zen.minimum_master_nodes对集群的稳定性至关重要,防止脑裂的出现。

脑裂:

如果网络的故障导致一个集群被划分成两片,每片都有多个node,以及一个master。因为master是维护集群状态,以及shard的分配。如果出现了两个master,可能导致数据破损。

discovery.zen.minimum_master_nodes的作用是只有足够的master候选节点时,才可以选举出一个master。

To avoid a split brain, this setting should be set to a quorum of master-eligible nodes:

(master_eligible_nodes / 2) + 1

总结:一般es集群的节点至少要有3个,quorum设置为2

discovery.zen.minimum_master_nodes除了在配置文件设置,也可以动态设置

PUT /_cluster/settings
{
“persistent”:{
“discovery.zen.minimum_master_nodes”:2
}
}

4、lucene字典实现原理——FST

lucene字典实现原理——FST

5、万字长文!原来 Elasticsearch 还可以这么理解!

万字长文!原来 Elasticsearch 还可以这么理解!

6、Elasticsearch: rollover API

Elasticsearch: rollover API

7、如何选择协调节点

如何选择协调节点

8、Long类型数据精度丢失

Long类型数据,在将数据存储到ES中的时候,long数据类型丢失精度导致

_id 和id的值不一致。
在这里插入图片描述
在这里插入图片描述解决方案:
使用JSON序列化的时候,使用自定义的序列化机制,而不是默认的jackson序列化机制,使其使用我们自定义序列化机制
1.创建自定义序列化对象继承JsonSerializer

public class LongToStringSerializer extends JsonSerializer<Long> {

    /**
     * Method that can be called to ask implementation to serialize
     * values of type this serializer handles.
     *
     * @param value       Value to serialize; can <b>not</b> be null.
     * @param gen         Generator used to output resulting Json content
     * @param serializers Provider that can be used to get serializers for
     */
    @Override
    public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(value.toString());
    }
}

2.在SkuInfo中使用该序列化器
在这里插入图片描述java输出long最大值_Java调用long的最大值和最小值
long取值范围是 -2^63 ~ 2^63-1 ; 64位中最高位为符号位:0为正1为负
Long.MIN_VALUE
Long.MAX_VALUE

即:-9223372036854775808 ~ 9223372036854775807 ;
0x8000000000000000L -0x7fffffffffffffffL

int的数据类型取值范围是 -2^31 ~ 2^31-1 之间
0x80000000 -0x7fffffff

long test_Max = 9223372036854775807 ; 出了问题,在使用9223372036854775807 进行赋值时,9223372036854775807 是属于int数据类型的,而int的数据类型取值范围是 -2^31 ~ 2^31-1 之间,很显然 9223372036854775807 是超出了这个范围的,所以出现了代码错误问题;

js number 丢失精度_JavaScript精度丢失问题

Number.MAX_SAFE_INTEGER
Number.MAX_SAFE_INTEGER
此属性表示JavaScript中的最大安全整数,即(2 ^ 53 - 1)9007199254740991

JS - Number 的精度
JS 使用 IEEE 754 的双精度数表示数字,1 位符号,10 位指数,53 位底数。

IEEE754
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值