【技术实验】Elasticsearch 做数据库系列之一:表结构定义

简介: Elaticsearch 有非常好的查询性能和查询语法,在一定场景下可以替代RDBMS做为OLAP。《Elasticsearch 做数据库系列》系列文章通过类比SQL的概念,实验并学习Elasticsearch聚合DSL的语法和语义,并用 python 实现一个翻译器,能够使用 SQL 来完成 Elasticsearch 聚合DSL一样的功能。

Elaticsearch 有非常好的查询性能,以及强大的查询语法。在一定场合下可以替代RDBMS做为OLAP的用途。但是其官方查询语法并不是SQL,而是一种Elasticsearch独创的DSL。主要是两个方面的DSL:

这两个DSL说实话是不好学习和理解的,而且即便掌握了写起来也是比较繁琐的,但是功能却非常强大。本系列文章是为了两个目的:

  • 通过类比SQL的概念,实验并学习Elasticsearch聚合DSL的语法和语义
  • 用 python 实现一个翻译器,能够使用 SQL 来完成 Elasticsearch 聚合DSL一样的功能。这个小脚本可以在日常工作中做为一件方便的利器

基础Elasticsearch知识(比如什么是文档,什么是索引)这里就不赘述了。我们的重点是学习其查询和聚合的语法。在本章中,我们先来准备好样本数据。选择的样本数据是全美的股票列表点击查看
选择这份数据的原因是因为其维度比较丰富(ipo年份,版块,交易所等),而且有数字字段用于聚合(最近报价,总市值)。数据下载为csv格式点击查看,并且有一个导入脚本点击查看

下面是导入Elasticsearch的mapping(相当于关系型数据库的表结构定义):

"index": "not_analyzed", 
                "type": "string"
            }, 
            "symbol": {
                "index": "not_analyzed", 
                "type": "string"
            }, 
            "last_sale": {
                "index": "not_analyzed", 
                "type": "long"
            }, 
            "industry": {
                "index": "not_analyzed", 
                "type": "string"
            }
        }, 
        "_source": {
            "enabled": true
        }, 
        "_all": {
            "enabled": false
        }
    }
}

对于把 Elasticsearch 当作数据库来使用,默认以下几个设置

  • 把所有字段设置为 not_analyzed
  • _source 打开,这样就不用零散地存储每个字段了,大部分情况下这样更高效
  • _all 关闭,因为检索都是基于 k=v 这样字段已知的查询的

执行python import-symbol.py导入完成数据之后,执行:

GET http://127.0.0.1:9200/symbol/_count

返回:

{"count":6714,"_shards":{"total":3,"successful":3,"failed":0}}

可以看到文档已经被导入索引了。除了导入一个股票的列表,我们还可以把历史的股价给导入到数据库中。这个数据比较大,放在了网盘上下载(https://yunpan.cn/cxRN6gLX7f9md 访问密码 571c)(http://pan.baidu.com/s/1nufbLMx 访问密码 bes2)。执行python import-quote.py 导入:

  "_source": {
      "enabled": true
    }, 
    "properties": {
      "date": {
        "format": "strict_date_optional_time||epoch_millis",
        "type": "date"
      },
      "volume": {
        "type": "long"
      },
      "symbol": {
        "index": "not_analyzed",
        "type": "string"
      },
      "high": {
        "type": "long"
      },
      "low": {
        "type": "long"
      },
      "adj_close": {
        "type": "long"
      },
      "close": {
        "type": "long"
      },
      "open": {
        "type": "long"
      }
    }
  }

从 mapping 的角度,和表结构定义是非常类似的。除了_source,_all和analyzed这几个概念,基本上没有什么差异。Elasticsearch做为数据库最大的区别是 index/mapping 的关系,以及 index 通配这些。

作者:陶文,滴滴出行技术专家,在大型遗留系统的重构,持续交付能力建设,高可用分布式系统构建方面积累了丰富的经验。

加入钉钉技术讨论群

dingQR

阿里云Elasticsearch已正式发布啦,Elastic开源官方联合开发,集成5.5商业版本XPack功能,欢迎开通使用。
点击了解更多产品信息

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
5月前
|
SQL Java 数据库连接
除了JDBC,还有哪些常见的数据库访问技术?
除了JDBC,还有哪些常见的数据库访问技术?
485 2
|
12月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
阿里云PolarDB云原生数据库在TPC-C基准测试中,以20.55亿tpmC的成绩打破性能与性价比世界纪录。此外,国产轻量版PolarDB已上线,提供更具性价比的选择。
|
11月前
|
Cloud Native 关系型数据库 分布式数据库
|
12月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
11月前
|
存储 关系型数据库 分布式数据库
|
6月前
|
监控 Java 关系型数据库
HikariCP 高性能数据库连接池技术详解与实践指南
本文档全面介绍 HikariCP 高性能数据库连接池的核心概念、架构设计和实践应用。作为目前性能最优异的 Java 数据库连接池实现,HikariCP 以其轻量级、高性能和可靠性著称,已成为 Spring Boot 等主流框架的默认连接池选择。本文将深入探讨其连接管理机制、性能优化策略、监控配置以及与各种框架的集成方式,帮助开发者构建高性能的数据访问层。
624 8
|
6月前
|
监控 Java 关系型数据库
HikariCP 高性能数据库连接池技术详解与实践指南
本文档全面介绍 HikariCP 高性能数据库连接池的核心概念、架构设计和实践应用。作为目前性能最优异的 Java 数据库连接池实现,HikariCP 以其轻量级、高性能和可靠性著称,已成为 Spring Boot 等主流框架的默认连接池选择。本文将深入探讨其连接管理机制、性能优化策略、监控配置以及与各种框架的集成方式,帮助开发者构建高性能的数据访问层。
430 1
|
11月前
|
存储 关系型数据库 分布式数据库
|
6月前
|
SQL 数据管理 BI
数据库操作三基石:DDL、DML、DQL 技术入门指南
本文围绕数据库操作核心语言 DDL、DML、DQL 展开入门讲解。DDL 作为 “结构建筑师”,通过CREATE(建库 / 表)、ALTER(修改表)、DROP(删除)等命令定义数据库结构;DML 作为 “数据管理员”,以INSERT(插入)、UPDATE(更新)、DELETE(删除)操作数据表记录,需搭配WHERE条件避免误操作;DQL 作为 “数据检索师”,通过SELECT结合WHERE、ORDER BY、LIMIT等子句实现数据查询与统计。三者相辅相成,是数据库操作的基础,使用时需注意 DDL 的不可撤销性、DML 的条件约束及 DQL 的效率优化,为数据库学习与实践奠定基础。
|
7月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
289 0

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版