自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 网络如何通讯:tcp详解以及网络通信做了什么

网络人与人之间要有语言才可以进行通讯,语言就是一种可以共享数据信息的规则,那么计算机与计算机之间也要有统一的连接标准才能够完成相互通信,这个标准被称为互联网协议,而网络是就是物理连接介质(电平信号) + 互联网协议。互联网协议TCP/IP 五层...

2020-10-20 02:00:40 3476 2

原创 ElasticSearch:aggregations 聚合详解

概念ElasticSearch 中聚合的概念,通俗的讲就是将一些数据按照一些条件去统计一些信息,比如统计房间有多少,根据价格区间统计酒店数量这些功能。官网的解释:聚合可以进行各种组合以构建复杂的数据汇总。可以看作是在一组文档上建立分析信息的工作单元,统计一些文档集。聚合可以将一些独立的功能单元可以被混合在一起来满足你的需求,是一种单独的语法。kibana的可视化看板就是非常经典的聚合功能的体现。聚合ElasticSearch 中有许多不同类型的聚合,每种聚合都有自己的目的和输出,大致有四种基本类

2020-10-12 00:56:24 7872 1

原创 ElasticSearch:处理数据的关联关系 nested 父子文档

传统关系型数据库对关联关系的处理对于传统关系型数据库而言,处理数据的关联关系时比较正规的设计是范式化设计与非范式化设计。范式化 (Normalization)范式化设计的主要⽬标是“减少不必要的更新”,一般有三段范式,其实就是本着将两个关联数据模型之间通过主键的处理去划分属性字段,减少不必要的更新处理。关于范式化的概念可以自行去学习。反范式化 (Denormalization)范式化设计带来的一个弊端就是读操作可能会涉及很多表的处理,性能受影响,所以如果我们本来只需要关联对象的一个字段却还得

2020-10-05 16:59:12 1482

原创 ElasticSearch: xpack 密码安全验证

背景在阿里云部署了一台 ElasticSearch 节点,9200 端口直接暴露在了公网下,结果三天两头受到攻击,访问 kibana 老出现 redirect 重定向问题不能访问,查看日志索引都被人删除了,所以怀疑可能是因为被人恶意删除了,由此决定使用 xpack安全组件来保护 ElasticSearch。ElasticSearch 默认安装后,本身不提供任何安全保障,这也是被人攻击的原因之一我们为了公网可以访问,配置了 server.host 为 0.0.0.0 这也是被人攻击的原因之一xpa

2020-09-25 00:20:44 7132

原创 ElasticSearch:性能优化 searchTemplate查询模板

搜索场景有些时候,对于一些搜索刚入门的同学来说,提升 ElasticSearch 的搜索性能以及如何应对各种场景下的复杂搜索来采用最合适的 DSL,,无疑是非常苦难的。而且对于公司来说,最重要的是如何能够快速的产生业务价值,所以一般差不多点的公司都会有专门的 搜索优化团队来出模板,业务同学只要调用特定的客户端便可以。ElasticSearch 为了提升专业性,专门提供了一种查询API,也就是接下来要介绍的 searchTemplate。SearchTemplateSearchTemplate 是一个

2020-09-17 00:04:10 960

原创 ElasticSearch:深入搜索 QUERY API

Search APIElasticSearch 为了搜索提供了一些原始的 API,通过 HTTP 的方式去请求服务端获取数据,我们这里介绍的是通过请求体来获取数据的API,也就是 Request Body Search API。基于 Term 的查询在 ElasticSearch 中,Term 词项是表达语义的最小单位,无论是倒排索引的建立以及搜索分词都有 Term 词项的概念。基于 Term 词项的查询,意思就是将搜索条件作为一整个词项来进行查询,不会进行任何的分词处理(大小写处理也不会),比如

2020-09-14 23:59:41 1825

原创 ElasticSearch:Constant Score 取消忽略搜索算分以及算分规则

ElasticSearch 查询开销ElasticSearch 在查询一个文档的时候,默认会根据倒排索引词项的匹配程度来做一个相关性的算分,每个文档都会做这个分析过程,如果文档数很庞大,这个过程其实是非常消耗性能的,那么是不是有什么办法可以取消掉这个算法过程Constant ScoreElasticSearch 提供了一个查询的 API : Constant Score利用这个API 可以忽略掉算分过程。它的原理是将查询转换成为一个filter 过滤,filter 查询是会走缓存的,所以性能提升是相

2020-09-10 00:01:53 5020

原创 ElasticSearch 索引模板 Index Templates 与 Dynamic Template

索引模板在类似日志的场景下,索引模板是非常有效的。一般日志是需要每天都自动生成一个模板的,这样对数据的管理以及集群的性能容灾等都是一个非常有用的帮助。但是每天根据日期都生成一个索引有一个问题,那就是索引的配置,如果每天都是我们自己去手动创建当天的索引,会非常麻烦并且容易出错,所幸的是,ElasticSearch 已经考虑到了这一点并且提出了索引模板的概念,配置好模板之后,只需要每天根据模板去生成索引便好。Index TemplatesIndex Templates 就是 ElasticSearch 帮

2020-09-08 00:10:09 1933

原创 ElasticSearch: Search API 查询用法详解

Search APIElasticSearch 为了搜索提供了一些原始的 API,主要是有两大类URL SearchURL Search 类似 http 的get请求,是将请求参数放到 URL 中,比如之前使用的查询文档的接口 get index/_doc/1?prettyRequest Body Search是以JSON的格式去请求参数,有些类似 http 的 post 请求,是将参数封装在请求体中,这种格式更加符合我们的使用期望,查询场景以及满足的查询条件也丰富。URL Search请

2020-09-06 00:37:29 7194

原创 ElasticSearch 分词器、自定义分词器以及倒排索引

倒排索引索引(正排索引)索引或者叫做正排索引的概念,想必都不陌生,有个非常经典的例子,就是书本的目录,索引就类似目录,你可以根据目录的页码很方便的找到你所要找到的内容地址。如上这张图片,我们可以很方便的根据目录(索引)来找到这一章节的位置,这就是正排索引,关系型数据库用的就是正排索引,mysql 的 b数构建主键索引树时,其实就是主键ID指向地址。倒排索引倒排索引的出现,是为了解决海量数据搜索的问题出现的。一个搜索引擎,如果有几十亿的数据,你想从这几十亿的数据中捞出你想要的数据,如果按照索引的概

2020-09-03 00:34:04 2140

原创 ElasticSearch Mapping 设置详解以及dynamic mapping、自定义mapping

概念Mapping 映射,描述了文档字段的属性以及每个字段的数据类型,比如 string, integer 或 date —以及Lucene是如何索引和存储这些字段的,这就是mapping 映射的功能。这样说可能有些偏概念,我们可以这样来理解,对于mysql数据库来说,每一个表都有一个 schemal 定义,mapping 就是类似 数据库的 schemal,它来描述 索引文档的字段信息。mapping 类似数据库中的 schemal 定义- 定义索引文档中的字段的名称- 定义索引文档中字段的类

2020-08-30 17:12:30 3546

原创 ElasticSearch 初识文档与索引、分片

文档Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档,文档是ElasticSearch 可搜索数据的最小单位。- 文档类似数据库的一条数据记录,有键值对- 文档可以是一条日志,一个电影的描述信息等Elasticsearch 使用 JSON 作为文档的序列化格式,也就是说,文档数据会被 ElasticSearch 以 JSON 的方式存储。- JSON 对象由字段以及属性组成- JSON 对象的每个字段都有对应的字段类型(字符串 / 数值 / 布尔 / 日起 / 范围

2020-08-26 00:04:08 2748

原创 ELK 之 Logstash 安装以及 MovieLens数据集的导入

下载地址官网:https://www.elastic.co/cn/downloads/logstash国内镜像:https://www.newbe.pro/Mirrors/Mirrors-Logstash/官网的下载速度是跟乌龟爬的一样,最好还是使用国内的一个镜像,注意下载的时候要与ElasticSearch的版本匹配安装官网是有详细的安装教程的,按照这个教程去走基本就可以启动成功下载解压[root@iZbp17kchfu5kwypzjeyqiZ logstash]# tar xvf l

2020-08-18 00:20:24 2060

原创 ELK 之 Kibana 安装以及使用

环境kibana 是与 ElasticSearch 绑定的,所以要想使用kibana,必须先装有 ElasticSearchElasticSearch下载地址官网:https://www.elastic.co/cn/downloads/kibana国内镜像:https://www.newbe.pro/Mirrors/Mirrors-Kibana/官网的下载速度是跟乌龟爬的一样,最好还是使用国内的一个镜像,注意下载的时候要与ElasticSearch的版本匹配安装官网是有详细的安装教程的,

2020-08-16 23:37:07 1961

原创 ElasticSearch安装以及使用

环境ElasticSearch 是用java写的,所以安装 ElasticSearch 之前需要先有java环境jdk环境 设置 $JAVA_HOMEElasticSearch各个版本对java的依赖ElasticSearch 5 需要 java 8 以上的版本ElasticSearch 从 6.5 开始支持 java 11ElasticSearch 7 开始内置了java 环境下载地址官网:https://www.elastic.co/cn/downloads/elasticsea

2020-08-15 01:57:34 2363

原创 elasticsearc简介

简介Elasticsearch 是一个开源的搜索分析引擎,建立在一个全文搜索引擎库 Lucene 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。Elasticsearch 使用 Java 编写,它的内部使用 Lucene 做索引与搜索,目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API 来与客户端交互。Elasticsearch为所有类型的数据提供实时搜索和分析。无论是结构化文本还是非结构化文本,数字数据或地理

2020-08-13 00:14:59 2449

原创 mysql调优:SHOW PROFILES 剖析sql执行详情

使用介绍SHOW PROFILE 命令是在 MYSQL 5.1 之后的版本中引入的,来源于开源社区中的Jeremy Cole 的贡献。这条命令会在服务器上执行的所有语句都去测量其耗费的时间和其他的一些查询执行状态变更的相关数据,这些测量的数据目前是存储在 information_schema.PROFILING 表中。默认 SHOW PROFILE 是禁用的,但是可以通过服务器变量在会话级别动态修改,注意这里是会话级别的,也就是本次会话结束这个设置就失效了。mysql> set profilin

2020-08-05 00:22:46 2655

原创 mysql调优:SHOW STATUS 查询计数器统计,定位性能问题

介绍MYSQL 的 SHOW STATUS 命令会返回一些计数器,既有服务器级别的全局计数器,也有基于某个连接的会话级别的计数器,这在定位一些性能问题时时很好用的一个小工具,不过 SHOW STATUS 返回的只是一些计数,并且还是只读的,并不会剖析性能,所以需要在具体的业务场景下结合一些信息去定位问题,比如可以查询 Queries 总共执行了多少次查询。SHOW STATUS 会返回一张临时表,这张表中有很多参数,一些参数并不是我们想要看的,所以要结合 where 条件来过滤一下,比如 统计一下总共

2020-08-03 08:10:24 2695

原创 mybatis源码解读(九):reflection 包下 MetaObject、Reflector、MetaClass详解

功能reflection 包下的类主要负责的功能是 mybatis 反射实例化对象以及赋值,mybatis之所以可以将返回结果封装成pojo实体类,都是通过reflection包下的相关类通过反射去完成这个操作的。reflection 包下有几个核心的类,MetaObject、Reflector、MetaClass、以及ObjectWrapper。它的这个设计思路是,首先将一个class的所有的字段、方法、构造等信息全部都存在 reflector 中,然后再通过 metaObject 的静态方法构造一个

2020-07-13 00:45:46 2810 1

原创 mybatis源码解读(八):Statement 语句执行详解

功能mybatis执行语句的操作是由StatementHandler完成的,它会去获取连接并且根据你配置的一些参数来准备好连接数据库的statment语句,然后通过StatementHandler执行语句并且将结果根据你配置的ResultMap封装成为你想要的实体类。StatementHandler完成的操作:获取连接,根据配置准备数据库可执行的statement语句。执行语句通过ResultSetHandler根据resultMapping封装成为你想要的的实体对象UMLStateme

2020-07-08 00:58:35 3743

原创 mybatis源码解读(七):Executor详解

功能在 mybatis 中执行一次查询时,有个非常重要的类就是 Executor,Executor 有些类似是mybatis心脏一样的作用,它负责这次执行操作的资源调度、流程执行等功能。这个类是由几个实现类的,在前边已经分析过,mybatis默认的策略是 SimpleExecutor ,它完全继承自 BaseExecutor,没有特殊的地方。Execute所要完成的工作:根据当前的配置的id找到MappedStatement,然后处理sqlSource拿到BoundSource(),在这里会顺便去检

2020-07-03 00:22:19 1718

原创 mybatis源码解读(六):SqlSession详解以及事务工厂

功能SqlSession 是使用 MyBatis 的主要 Java 接口,我们可以通过它来执行一些命令,获取映射器示例和管理事务,所以可以将SqlSession看成是管理mybatis的一次会话,不过它也确实是会话的意思,一次api请求维护一个SqlSession。 //将配置文件通过io流的方式打开 InputStream inputStream= Resources.getResourceAsStream("org/apache/ibatis/test/MyBatisConf

2020-06-23 01:04:41 2060

原创 mybatis源码解读(五):XMLScriptBuilder详解-各种SQLNODE

功能动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦,诸如 foreach、set这些标签,在我们写sql的时候会提供很大的方便。mybatis 解析动态sql的这种能力是由 XMLScriptBuilder 类完成的。第一步:解析sql,区别当前的sql是静态文本sql还是带标签的动态sql,

2020-06-21 01:48:09 1927 1

原创 mybatis源码解读(四):XMLStatementBuilder详解

功能XMLMapperBuilder 中会将 mapper 映射文件中除 CRUD 外的标签解析验证,轮到CRUD标签的时候,是交给专门的类去做处理的,也就是XMLStatementBuilder。第一步:解析一些较基本的属性,比如 id、databaseId(多数据库配置)、useCache(是否启动二级缓存)、flushCache(只要语句调用就刷新缓存)等。第二步;替换sql中的include标签,将sql处理成为一个完整的sql第三步:处理主键生成策略,mybatis 默认使用的是 NoKe

2020-06-19 00:41:57 1852

原创 mybatis源码解读(三):XMLMapperBuilder详解

功能在之前的工作中 XMLConfigBuilder 已经将 configuration 配置信息都解析过了,接下来就是mapper映射文件的解析。XMLMapperBuilder是专门负责解析mapper文件的。第一步:首先根据你配置的mapper文件的路径,resouce、url或者是class、package来分别区分对待找到路径,如果是resource、url会有一个流资源的读取来解析,class与package则是另一种方式,通过MapperProxy代理来完成。第二步:获取到资源,就是对常

2020-06-07 01:28:04 3053

原创 mybatis源码解读(二):XMLConfigBuilder详解

功能XMLConfigBuilder要完成的最主要的功能其实就是解析xml配置文件,其中分为了这几步第一步,是构建一个叫做 XPathParser 的类,这个类主要是负责对xml的声明校验以及将xml解析成为document,mybatis解析xml用的是原生的dom解析。第二步,得到document之后就是configuration的构造,首先会通过XPathParser 解析document的每个节点,调用的是XPath将每个节点解析成为XNode第三步,得到XNode之后就是解析配置文件中的配

2020-05-31 02:00:22 1810

原创 mybatis源码解读:builder构建者(一)

其实一个框架或者是系统要想运转,支撑他们运行的规则很重要,比如游戏如果没有游戏规则,那么就会变得毫无游戏体验,乃至一个社团或者公司可以健康高速的运转,也离不开一个强壮的并且必须要遵守的规则,如果没有奖罚措施,公司倒闭是迟早的事情。对于mybatis来说,如何让一段xml配置可以识别为它自己可以理解的东西,这其实就是mybatis的开发团队定制好的一段规则,然后让大家来遵守,如果是你自己写框架,那么这个规则就是由你来定制了,哈哈。builderbuilder下的类是mybatis解析xml的核心。.

2020-05-29 00:59:27 1651

原创 idea如何向下显示出一个父类的所有子类实现UML图

Idea的功能还是强大的,在翻看大型源码的时候,如果你能够很直白的看到一个类的所有子类实现,无疑对你阅读源码是一个不错的帮助,今天就介绍一下idea如何显示一个类的所有子类实现层级图,以mybatis为例子。首先我们要找到最上级的那个父类,然后右键点击Show Diagram 正常的话我们可以看到一个孤零零的类然后重点来了,在它上边右键,点击 show implementations,然后可以看到所有的实现类,注意这里可以shift全选正常的话我们就可以看到这样的页面了但是这样看着也不美观

2020-05-26 01:17:47 5600 7

原创 MyBatis源码解读:概要

Mybatis简介Mybatis是一款优秀的持久层框架,在国内而言还是比较受欢迎的,无论是分布式还是微服务还是兴起的云原生在与数据库的交互这一层大多数人还是会很愿意使用Mybaits来集成的,它有丰富的社区以及各种场景的现有解决方案,已经很成熟,所以翻阅一下它的源码知道他的运行原理是很有价值必要的。Mybatis的架构其实Mybatis的源码是很简单的,架构设计也很清晰明了,作为与数据库直接...

2020-01-24 22:56:40 268

原创 linux服务安装

ftp服务器安装协议:ftp server软件包:vsftpd端口:21(主动) 20(被动)配置文件: /etc/vsftpd/vsftpd.conf (yum安装的基础服务几乎都在etc目录下)服务端安装yum -y install vsftpd 安装vsftpdsystemctl start vsftpd 启动vsftpdsystemctl enable vsftpd ...

2019-12-29 21:54:17 340

原创 linux包管理

包管理:linux一般有两种包:源码包: 安装前需要进行编译成为二进制包才能使用 末尾一般常用.tar.gz来命名二进制包:已编译 一般是rpm结尾命名安装命令:centos一般为rpm 或者 yumuname -m 为查看本机的系统位数版本系统基础的源yum repolist 查看当前机器依赖的源只有后缀为.repo的文件才才是源Loaded plugins: fa...

2019-12-29 21:26:31 253

原创 linux重定向

重定向重定向有些类似java的io流,是将输入输出的信息重新到一个文件中,重是对输出输入信息的重定向,而不是对文件的重定向使用标识符为 >date > data.txt 本来这个日期是要打印到终端,现在使用 > 将其重定向到一个文件中,于是这个日期便写入到这个文件中,实际是以IO的操作在执行date > /dev/pts/3 是将日期重定向到终端中,而终端就是一个...

2019-12-29 21:12:49 346

原创 linux进程指令

进程:linux中的每一个可执行文件都相当于一个小的程序,这些程序在平时只占用disk空间,但是当他们运行的时候,便会产生一个进程,会占用系统的资源,每一个进程都有一个PID(process Identifier)进程标识符,PPID(parent process ID)状态:运行running还是等待runnable 还是休眠sleeping计算机资源是四个核心:(disk 硬盘空间 dis...

2019-12-29 20:01:21 472

原创 linux的一些基本操作命令

创建目录mkdir /home/damengsheng/Desktop 在Desktop目录下创建一个文件 tap 键补全-v 创建的同时补全 dir{2…3} 创建多个文件-p 创建多个文件ls 查看当前目录下的所有文件 属性 /home 查看文件目录下的所有文件 ll 详细显示(ls -l)-a 显示全部文件(开始的文件都是隐藏文件 .当前目录 … 上一级目录)tty 终端...

2019-12-29 19:48:44 152

原创 linux文件系统

linux 一切皆文件,文件都是通过线程来访问的,而线程需要有身份权限,也就是属于一个用户,用户用来划分他能够访问的文件,有一个主组以及很多的附加组,比如apache,也是一个用户。文件目录:desktop 桌面目录:桌面上的文件都放在这个目录下,包括一些隐藏的文档目录log out 弹出系统界面linux的文档存储是以二叉树的形式存储的,最上方的目录 叫做根目录 / ,/home 每一...

2019-12-29 19:31:27 104

原创 Dom解析EntityResolver以及mybatis解析xml

EntityResolver我们都知道,xml一般都有一份声明,是用来规范xml标签语法的,EntityResolver的作用就是自定义验证或者(不验证)这份声明。xml解析过程中会首先读取声明,然后根据声明的链接去找远程dtd定义,如果网络不好这个过程可能会报错,所以一般我们是将dtd定义放到本地,然后就可以通过注册一个实现了EntityResolver的自定义解析器去解析本地的dtd定义,...

2019-12-29 18:19:25 534 9

原创 sax解析xml详解

sax与dom的区别xml(或SGML)API主要有两种形式:基于树的API,最常见的就是w3c的dom解析,java原生中也集成了这种解析方式,这种方式会将一个xml解析成为树的形式来处理并且是将整个xml放到内存中。基于事件的API,也就是本次介绍的sax(Simple API for XML),它是直接通过处理不同的事件回调解析来处理xml,并不会建立维护一个内部的树,比如以下这种。...

2019-12-25 00:41:25 3738

转载 IO多路复用之select、poll、epoll详解

转载路径:https://www.cnblogs.com/jeakeven/p/5435916.htmlIO多路复用之select、poll、epoll详解目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select...

2019-11-24 22:40:51 126

转载 Netty高性能原理和框架架构解析

转载地址:https://www.cnblogs.com/imstudy/p/9908791.html1、引言Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。本文作者的...

2019-11-24 22:37:38 156

转载 深入浅出MappedByteBuffer

作者:占小狼转载链接:https://www.jianshu.com/p/f90866dcbffc来源:简书前言java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。内存管理在深...

2019-11-24 22:33:59 223

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除