| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> elasticsearch 使用感受 -> 正文阅读 |
|
[大数据]elasticsearch 使用感受 |
存储与搜索ES是Elastic Search的缩写,ES是基于Lucene的分布式存储;Lucene提供了全文检索的功能,ES在此之上加入索引分布式的机制,提供了数据分片、数据副本、数据同步等功能,保证了数据的安全性; ES存储的基本单位是一个Document,可以想象是数据库中的一行,与数据库类似的是,一个Document包含有多个Field,可以是数值类型也可以是字符类型,与数据库不同的是,Document可以随意添加或删除字段,也就是Schema less,另外ES对于需要检索的字段可以声明为需要索引,这样可以很方便就对Document进行检索。 ES具有以下特性:
关于分片ElasticSearch推荐的最大JVM堆空间是30~32G, 所以把你的分片最大容量限制为30GB, 然后再对分片数量做合理估算. 例如, 你认为你的数据能达到200GB, 我们推荐你最多分配7到8个分片.分片的大小一般在50GB以内。 分片不是越多越好,需要你预估3-5年的业务量,根据业务量来设置分片 你分配的每个分片都是有额外的成本的:
关于副本ES禁止同一个分片的主分片和副本分片在同一个节点。比如单节点ES,不允许有副本分片,有副本分片,则集群不健康。 索引数据的分片规则shard_num = hash(_routing) % num_primary_shards _routing: id字段或者parent字段。 num_primary_shards: 主分片数量。 可以看得出来,你的文档存在哪个分片跟主分片的数量有关系 集群配置我使用到的集群 19节点,包含4个gw网关节点 集群版本7.5、6.3 存储类型
ES支持的数据类型: string: 2、整数类型: long 3、浮点类型 double:64位双精度IEEE 754浮点类型? 4、逻辑类型 ?:boolean? 5、日期类型 ?:date? 日期类型表示格式可以是以下几种:? 日期格式的字符串,比如 “2018-01-13” 或 “2018-01-13 12:10:30”? 以上是常用的数据类型,还有些不在罗列,但有一个需要强调下,就是object类型,它内部可以存储的数据就是json数据,搜索时候比如内部存储了id=1,则可以通过xxxJSON.id = 1 来搜索,对应的java类型也是object: private Object xxxJSON = new Object(); 关于索引能用直接query则直接query,尽量少使用aggregation来进行数据的查询除非是数据分析,聚合肯定要比直接查慢,遇到特殊的业务需求直接查不出来的可以先用聚合进行bucket分桶,再根据分桶的结果再次查询,不要在分桶的同时进行子聚合获取tophits,这两个和一起很慢,建议分开来做, 主要我这里遇到了spu+sku信息放在一行了,然后业务需要根绝筛选条件既有sku的也有spu的条件来赛选spu,同时展示spu时候一起展示sku列表,这就很尼玛奇特,本来可以分为两个的,先展示spu,点击spu再展示其sku,非尼玛鼠标滑倒时候就展示sku,故做起来性能不咋地,后来考虑到可以分为两部去实现,效果应该会好很多。 size 设置的不能过大,也不能过小,大小要大于(当前页码*每页数量),查询时候会每个节点去查一遍这个数,主节点最后再汇总这些节点的数据,你要是设置的特别大,性能就会很慢 深分页超过1w条的数据会报错,分页查询单次不能超过10000条。 如果查询数据过大,从ES在每个分片的数据查询量就越大,性能指数级下降。
?web前端页面展示时候通常会做一个限制,防止深分页展示,比如只展示前1000页,超过1000页不在展示,但是页码会显示总页数 数据导出时候实时性要求不高可以使用Scroll方式导出所有数据 分词text数据类型存储后会自动分词,默认是英文的分词器,会以空格、逗号等进行自动分词,查询时候使用小写字母+terms就能查到,不建议使用那个模糊搜索的,数据量大了会性能问题。中文分词可以使用ik分词器,我用的ik_max_word中文分词后会很多词组 ?mapping映射一般的, mapping 可以分为? 动态映射(dynamic mapping) 和 静态(显示) 映射 (explicit mapping) 和精准(严格) 映射(strict mapping) 具体由dynamic 属性控制 "dynamic" : "true", # ES 默认允许添加新的字段 我用的 true,方便后续扩展字段,但是要控制数据存储,不能随便保存无用的字段。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:34:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |