一、Elastic Search的优缺点
Elasticsearch是一个实时分布式搜索和分析引擎。它拥有如下的优点:
1、ElasticSearch是一个实时分布式搜索和分析引擎擅,擅长处理大规模的数据。在面对海量数据时,性能会有显著提升。而这是因为Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
2、ElasticSearch采用Lucene作为他的库,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
3、ElasticSearch具有很好的横向可扩展性:只需要增加一台服务器,做一点儿配置,启动一下ES进程就可以并入集群;分片机制提供更好的分布性,同一个索引分成多个分片,这保证了文本也可以被索引到;另外Elasticsearch提供复制机制,一个分片可以设置多个复制,使得某台服务器宕机的情况下,集群仍旧可以照常运行,并会把由于服务器宕机丢失的复制恢复到其它可用节点上。
4、在对数据库进行写操作的时候,实例间做下配置即可扩展并发性,可以自动分配的写入机制,无需操心传统db中多主同步的诟病。
5、通过传递JSON(JavaScript Object Notation)的方式,可以在服务器端实现复杂的查询条件,group by、排序、聚合、在线云分析这些操作都不是问题。甚至可以通过复杂的json实现云计算的功能。
同样ElasticSearch也有如下的缺点:
1、不支持事物操作。
2、由于ElasticSearch时即时的操作,因此具有一定的延时性,官方以前也自己称自己为Near-Realtime(近乎实时性)的。频繁的读写操作需要一定的时间,当然时间很短基本是秒级甚至是毫秒级的。
3、没有像MySQL一样的权限管理机制。
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}