官网:https://www.elastic.co/cn/elasticsearch/
Elastic is the leading platform for search-powered solutions. We accelerate results that matter.
Elastic是搜索解决方案的领先平台。我们加速了重要的结果。
ElasticSearch(简称ES)是一个开源的高扩展的分布式全文检索引擎;它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器;可以处理PB级别的数据。 是当前流行的企业级搜索引擎。
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
官方说明 :
Elasticsearch 是什么?
简单来说,我们的目标是 帮助每个人更快地找到所需内容,从需要通过内网获取文档的员工,到在网上购物寻找适合自己鞋子的客户。 但从更技术的角度来说,大致描述如下:
Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件; Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
Elasticsearch 的应用场景
参考URL: https://www.bilibili.com/video/BV1bS4y1K7Ru
官网:https://www.mongodb.com/
MongoDB中文社区:https://mongoing.com/
MongoDB最大的特点是表结构灵活可变,字段类型可以随时修改。MongoDB中的每一行数据只是简单的被转化成Json格式后存储,因此MongoDB中压根没有MySQL中表结构这样的概念,你可以直接简单粗暴的将任意结构的数据塞入同一个表中,压根不必考虑表结构的限制,更不必像MySQL一样因为要修改数据表结构而大费周折。
MongoDB不需要定义表结构这个特点给表结构的修改带来了极大的方便,但是也给多表查询、复杂事务等高级操作带来了阻碍。因此,如果你的数据的逻辑结构非常复杂,经常需要进行复杂的多表查询或者事务操作,那显然还是MySQL这类关系型数据库更合适。
MongoDB很适合那些表结构经常改变,数据的逻辑结构没又没那么复杂不需要多表查询操作,数据量又比较大的应用场景。
MongoDB应用场景:https://hevodata.com/learn/mongodb-use-case/
传统的关系型数据库在解决三高问题上的力不从心。
何为三高?
选择MongoDB的场景总结:
归纳了MongoDB一些比较明显的特征后,我们可以知道MongoDB的一些适用场景。
在MongoDB官网也会列举了MongoDB的适用场景:
1)网站实时数据:MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及
高度伸缩性。
2)数据缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由 MongoDB
搭建的持久化缓存层可以避免下层的数据源过载。
3)大尺寸、低价值数据存储:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很
多时候程序员往往会选择传统的文件进行存储。
4)高伸缩性场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB 的路线图中已经包
含对 MapReduce 引擎的内置支持。
5)对象或 JSON 数据存储:MongoDB 的 BSON 数据格式 非常适合文档化格式的存储及查询 。
MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例。
MongoDB | ElasticSearch | 备注 | |
---|---|---|---|
定位 | (文档型)数据库 | (文档型)搜索引擎 | (文档型)搜索引擎 |
资源占用 | 一般 | 高 | mongo使用c++, es使用Java开发 |
写入延迟 | 低 | 高 | es的写入延迟默认1s, 可配置, 是要牺牲一些东西 |
全文索引支持度 | 一般 | 高 | es本来就是搜索引擎 |
支持的数据量 | PB+ | TB+ ~ PB | 两者支持的量并不好说的太死, 都支持分片和横向扩展, 但是相对来说MongoDB的数据量支持要更大一点 |
性能 | 非常好 | 好 | mongo使用c++, es使用Java开发 |
索引结构 | B树 | LSM树 | es追求写入吞吐量, MongoDB读写比较均衡 |
操作接口 | TCP | Restful(Http) |
MongoDB和Elasticsearch都属于文档型数据存储,两者的很多功能和特性高度重合, 但其实两者定位完全不同。
看名字elasticSEARCH, mongoDB. 相当的明显,一个是SearchEngine,一个是Database, 没有可比性。
简单来说,如果你的场景是只读,并且能够接受一定的数据延迟(非最新的数据),那么可以考虑Elastic。如果你的场景有实时写入实时更新,通常MongoDB会是更好的选择。
ES在数据结构灵活度上高于MySQL但远不如MongoDB。ES的缺点还不止这些,自动建立索引使得ES的写入性能也收到了影响,要明显低于MongoDB。对于同样的数据ES占用的存储空间也要明显大于MongoDB(建那么多索引能不占空间吗?), 对硬件资源的消耗也是非常厉害,大数据量下64G内存+SSD基本是标配,算得上是数据库中的贵族服务。
ES绝对是一款优秀的搜索引擎,在模糊匹配、全文搜索、复杂检索等方面相比mongodb拥有更大的优势。
ES是Java编写,通过RESTFul接口操作数据。Mongodb是C++编写,通过driver操作数据。
【IT老齐166】MongoDB、Elastic全家桶还能免费用吗,5分钟带你了解开源协议
参考URL: https://www.bilibili.com/video/BV1CY4y1z73g
MongoDB 早期使用GPL协议, Elasticsearch和MongoDB现在都使用SSPL许可协议。
ES MongoDB MySQL应用场景
参考URL: ES MongoDB MySQL应用场景 - 知乎
MongoDB 高手课
参考URL: https://time.geekbang.org/cours