• 开始步入Elasticsearch的世界:初探elasticsearch


    前言

    最近我参与了一个重构项目,由于这个下项目并发量比较大,而且经常出现MQ丢数据的问题,所以工单特别多,为了解决这个历史遗留问题,我们开启了为期两个月的重构之旅。

    目前,这个项目刚刚启动,现在的核心架构,主要依托于redis,总的来说就是,所有的数据交互均依托于redis,不管是新增、查询、更新、删除等,都在redis上操作,然后通过一个DAL组件完成数据库数据同步。就是这样的架构,让我们在开发的时候简直要抓狂了,为了一个在数据库层面带索引的查询,我们需要从redis中拿出所有数据,然后从list中拿出我们需要的数据,感觉操作太复杂了,但是没办法呀,架构师就是这么定的。

    因为后期要把redis换成ES,所以我就提前把相关内容学起来,以备不时之需。

    elasticsearch

    简介

    elasticsearch是什么?根据它的字面意思,我们知道它和搜索有关,官方给出的解释是:

    Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 ElasticsearchLogstash Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

    简单来说,elasticsearch可以用以下几个关键字概括:

    • 分布式
    • 开源
    • 搜索和分析引擎

    做后端开发的小伙伴应该都清楚,在我们所有的系统中,基本上都是读多写少,所以真正制约一个系统性能是查询,是搜索,如果有一款组件可以解决数据搜索的问题,那系统的性能肯定会得到飞速提升,而elasticsearch就是这样一款组件。现阶段,很多企业都在用es,目前被提及最多的是携程,携程是大规模在使用,单日索引数据条数600亿,这就有点强了。

    好了,关于简介就先到这里,更多信息各位小伙伴可以自己检索,下面我们看下如何安装使用es

    下载

    访问官方网站,选择对应版本,然后下载。官方地址如下:

    https://www.elastic.co/cn/downloads/elasticsearch
    

    这里我直接选择windows,各位小伙伴根据自己的操作系统进行选择。

    安装

    下载过程还是很快的,下载完成后直接解压压缩文件即可:

    下面我们简单介绍下,elasticsearch的文件结构:

    • bin:存放可执行文件,包括脚本等,一般我们用的第三方组件都是这样的结构,比如zknacos

    • configelasticsearch的配置文件

    • jdk:这个各位小伙伴应该很熟悉,目前elasticsearch-7.14.0下的jdk版本比较高是16.0.1

    • ``libelasticsearch本身应该是基于java开发的,所以lib就是elasticsearch`要用到的包,其中也包括它自身应用的包

    • logs:存放运行日志,目前是空的

    • modules:这个应该是elasticsearch可以扩展的模块,默认情况下好多模块是不启用的

    • plugins:这个应该是存放第三方扩展组件的,目前该文件夹是空的。

    好了,elasticsearch的目录结构我们暂时就说这么多,下面看下如何启动elasticsearch

    启动

    启动elasticsearch也很简单,只需要执行bin文件夹下的脚本即可:

    elasticsearch.bat
    

    如果启动报错,检查下本地jdk版本,最好选择16及以上版本,因为我本地安装的就是16,所以启动没有报错,但是在控制台有如下提示:

    按照提示信息,elasticsearchJAVA_HOME需要设置未ES_JAVA_HOMEJAVA_HOME不推荐使用,应该是怕和jdk冲突吧。

    从启动日志我们看出以下几点:

    • 启动的时候会加载modules的文件,具体各个模块的用途,我们暂时先不研究

    • elasticsearch服务默认情况下会用到93009200,其中9300的端口协议未知,但是肯定不是http协议,9200是可以直接访问的:

    • 访问127.0.0.1:9200,如果返回值结果如上,则表明elasticsearch启动成功。

    测试

    安装启动完成后,127.0.0.1:9200访问也ok,说明es已经部署ok,下面我们对它进行一些简单测试。

    在前面的简介中,我们知道es对外提供了 REST 风格 API,所以我们下面的测试都是基于REST接口进行的,为了方便我们后面就直接用curl工具( 或者你也可以用postman)进行操作了。

    REST

    下面是rest协议的几种常用请求类别以及他们表示的含义,我们对es的操作也就是基于他们进行的:

    • PUT请求:表示更新
    • POST请求:表示写
    • DELETE请求:表示删除
    • GET请求:表示查询
    • HEAD请求:与GET类似,但是不返回消息体
    • OPTIONS请求:获取服务器支持的HTTP请求方法
    • TRACE请求:用来调试web服务器连接的HTTP方式
    • CONNECT 请求:把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户

    关于Rest协议我们暂时先说这么多,明天我们再详细说明。

    以上这些请求中,es只支持GET, PUT, DELETE, HEAD,其他的是不支持的:

    创建索引
    curl -X PUT 127.0.0.1:9200/syske
    

    返回结果:

    {
        "acknowledged":true,
        "shards_acknowledged":true,
        "index":"syske"
    }
    
    访问索引
    curl -X GET 127.0.0.1:9200/syske
    

    返回结果:

      {
    	"syske": {
    		"aliases": {},
    		"mappings": {},
    		"settings": {
    			"index": {
    				"routing": {
    					"allocation": {
    						"include": {
    							"_tier_preference": "data_content"
    						}
    					}
    				},
    				"number_of_shards": "1",
    				"provided_name": "syske",
    				"creation_date": "1629869376742",
    				"number_of_replicas": "1",
    				"uuid": "cFI0E1VxQrKyxNiH1qZBfA",
    				"version": {
    					"created": "7140099"
    				}
    			}
    		}
    	}
    }
    
    删除索引
    curl -X DELETE 127.0.0.1:9200/syske
    

    返回结果

    {
        "acknowledged":true
    }
    

    说明:索引就类似于我们传统数据库中的库,一个索引就对应一个数据库。

    总结

    今天我们主要分享了es的下载、安装和测试,整体内容很简单,也不需要任何复杂的配置,只要确保es可以在本地正常启动即可。好了,es的简单入门我们今天就先到这里,我们从明天开始学习es的其他基本术语和用法。

  • 相关阅读:
    Direct2D 画刷篇
    突破Windows的极限
    String--cannot convert from 'const char *' to 'LPTSTR'错误
    win32
    Direct2D 另一种与D3D创建类似的方法
    Direct2D CreateHwndRenderTarget 和 CreateDCRenderTarget
    win32
    win32
    Linux下的包管理命令|aptitude命令基本使用
    解决ERROR: No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/15195094.html
Copyright © 2020-2023  润新知