1、关闭索引的作用
关闭索引的作用
关闭索引 POST /my_index/_close
关闭索引后, 不能再对索引进行读写. 否则都会报错.
索引数据会持久化到磁盘, 不再占用内存资源
如果需要时, 可以再开启索引 POST /my_index/_open
2、Elasticsearch与Mysql数据同步
Elasticsearch与Mysql数据同步
Mysql数据同步到ES中分为两种,分别是全量同步和增量同步。全量同步表示第一次建立好ES索引之后,将Mysql中所有数据一次性导入到ES中。增量同步表示Mysql中产生新的数据,这些新的数据包括三种情况,就是新插入Mysql中的数据,更新老的数据,删除的数据,这些数据的变动与新增都要同步到ES中。
Mysql与ES的数据同步实现方式
业界有一些开源方案,开源中间件来实现。
- 基于Mysql的binlog日志订阅:binlog日志是Mysql用来记录数据实时的变化。
这里主要的是binlog同步组件,目前实现的有国内的阿里巴巴开发的canal。 - 使用go-mysql-elasticsearch。
- ES官方数据收集和同步组件logstash
3、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
5、万字长文!原来 Elasticsearch 还可以这么理解!
万字长文!原来 Elasticsearch 还可以这么理解!
6、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 位底数。