ElasticSearch 与 NoSQL 数据库差异

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/neweastsun/article/details/95253696

ElasticSearch 与 NoSQL 数据库差异

本文探讨下ElasticSearch 与 NoSQL 数据库差异,主要以MongoDB作为NoSql代表。

MongoDB 是开源的面向文档的数据库管理系统。ElasticSearch是基于Apache Lucene 的RESTful 实时搜索和分析引擎。

共有特性

一些特性是两者共有的,如面向文档存储,无Schema,分布式数据存储,高可用性,分片和复制等。虽然使用ElasticSearch作为主数据存储是可行的,但具体需求场景是决定选择哪个产品的关键。

发展历程

如果了解两个产品的发展历程,你将了解它们分别的应用场景。
MongoDB主要实现NoSQL数据库管理系统,用于存储海量数据(humongous,Mongo名称的由来)。另一方面,Elasticsearch基于数据抽取一些值,提供实时存储、索引、搜索和分析数据功能。这些数据收集自其他数据源(包括MongoDB),可以直接存储在Elasticsearch集群中。

两者差异

下面是两者之间的一些差异:

  1. 索引 - Elasticsearch 使用 Apache Lucene 实现索引,而 MongoDB 索引是基于传统的B+ 树结构. Elasticsearch利用Lucene实现实时索引和搜索功能,默认支持在文档的每个字段上创建索引。而 MongoDB,我们必须定义索引用于提升查询性能,但会影响写操作。
  2. 实现语言 - Elasticsearch 采用 Java语言编写, 而 MongoDB 是 C++语言实现。
  3. 文档 - Elasticsearch 存储 JSON 文档, MongoDB 采用BSON格式存储 (Binary JSON).
  4. REST 接口 - Elasticsearch 提供 RESTful接口. MongoDB 不提供 RESTful接口.
  5. MapReduce - MongoDB 支持 MapReduce 数据操作。 Elasticsearch 不支持 MapReduce.

两者之间首要差异为:

  • MongoDB是通用功能的非RESTful风格的 NoSQL 数据库. 文档以 BSON 格式存储,主要用于存储数据。

  • Elasticsearch 是分布式全文检索引擎,可以提供实时Restful风格API处理海量面向文档的数据。文档使用JSON格式,主要用于基于文本的数据搜索。

同时使用

很难对两者进行比较,实际应用中两者通常同时使用。

Elasticsearch一般不作为主存储数据库,而是和SQL & NoSQL数据库一起使用,作为辅助数据库。
与MongoDb不同, Elasticsearch 默认没有提供安全特性,如认证和授权。Elasticsearch和 Logstash & Kibana 一起称为ELK stack,用于快速查询数据并可视化展现分析数据。
ELK
Elasticsearch 非常适合需要基于文本进行快速索引然后进行检索,其查询速度非常快,大多数情况速度最多几十毫秒。

总结

Elasticsearch 通常作为主数据库存储的辅助存储库。一般数据库系统更聚焦于约束、准确性和健壮性。当主记录在事务中更新时,其会同时被推送至Elasticsearch中.

一般典型使用PostgreSQL 和 ZooKeeper 负责数据的存储, 同时提供给Elasticsearch实现实时检索。

和其他技术一样,没有银弹。没有一个数据库可以满足所有需求。所以我们需要了解不同数据库的优势和劣势,并选择合适的产品用于特定的需求。

展开阅读全文

SQL2005 数据库差异备份

08-08

[size=16px][color=#800080]此问题比较特殊,已经困扰本人3天了,望大神给个能给个解决方案。rn为何会产生这样的问题就不要深究了,综合原因是经手人过多。[/color]rnrn涉及:SQL2005数据库TEST、电脑A、电脑Brn问题:rn1.数据库TEST首先创建于电脑A中,设置了一个计划任务是差量备份(有完整备份)。rn2.备份了一段时间后,将电脑A中的SQL服务停止,且将数据库TEST的两个文件(mdf、ldf)拷贝到电脑B上。rn3.在电脑B中将拷贝的数据库TEST附加到SQL中,然后清除了所有数据修改了表结构,并做了两次全部备份。rn4.将此修改后的数据库拷贝回电脑A中(将之前的文件转移到别的目录备份),开启了SQL服务,未做任何全备份,但是计划任务自动进行了差异备份(TestCY.bak)。rnrn[color=#FF0000]问:4中的差异备份(TestCY.bak)对应的完整备份时机器A中的最后一次(TestAWZ.bak)还是机器B中的最后一次(TestBWZ.bak)?[/color]rnrn实操:由于电脑A的特殊性没有做任何恢复操作。rn1.在电脑B中使用TestBWZ.bak和TestCY.bak恢复提示如下:rn[color=#0000FF]System.Data.SqlClient.SqlError: 无法应用此备份集,因为它的恢复路径与数据库不一致。该恢复路径是将数据库还原到特定恢复点的数据和日志备份的序列。请找到要还原的兼容备份,或者还原数据库的其余部分以与此备份集内的恢复点匹配,这样可将数据库还原到其他时间点。有关恢复路径的详细信息,请参阅 SQL Server 联机丛书。 (Microsoft.SqlServer.Smo)rn[/color]rn2.在电脑C中使用(TestAWZ.bak和TestBWZ.bak)、(TestBWZ.bak和TestCY.bak)恢复提示如下:rn[color=#0000FF]System.Data.SqlClient.SqlError: 无法还原此差异备份,因为该数据库尚未还原到正确的早期状态。 (Microsoft.SqlServer.Smo)rn[/color][/size] 论坛

没有更多推荐了,返回首页