Elasticsearch可以作为一个"NoSQL"数据库来使用吗? NoSQL在不同上下文中代表不同的意思,而且有趣的是它跟SQL无关。我们先来假设这个问题的答案是"也许可以!",让我们先来探究一下,Elasticsearch都具有那些特性以及它牺牲了哪些特性,使得它成为迄今最具灵活性、扩展性和高性能的查询和分析引擎。
NoSQL-数据库官网把NoSQL定义为“下一代数据库,主要具有下列一些特点: 具有非关系性,分布式,开源并且横向可扩展”。也就是说,它并不是一个非常精确的概念。
它尤其与SQL无关. 比方说, Hive 查询语言的灵感显然来自 SQL. Esper查询语言同样如此, 只是它操作的是流而不是关系. 还有你知道 PostgreSQL 过去被命名为 “Postgres” 并使用 “Quel” 作为它的查询语言么? 而首先作为一个关系型数据库管理系统( ORDBMS), 它现在同样有许多的特性使其具备无模式文档存储的能力.
它同样也和ACID-特性无关. Hyperdex 就是一个 NoSQL-数据库的例子,它的目标就是提供 ACID-事务能力. MySQL, 确实是一个 SQL-数据库, 历史上它有一段解释 ACID 的真正意义的暧昧时期.
关系型的? 虽然大多数的 NoSQL-数据库并不支持加入传统关系型数据意义相同的功能,但还是有一些那样做了,并将其留给用户当做练习使用. RethinkDB, Hive 还有 Pig, 等等. Neo4j, 面向图形的数据库, 确实是处理关系用的 - 它擅于遍历图中的关系 (比如,图中的边) . Elasticsearch 有一个概念叫做加入父子关系的“查询时间”和加入嵌套类型的“索引时间“.
分布式的? 已经有一些分布式的 SQL-数据库 了, 并以 一些项目 旨在做一些像一个NoSQLite那样的事情, 更新一代的数据库趋向于在某些方式上具备分布式能力.
总而言之, 既没有道理给 NoSQL 做出精确的定义, 也不能简单的说 Elasticsearch 是一个“文档存储”-类型的NoSQL-数据库. 在我写这篇文章的时候, nosql-database.org 列出了超过20 个那样的东西.
在下一节,我们将关注一些重要的属性并且看看 Elasticsearch 为什么要实现或者不去实现它们.
换句话说,在面向文档类型的数据库中,比如Elasticsearch, 我们对文档进行映射和存储设计只是为了优化查询和信息获取的性能。
在介绍中已经提到,Elasticsearch中可以使用父/子-关系进行“查询时”连结,也可以使用内嵌类型进行“索引时”连结。我们会在以后的文章中对该主题进行深入介绍。我们推荐Martijn van Groningen的一篇文章“Document relations with Elasticsearch”.
大多数关系型数据库也会允许你指定约束关系,来定义什么需要保持一致性,什么不需要保持一致性。比如,参照完整性和唯一性都是强制性的。你可以要求账户变更金额必须是正数,等等。而面向文档的数据库不倾向于这么做,Elasticsearch就是如此。
评论删除后,数据将无法恢复
评论(11)
引用来自“afpro”的评论
"鲁棒性"是一个我一直以来都不理解的词,为什么不说"稳定性"或者"健壮性",字数都一样,为什么?!最适合测试 ElasticSearch REST API工具非 Wisdom RESTClient莫属
支持自动化测试,生成测试报告和API文档。
https://github.com/Wisdom-Projects/rest-client
引用来自“afpro”的评论
"鲁棒性"是一个我一直以来都不理解的词,为什么不说"稳定性"或者"健壮性",字数都一样,为什么?!引用来自“扣舍蛮”的评论
引用来自“afpro”的评论
"鲁棒性"是一个我一直以来都不理解的词,为什么不说"稳定性"或者"健壮性",字数都一样,为什么?!
引用来自“afpro”的评论
"鲁棒性"是一个我一直以来都不理解的词,为什么不说"稳定性"或者"健壮性",字数都一样,为什么?!