SQL 和 Elasticsearch 之间的概念映射

编辑

SQL 和 Elasticsearch 之间的概念映射编辑

虽然 SQL 和 Elasticsearch 在数据组织方式(和语义)方面使用不同的术语,但本质上它们的目的相同。

所以让我们从最底层开始;它们大致是

SQL Elasticsearch 描述

字段

在这两种情况下,在最低级别,数据都存储在*命名*条目中,这些条目具有各种数据类型,并且包含*一个*值。SQL 将这样的条目称为*列*,而 Elasticsearch 则称为*字段*。请注意,在 Elasticsearch 中,一个字段可以包含*多个*相同类型的值(本质上是一个列表),而在 SQL 中,一个*列*只能包含所述类型的*一个*值。Elasticsearch SQL 将尽力保留 SQL 语义,并且根据查询,拒绝返回包含多个值的字段的查询。

文档

字段*不会*单独存在;它们是文档的一部分。两者在语义上略有不同:往往比较*严格*(并且有更多强制执行),而文档则往往更灵活或宽松(但仍然具有结构)。

索引

在 SQL 或 Elasticsearch 中,查询所针对的目标。

模式

隐式

在关系数据库管理系统 (RDBMS) 中,模式主要是表的命名空间,通常用作安全边界。Elasticsearch 没有提供等效的概念。但是,当启用安全性时,Elasticsearch 会自动应用安全强制执行,以便角色只能看到允许其访问的数据(用 SQL 术语来说,就是其*模式*)。

目录数据库

集群实例

在 SQL 中,目录数据库可以互换使用,表示一组模式,即多个表。在 Elasticsearch 中,可用的索引集被分组到一个集群中。语义也略有不同;数据库本质上是另一个命名空间(这可能会对数据的存储方式产生一些影响),而 Elasticsearch 集群是一个运行时实例,或者更确切地说是一组至少一个 Elasticsearch 实例(通常以分布式方式运行)。在实践中,这意味着虽然在 SQL 中,一个实例中可能有多个目录,但在 Elasticsearch 中,只能有一个*目录*。

集群

集群(联合)

传统上,在 SQL 中,*集群*指的是包含多个目录数据库(见上文)的单个 RDBMS 实例。同一个词也可以在 Elasticsearch 中重复使用,但其语义更加清晰。

虽然 RDBMS 通常只在一个机器上运行一个实例(*非*分布式),但 Elasticsearch 则相反,默认情况下是分布式和多实例的。

此外,Elasticsearch 集群可以以*联合*方式连接到其他集群,因此集群意味着

单个集群:: 多个 Elasticsearch 实例,通常分布在多台机器上,在同一个命名空间内运行。多个集群:: 多个集群,每个集群都有自己的命名空间,以联合设置的方式相互连接(请参阅跨集群搜索)。

正如我们所看到的,虽然概念之间的映射并非完全一一对应,语义也略有不同,但它们之间的共同点多于差异。事实上,由于 SQL 的声明性,许多概念可以透明地跨 Elasticsearch 移动,并且这两种术语可能会在其余材料中互换使用。