陕西省交通集团建设网站,软件开发工资怎么样,前端项目开发流程,网站建设账务处理属于什么费用es elastocsearch
倒排索引是在数据查询之前建立#xff0c;在查询的时候可以直接通过关键词定位到文档内容。用空间换时间
分布式架构原理说一下#xff1f;
es底层是基于lucene来的 大概就是一个用于全文检索的jar包
用es来做分布式的搜索引擎 可以承载一秒钟几千的…es elastocsearch
倒排索引是在数据查询之前建立在查询的时候可以直接通过关键词定位到文档内容。用空间换时间
分布式架构原理说一下
es底层是基于lucene来的 大概就是一个用于全文检索的jar包
用es来做分布式的搜索引擎 可以承载一秒钟几千的搜索
es用来存储数据的基本单位是索引。
index:mysql里的一张表
type一个index里可以有多个type每个type的字段都是差不多的但是有一些略微的差别
比如mysql中的表 有些订单是实物订单有些是游戏点卡。两种订单大部分字段一样但是少部分字段可能有略微的差别。
mapping代表了对这个type表结构的定义定义了这个type中每个字段名称字段是什么类型然后还有这个字段的各种配置
document往index里的一个type里面写一条数据叫做一条document一条document代表了mysql中某个表的一行每个document有多个field每个field就代表了document中一个字段的值
架构
每台机器中有一个es进程每个es进程中有多个shard每个shard都会在其他的某个机器上有一个副本 一个索引的数据会被分布式存储在多个shard上面 primary为主版本replica为副版本
如果说masterNode节点代表一个机器突然挂了那么es会重新选举一个新的节点成为masterNode 原本需要的不是shard01跟shard02么 此时新的masterNode里面是02跟03,02是replica Shard 此时会将它变成primary Shard kafka是只能在lead里面读写 而es是可以在primary里面写读写 可以在replica里面读
当刚刚宕机了的节点恢复后它里面的shard02会变成replica shard
写入与查询的工作原理
客户端可以挑任意一个进程去写进去以后 如果是找到了replica节点那么replica会把数据路由到primary中写进primary然后primary会将数据同步到replica中
写进shard怎么写的
在写进shard之后 会写进内存buffer中同时会写进tanslog日志中每隔一段时间会把buffer中的数据刷进磁盘refresh操作-刷到segmentFile中segmentfile 中就存储最近1秒内buffer中写入的数据 刷到segmentfile之前会先进os cache操作系统级别的一个内存缓存中 为什么说es是准实时的因为是每隔1秒refresh一次写入的数据1秒后才能被看到
这样一直重复新的数据不断进入buffer和translog中不断将buffer数据写入一个又一个新的segment file中去每次refresh完buffer清空tanslog保留随着过程推进translog会变得越来越大当translog达到一定长度的时候就会触发conmit操作
commit操作1写comimit point 2 OS cache数据fsync强刷到磁盘上去 3.清空translog日志文件
一般不叫commit 一般叫flash操作
translog主要是用来做数据的恢复 内存如果宕机 那么就可以根据translog来做一个恢复
1.他是准实时的数据写入一秒后可以搜索到2可能会丢失数据的你的数据有5秒的时间停留在buffer、translog、segment file os cache中
此时如果宕机 可能会导致五秒的数据丢失
如果你希望一定不丢数据的话 可以设置参数每次写入一条数据都是直接写入buffer同时写入磁盘中的translog
删除数据有个.del的文件 如果某条数据被删除了.del文件中会标记这条数据。然后你就不会搜索到这条数据了
merge操作三个segment合并成一个segment如果原来的segment中某条数据被标志成.del 那么在合并后 它就没了 被物理删除了
读数据过程不断轮询 每次随机找一个shard去读 在几十亿数量级场景下如何优化查询性能
仅仅只是写入es中要用来检索的少数几个字段就可以了 fileSystemcache里面的内存要大一点
你最好写入es的数据小于等于 fileSystem cache 最好让查询大量的命中filesystemcache
数据预热经常要访问的数据 把他刷到filesystemCache中 就是从内存拿 而不是磁盘
比如电商 你可以吧一些平时查看得比较多的商品热数据提前后台搞个程序每隔一分钟自己主动访问一次刷到filesystemCache中去
冷热分离 就是经常用的数据放在一张表里面不经常用的放在另一个shard里面
用es做分页越往后翻越慢
两个思路来解决
1.不允许深度分页
2.默认翻得越深性能越差
微博可以用scroll api
其实现在很多产品是不能随意翻页的 做成的是往下拉的这种 而不是说一下从一百页跳到200页 生产环境的分布式搜索引擎是怎么部署的
中小型公司 集群部署了5台机器每台机器是6核64G的集群总内存是320G
日增量数据大概是2000万条每天日常增量数据大概是500MB每月