《读书报告 -- Elasticsearch入门 》---- 简单使用(2)

Elasticsearch 分布式存储与搜索基础

文章大纲


《读书报告 – Elasticsearch入门 》


第四章 分布式文件存储

这章的主要内容是理解数据如何在分布式系统中存储。

4.1 路由文档到分片

创建一个新文档时,它是如何确定应该存储在分片1还是分片2上的呢?

这个过程不是随机的,因为将来要检索文档。事实上,它根据一个简单的算法决定:

shard = hash(routing) % number_of_primary_shards

routing值是一个任意字符串,它默认是_id但也可以自定义。这个routing字符串通过哈希函数生成一个数字,然后除以主切片的数量得到一个余数(remainder),余数的范围永远是0number_of_primary_shards - 1,这个数字就是特定文档所在的分片。

这也解释了为什么主分片的数量只能在创建索引时定义且不能修改:如果主分片的数量在未来改变了,所有先前的路由值就失效了,文档也就永远找不到了。

所有的文档API(getindex

阮一峰的《ECMAScript 6 入门》是一本系统介绍 ECMAScript 6(即 ES2015)特性的书籍,涵盖了从基础概念到高级用法的全面内容。以下是一些关键知识点的总结: ### ### **ECMAScript 与 JavaScript 的关系** ECMAScript 是 JavaScript 的语言规范,而 JavaScript 是 ECMAScript 的一种实现。此外,JScript 和 ActionScript 也是 ECMAScript 的方言实现。在日常开发中,这两个术语经常被互换使用。 ### ### **ES6 与 ECMAScript 2015 的关系** ES6 是 ECMAScript 的第六个版本,也被称为 ECMAScript 2015。这个版本引入了许多重要的新特性,如 `let` 和 `const` 关键字、箭头函数、类声明、模块化支持等[^1]。 ### ### **Iterator 接口** 一个对象如果要实现可被 `for...of` 循环调用的 Iterator 接口,必须在其 `Symbol.iterator` 属性上部署遍历器生成方法。该方法返回一个迭代器对象,负责定义如何遍历目标对象。例如,可以通过自定义 `RangeIterator` 类来实现一个简单的数值范围遍历器: ```javascript class RangeIterator { // 构造方法 constructor(start, stop) { this.value = start; this.stop = stop; } // 返回 Symbol.iterator 属性,这是一个预定好的特殊值 [Symbol.iterator]() { return this; } next() { var value = this.value; if (value < this.stop) { this.value++; return { done: false, value: value }; } return { done: true, value: undefined }; } } function range(start, stop) { return new RangeIterator(start, stop); } // 使用 for...of 遍历自定义的 RangeIterator for (var value of range(0, 3)) { console.log(value); // 输出 0, 1, 2 } ``` ### ### **Iterator 接口的应用场景** Iterator 接口广泛应用于需要逐项处理集合数据的场合,例如: - 使用 `for...of` 循环遍历数组、字符串、Map、Set 等可迭代对象。 - 自定义数据结构时,通过实现 `Symbol.iterator` 方法使其支持标准的迭代协议。 - 生成器函数(Generator)内部使用 Iterator 实现惰性求值和异步控制流。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值