es是数据库还是搜索引擎,es数据库和sql数据库的区别
es是什么?
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
相关信息:
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。
再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
es索引有哪几种常见状态的
ES新手入门学习的时候,经常会和MySQL做对比,一个索引可以理解为一个数据库,分片就可以理解为一张表被分割了shards_numbers - 1次,文档类型为type类型,在高版本中在逐渐被剔除。
ES官方也给出了答案:作者不希望不同类型的相同字段在同一个Lucene中。
?
索引的状态有:红色、黄色、绿色和黑色四种(ES插件可以看出来)。
green:健康状态,代表所有的主分片和副本分片都可用;
yellow:所有的主分片可用,部分副本分片不可用;
red:部分主分片不可用;
black:索引处于关闭状态,不对外进行交互,一般磁盘空间不足时ES会自动设置。
ES是一款近实时的搜索引擎,而非实时的搜索引擎。ES每秒产生一个新分段,新段先写入文件系统缓存(对读取可见),稍后再执行刷盘操作。由于新段不会立即刷盘,这个过程如果出现意外情况,存在数据丢失的风险,通常做法是记录事务日志。
分片的目的不只是为了分割巨大的索引,还可以并发读。一个索引包含多个分片,一个分片是一个Lucene索引,一个Lucene索引又由很多分段组成,每一个分段都是一个倒排索引。
段合并:ES会选择大小相似的段进行合并,ES每次refersh都会生成一个Lucene段,每次查询都会轮流检查每一个段,查询完对结果进行合并,段越多,搜索也就越慢。由于分段的不变性(访问不需要加锁),更新删除操作本质是标记删除,在段合并的过程中,标记删除的数据并不会写入到新段中,这样就达到了删除的目的。写操作先写Lucene段,再写translog,如果先写translog,写入Lucene段失败,则还需要对translog进行回滚处理。
ES的只读和删除设置,是对索引和磁盘的一种保护机制,当然也可以手动设置索引的只读和删除,以下是ES自动触发的:
?
索引的别名操作,比如要对一个月的所有索引(每天创建一个索引)进行处理,就可以为索引创建别名,一个索引可以有多个别名,一个别名也可以指向多个索引。
数据库
文章转载自李宇涛L,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
?
相关阅读
202

怎么用spring获取es数据
1. ES和solr都是作为全文搜索引擎出现的。都是基于Lucene的搜索服务器。
2. ES不是可靠的存储系统,不是数据库,它有丢数据的风险。
3. ES不是实时系统,数据写入成功只是trans log成功(类似于MySQL的bin log),写入成功后立刻查询查不到是正常的。因为数据此刻可能还在内存里而不是进入存储引擎里。同理,删除一条数据后也不是马上消失。写入何时可查询?ES内部有一个后台线程,定时将内存中的一批数据写入到存储引擎,此后数据可见。默认后台线程一秒运行一次。该线程运行的越频繁,写入性能越低。运行的频率越低,写入的性能越高(不会无限高)。
4. 目前已知的单ES集群可以存储PB级别的数据,不过这个就非常费劲了。TB级别数据没压力。
5. 如果使用ES官方提供的jar包访问,需要JDK1.7及以上。
6. 使用对应的版本访问ES server。如果ES server端的版本是1.7,那么请使用ES 1.7的client。如果ES server是2.1,请使用2.1的client。
7. ES索引存在Linux服务器的文件系统之上(背后是文件系统,不是类似于HDFS的分布式文件系统)
8. ES Java client是线程安全的,全局构建一个即可满足读写需求,不要每次都创建ES client。每次访问ES都构建新的es client即会抛出次异常。
9. 非常不建议使用ES的动态识别和创建的机制,因为很多情况下这并非你所需要。推荐的做法是在写数据之前仔细的创建mapping。
10. 强烈不建议在ES中使用深分页。可能会导致集群不可用。
11. ES是静态分片,一旦分片数在创建索引时确定那么后继不能修改。
12. ES里提供了type,很多人以为type是物理表,一个type的数据是独立存储的;但是在ES内部并不是这样,type在ES内部仅仅是一个字段。所以在很多数据能分为独立index的情况下,不要放到一个index里用type去分。只有嵌套类和父子类的情况下使用type才是合理的。
13. ES并不提供原生的中文分词的能力。有第三方的中文分词的插件,比如ik等。Ik是个toy分词器,有严肃的分词需求的话,请在使用ES之前使用独立的分词器分好词后向ES写入。
14. ES中的index,首先会进行分片,每一个分片数据一般都会有自己的副本数据,ES分配分片的策略会保证同一个分片数据和自己的副本不会分配到同一个节点上。当集群中的某一节点宕机后,ES的master在ping该节点时通过一定的策略会发现该节点不存活;会开启ES的恢复过程
15. ES没有update的能力。所有的update都是标记删除老文档,然后重新insert一条新文档。
druid vs elasticSearch druid 和es 对比
druid api这么说:
我们不是搜索领域的专家,如果我们的描述不正确,请发邮件或者通过其他方式告知。
es 是一个基于apache lucene 的搜索引擎。它提供了针对scheme-free 文档的全文搜索,提供看了对原始事件数据的访问。eses逐渐的增加了更多对于Fenix和聚合的支持。一些社区的成员指出:
es相比druid,在数据的获取和聚合方面需要的资源更多。
另外 es 在数据获取阶段不支持数据的汇总和汇聚,汇总和汇聚压缩数据。这就导致了es 需要更大的存储。
druid 致力于OLAP 工作流。druid 在低成本的基础上为了高性能(快速的聚合和数据获取)做了优化,而且支持更多的分析操作。对于结构化的事件数据,druid 也有一些基础的搜索的支持,但是不支持全文的搜索。druid 也不支持完全的非结构化的数据。查询的维度必须在drudi的schema中进行定义,比如 汇总和roll-up 的实现。