doris:Elasticsearch
Elasticsearch Catalog 除了支持自动映射 ES 元数据外,也可以利用 Doris 的分布式查询规划能力和 ES(Elasticsearch) 的全文检索能力相结合,提供更完善的 OLAP 分析场景解决方案:
-
ES 中的多 index 分布式 Join 查询。
-
Doris 和 ES 中的表联合查询,更复杂的全文检索过滤。
使用限制
支持 Elasticsearch 5.x 及以上版本。
创建 Catalog
CREATE CATALOG es PROPERTIES ("type"="es","hosts"="http://127.0.0.1:9200"
);
因为 Elasticsearch 没有 Database 的概念,所以连接 ES 后,会自动生成一个唯一的 Database:default_db
。
并且在通过 SWITCH 命令切换到 ES Catalog 后,会自动切换到 default_db
。无需再执行 USE default_db
命令。
参数说明
参数 | 是否必须 | 默认值 | 说明 |
---|---|---|---|
hosts | 是 | ES 地址,可以是一个或多个,也可以是 ES 的负载均衡地址 | |
user | 否 | 空 | ES 用户名 |
password | 否 | 空 | 对应用户的密码信息 |
doc_value_scan | 否 | true | 是否开启通过 ES/Lucene 列式存储获取查询字段的值 |
keyword_sniff | 否 | true | 是否对 ES 中字符串分词类型 text.fields 进行探测,通过 keyword 进行查询。设置为 false 会按照分词后的内容匹配 |
nodes_discovery | 否 | true | 是否开启 ES 节点发现,默认为 true,在网络隔离环境下设置为 false,只连接指定节点 |
ssl | 否 | false | ES 是否开启 https 访问模式,目前在 fe/be 实现方式为信任所有 |
mapping_es_id | 否 | false | 是否映射 ES 索引中的 _id 字段 |
like_push_down | 否 | true | 是否将 like 转化为 wildchard 下推到 ES,会增加 ES cpu 消耗 |
include_hidden_index | 否 | false | 是否包含隐藏的索引,默认为 false。 |
提示
-
认证方式目前仅支持 Http Basic 认证,并且需要确保该用户有访问:
/_cluster/state/、_nodes/http
等路径和 Index 的读权限; 集群未开启安全认证,用户名和密码不需要设置。 -
5.x 和 6.x 中一个 Index 中的多个 type 默认取第一个。
列类型映射
ES Type | Doris Type | Comment |
---|---|---|
null | null | |
boolean | boolean | |
byte | tinyint | |
short | smallint | |
integer | int | |
long | bigint | |
unsigned_long | largeint | |
float | float | |
half_float | float | |
double | double | |
scaled_float | double | |
date | date | 仅支持 default/yyyy-MM-dd HH:mm:ss/yyyy-MM-dd/epoch_millis 格式 |
keyword | string | |
text | string | |
ip | string | |
constant_keyword | string | |
wildcard | string | |
nested | json | |
object | json | |
other | unsupported |
Array 类型
Elasticsearch 没有明确的数组类型,但是它的某个字段可以含有 0 个或多个值。
为了表示一个字段是数组类型,可以在索引映射的 _meta 部分添加特定的doris
结构注释。
对于 Elasticsearch 6.x 及之前版本,请参考 _meta。
举例说明,假设有一个索引 doc
包含以下的数据结构:
{"array_int_field": [1, 2, 3, 4],"array_string_field": ["doris", "is", "the", "best"],"id_field": "id-xxx-xxx","timestamp_field": "2022-11-12T12:08:56Z","array_object_field": [{"name": "xxx","age": 18}]
}
该结构的数组字段可以通过使用以下命令将字段属性定义添加到目标索引映射的_meta.doris
属性来定义。
# ES 7.x and above
curl -X PUT "localhost:9200/doc/_mapping?pretty" -H 'Content-Type:application/json' -d '
{"_meta": {"doris":{"array_fields":["array_int_field","array_string_field","array_object_field"]}}
}'# ES 6.x and before
curl -X PUT "localhost:9200/doc/_mapping/_doc?pretty" -H 'Content-Type: application/json' -d '
{"_meta": {"doris":{"array_fields":["array_int_field","array_string_field","array_object_field"]}}
}
array_fields
:用来表示是数组类型的字段。
最佳实践
过滤条件下推
ES Catalog 支持过滤条件的下推:过滤条件下推给 ES,这样只有真正满足条件的数据才会被返回,能够显著的提高查询性能和降低 Doris 和 Elasticsearch 的 CPU、memory、IO 使用量
下面的操作符 (Operators) 会被优化成如下 ES Query:
SQL syntax | ES 5.x+ syntax |
---|---|
= | term query |
in | terms query |
> , < , >= , ⇐ | range query |
and | bool.filter |
or | bool.should |
not | bool.must_not |
not in | bool.must_not + terms query |
is_not_null | exists query |
is_null | bool.must_not + exists query |
esquery | ES 原生 json 形式的 QueryDSL |
启用列式扫描优化查询速度 (enable_docvalue_scan=true)
设置 "enable_docvalue_scan" = "true"
开启后 Doris 从 ES 中获取数据会遵循以下两个原则:
-
尽力而为: 自动探测要读取的字段是否开启列式存储 (doc_value: true),如果获取的字段全部有列存,Doris 会从列式存储中获取所有字段的值
-
自动降级: 如果要获取的字段只要有一个字段没有列存,所有字段的值都会从行存
_source
中解析获取
优势
默认情况下,Doris On ES 会从行存也就是_source
中获取所需的所有列,_source
的存储采用的行式+json 的形式存储,在批量读取性能上要劣于列式存储,尤其在只需要少数列的情况下尤为明显,只获取少数列的情况下,docvalue 的性能大约是_source 性能的十几倍
注意
-
text
类型的字段在 ES 中是没有列式存储,因此如果要获取的字段值有text
类型字段会自动降级为从_source
中获取 -
在获取的字段数量过多的情况下 (
>= 25
),从docvalue
中获取字段值的性能会和从_source
中获取字段值基本一样 -
keyword
类型字段由于ignore_above参数的限制,对于超过该限制的长文本字段会忽略,所以可能会出现结果为空的情况。此时需要关闭enable_docvalue_scan
,从_source
中获取结果。
探测 Keyword 类型字段
设置 "enable_keyword_sniff" = "true"
在 ES 中可以不建立 index 直接进行数据导入,这时候 ES 会自动创建一个新的索引,针对字符串类型的字段 ES 会创建一个既有text
类型的字段又有keyword
类型的字段,这就是 ES 的 multi fields 特性,mapping 如下:
"k4": {"type": "text","fields": {"keyword": { "type": "keyword","ignore_above": 256}}
}
对 k4 进行条件过滤时比如=,Doris On ES 会将查询转换为 ES 的 TermQuery
SQL 过滤条件:
k4 = "Doris On ES"
转换成 ES 的 query DSL 为:
"term" : {"k4": "Doris On ES"}
因为 k4 的第一字段类型为text
,在数据导入的时候就会根据 k4 设置的分词器 (如果没有设置,就是 standard 分词器) 进行分词处理得到 doris、on、es 三个 Term,如下 ES analyze API 分析:
POST /_analyze
{"analyzer": "standard","text": "Doris On ES"
}
分词的结果是:
{"tokens": [{"token": "doris","start_offset": 0,"end_offset": 5,"type": "<ALPHANUM>","position": 0},{"token": "on","start_offset": 6,"end_offset": 8,"type": "<ALPHANUM>","position": 1},{"token": "es","start_offset": 9,"end_offset": 11,"type": "<ALPHANUM>","position": 2}]
}
查询时使用的是:
"term" : {"k4": "Doris On ES"
}
Doris On ES
这个 term 匹配不到词典中的任何 term,不会返回任何结果,而启用enable_keyword_sniff: true
会自动将k4 = "Doris On ES"
转换成k4.keyword = "Doris On ES"
来完全匹配 SQL 语义,转换后的 ES query DSL 为:
"term" : {"k4.keyword": "Doris On ES"
}
k4.keyword
的类型是keyword
,数据写入 ES 中是一个完整的 term,所以可以匹配
开启节点自动发现,默认为 true(nodes_discovery=true)
设置 "nodes_discovery" = "true"
当配置为 true 时,Doris 将从 ES 找到所有可用的相关数据节点 (在上面分配的分片)。如果 ES 数据节点的地址没有被 Doris BE 访问,则设置为 false。ES 集群部署在与公共 Internet 隔离的内网,用户通过代理访问
ES 集群是否开启 HTTPS 访问模式
设置 "ssl" = "true"
目前会 FE/BE 实现方式为信任所有,这是临时解决方案,后续会使用真实的用户配置证书
查询用法
完成在 Doris 中建立 ES 外表后,除了无法使用 Doris 中的数据模型 (Rollup、预聚合、物化视图等) 外并无区别
基本查询
select * from es_table where k1 > 1000 and k3 ='term' or k4 like 'fu*z_'
扩展的 esquery(field, QueryDSL)
通过esquery(field, QueryDSL)
函数将一些无法用 sql 表述的 query 如 match_phrase、geoshape 等下推给 ES 进行过滤处理,esquery
的第一个列名参数用于关联index
,第二个参数是 ES 的基本Query DSL
的 json 表述,使用花括号{}
包含,json 的root key
有且只能有一个,如 match_phrase
、geo_shape
、bool
等
match_phrase
查询:
select * from es_table where esquery(k4, '{"match_phrase": {"k4": "doris on es"}}');
geo
相关查询:
select * from es_table where esquery(k4, '{"geo_shape": {"location": {"shape": {"type": "envelope","coordinates": [[13,53],[14,52]]},"relation": "within"}}}');
bool
查询:
select * from es_table where esquery(k4, ' {"bool": {"must": [{"terms": {"k1": [11,12]}},{"terms": {"k2": [100]}}]}}');
时间类型字段使用建议
提示
仅 ES 外表适用,ES Catalog 中自动映射日期类型为 Date 或 Datetime
在 ES 中,时间类型的字段使用十分灵活,但是在 ES 外表中如果对时间类型字段的类型设置不当,则会造成过滤条件无法下推
创建索引时对时间类型格式的设置做最大程度的格式兼容:
"dt": {"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}
在 Doris 中建立该字段时建议设置为date
或datetime
,也可以设置为varchar
类型,使用如下 SQL 语句都可以直接将过滤条件下推至 ES:
select * from doe where k2 > '2020-06-21';select * from doe where k2 < '2020-06-21 12:00:00'; select * from doe where k2 < 1593497011; select * from doe where k2 < now();select * from doe where k2 < date_format(now(), '%Y-%m-%d');
注意:
-
在 ES 中如果不对时间类型的字段设置
format
, 默认的时间类型字段格式为strict_date_optional_time||epoch_millis
-
导入到 ES 的日期字段如果是时间戳需要转换成
ms
, ES 内部处理时间戳都是按照ms
进行处理的,否则 ES 外表会出现显示错误
获取 ES 元数据字段 ID
导入文档在不指定 _id
的情况下,ES 会给每个文档分配一个全局唯一的 _id
即主键,用户也可以在导入时为文档指定一个含有特殊业务意义的 _id
;
如果需要在 ES 外表中获取该字段值,建表时可以增加类型为varchar
的_id
字段:
CREATE EXTERNAL TABLE `doe` (`_id` varchar COMMENT "",`city` varchar COMMENT ""
) ENGINE=ELASTICSEARCH
PROPERTIES (
"hosts" = "http://127.0.0.1:8200",
"user" = "root",
"password" = "root",
"index" = "doe"
}
如果需要在 ES Catalog 中获取该字段值,请设置 "mapping_es_id" = "true"
注意:
-
_id
字段的过滤条件仅支持=
和in
两种 -
_id
字段必须为varchar
类型
获取全局有序的查询结果
在相关性排序、优先展示重要内容等场景中 ES 查询结果按照 score 来排序非常有用。Doris 查询 ES 为了充分利用 MPP 的架构优势,是按照 ES 索引的 shard 的分布情况来拉取数据。
为了得到全局有序的排序结果,需要对 ES 进行单点查询。可以通过 session 变量 enable_es_parallel_scroll
(默认为 true)来控制。
当设置 enable_es_parallel_scroll=false
时,Doris 将会向 ES 集群发送不带 shard_preference
和 sort
信息的 scroll
查询,从而得到全局有序的结果。
注意: 在查询结果集较大时,谨慎使用。
修改 scroll 请求的 batch 大小
scroll
请求的 batch
默认为 4064。可以通过 session 变量 batch_size
来修改。
相关文章:
doris:Elasticsearch
Elasticsearch Catalog 除了支持自动映射 ES 元数据外,也可以利用 Doris 的分布式查询规划能力和 ES(Elasticsearch) 的全文检索能力相结合,提供更完善的 OLAP 分析场景解决方案: ES 中的多 index 分布式 Join 查询。 Doris 和 ES 中的表联合…...
JetBrains学生申请
目录 JetBrains学生免费授权申请 IDEA安装与使用 第一个JAVA代码 1.利用txt文件和cmd命令运行 2.使用IDEA新建项目 JetBrains学生免费授权申请 本教程采用学生校园邮箱申请,所以要先去自己的学校申请校园邮箱。 进入JetBrains官网 点击立即申请,然…...
PDFMathTranslate安装使用
PDF全文翻译!!!! PDFMathTranslate安装使用 它是个啥 PDFMathTranslate 可能是一个用于 PDF 文件的数学公式翻译 工具。它可能包含以下功能: 提取 PDF 内的数学公式 将数学公式转换成 LaTeX 代码 翻译数学公式的内…...
清华北大推出的 DeepSeek 教程(附 PDF 下载链接)
清华和北大分别都有关于DeepSeek的分享文档,内容非常全面,从原理和具体的应用,大家可以认真看看。 北大 DeepSeek 系列 1:提示词工程和落地场景.pdf 北大 DeepSeek 系列 2:DeepSeek 与 AIGC 应用.pdf 清华 Deep…...
2025-03-09 学习记录--C/C++-PTA 练习11-4 字符定位(最后一次找到的字符)
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 裁判测试程序样例: #include <stdio.h> char *match(char *s, char ch); int main(void …...
C语言数据结构之顺序表
目录 1.线性表 2.顺序表 2.1.静态顺序表 2.2.动态顺序表 2.2.1.初始化 2.2.2.清空顺序表 2.2.3.扩容+尾插 2.2.4.尾出函数 2.2.5.头插函数 2.2.6.头出函数 2.2.7.在中间位置插入 2.2.8.删除中间位置数据 2.2.9.查找函数 2.2.10.总结 3.OJ例题 3.1.合…...
【Git】合并冲突
合并冲突 可是,在实际分支合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题。 为了演示这问题,创建一个新的分支 dev1 ,并切换至目标分支,我们可以使用 git checkout -b dev1 一步…...
【每日学点HarmonyOS Next知识】Web跨域资源、Web长按菜单、Web拦截请求、禁止录屏、Base64图片宽高
1、HarmonyOS Web组件本地资源跨域问题? 关于资源跨域问题的解决,可以参考以下官网文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-cross-origin-V5 方法一 为了使Web组件能够成功访问跨域资源,开…...
高效数据分析实战指南:Python零基础入门
高效数据分析实战指南 —— 以Python为基石,构建您的数据分析核心竞争力 大家好,我是kakaZhui,从事数据、人工智能算法多年,精通Python数据分析、挖掘以及各种深度学习算法。一直以来,我都发现身边有很多在传统行业从…...
【语料数据爬虫】Python爬虫|批量采集征集意见稿数据(1)
前言 本文是该专栏的第5篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 在本文中,笔者将主要来介绍基于Python,来实现批量采集“征集意见稿”数据。同时,本文也是采集“征集意见稿”数据系列的第1篇。 采集相关数据的具体细节部分以及详细思路逻辑…...
电力场景绝缘子缺陷分割数据集labelme格式1585张4类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):1585 标注数量(json文件个数):1585 标注类别数:4 标注类别名称:["broken part","broken insulat…...
《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》
类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit,而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的(符合规定的显示表达式) 注:一般情况下…...
uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!
此文章懒得排版了,为了找出这个bug, 星期六的晚上我从9点查到0点多,此时我心中一万个草泥马在崩腾,超级想骂人!!!!!!!!! uniCloud 不想…...
【论文阅读】VAD: Vectorized Scene Representation for Efficient Autonomous Driving
一、介绍 VAD是华科团队设计的一个端到端无人驾驶框架,针对传统的无人驾驶框架的模块化设计的问题,该算法使用向量化的策略进行了端到端的实现。传统的模块化设计使得感知模块完全依赖于感知模块的计算结果,这一解耦实际上从规划模块的角度损…...
uniapp版本加密货币行情应用
uniapp版本加密货币行情应用 项目概述 这是一个使用uniapp开发的鸿蒙原生应用,提供加密货币的实时行情查询功能。本应用旨在为用户提供便捷、实时的加密货币市场信息,帮助用户随时了解市场动态,做出明智的投资决策。 应用采用轻量级设计&a…...
使用 Java 执行 SQL 语句和存储过程
使用 Java 执行 SQL 语句和存储过程,通常有两种主要的方式:使用 JDBC(Java Database Connectivity)或者通过框架如 Spring Data JPA、MyBatis 等。 1. 使用 JDBC 执行 SQL 语句 JDBC 是 Java 操作数据库的标准 API。以下是通过 …...
算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式
在算法学习中,深度优先搜索(DFS)是一种常用的图搜索算法,通过递归或栈实现,适合路径搜索、连通性、拓扑排序、回溯、生成、环路检测、强连通分量和可达性等问题。本文将介绍如何利用深度优先搜索解决“妖怪和尚过河问题…...
大白话JavaScript闭包实现原理与在实际开发中的应用场景
大白话JavaScript闭包实现原理与在实际开发中的应用场景 答题思路 解释闭包的概念:先简单直白地说明闭包是什么,让读者对闭包有一个初步的认识。阐述闭包的实现原理:详细讲解闭包是如何形成的,涉及到函数作用域、变量的生命周期…...
【redis】数据类型之geo
Redis的GEO数据类型用于存储地理位置信息(如经纬度),并提供高效的地理位置查询功能(如计算两地距离、搜索附近地点等)。其底层基于Sorted Set(有序集合)实现,通过Geohash编码将经纬度…...
C++后端服务器开发技术栈有哪些?有哪些资源或开源库拿来用?
一、 C后台服务器开发是一个涉及多方面技术选择的复杂领域,特别是在高性能、高并发的场景下。以下是C后台服务器开发的一种常见技术路线,涵盖了从基础到高级的技术栈。 1. 基础技术栈 C标准库 C11/C14/C17/C20:使用现代C特性,如…...
第五次CCF-CSP认证(含C++源码)
第五次CCF-CSP认证 第一道(easy)思路及AC代码 第二道(easy)思路及AC代码solution 1solution 2 第三道(mid)思路及AC代码(mid) 第一道(easy) 题目链接 思路及…...
tcp udp区别
TCP(传输控制协议) 和 UDP(用户数据报协议) 是两种常用的传输层协议,它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别: 1. 连接方式 TCP:面向连接的协议。通信前需…...
驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来
智慧浪潮崛起:AI与边缘计算的时代 正悄然深植于我们的日常生活之中,无论是火热的 ChatGPT 与 DeepSeek 语言模型,亦或是 Meta 智能眼镜,AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇,而是进一步催生了更高…...
【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】
💌 所属专栏:【单片机开发软件技巧】 😀 作 者: 于晓超 🚀 个人简介:嵌入式工程师,专注嵌入式领域基础和实战分享 ,欢迎咨询! 💖 欢迎大家࿱…...
Linux 进程管理工具 Supervisor
介绍 Supervisor 是一个用 Python 编写的进程管理工具,旨在帮助你监控和控制多个进程。它特别适用于需要确保某些服务在服务器启动时自动运行,并且在崩溃时自动重启的场景。 写在前面: 因为现在很多第三方的包的最新版本都是基于 python3了…...
问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘text‘
项目环境: 我的环境:Window10,Python3.12,Anaconda3,Pycharm2024.3.4 问题描述: 找不到’text’这个对象 部分代码: Traceback (most recent call last):File "D:\IT DateFiles\PyDate\FQ…...
Hadoop、Hive、Spark的关系
Part1:Hadoop、Hive、Spark关系概览 1、MapReduce on Hadoop 和spark都是数据计算框架,一般认为spark的速度比MR快2-3倍。 2、mapreduce是数据计算的过程,map将一个任务分成多个小任务,reduce的部分将结果汇总之后返回。 3、HIv…...
OneM2M:全球性的物联网标准-可应用于物联网中
OneM2M 是一个全球性的物联网(IoT)标准,旨在为物联网设备和服务提供统一的框架和接口,以实现设备之间的互操作性、数据共享和服务集成。OneM2M 由多个国际标准化组织(如 ETSI、TIA、TTC、ARIB 等)共同制定,目标是解决物联网领域的碎片化问题,提供一个通用的标准,支持跨…...
C++类和对象入门(三)
目录 前言 一、初始化列表 1.1定义 1.2 格式和语法 1.3与在函数内初始化的区别 1.4使用初始化列表的必要性 1.5成员变量默认值的使用(C11) 1.6初始化的先后顺序 1.7初始化列表的总结 二、类型转换 2.1内置类型转化成类类型 2.2类类型之间的相…...
Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析20250309
Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析 在当今的数字化时代,Docker 已成为企业应用部署和运维的基石。其轻量级、高效且灵活的容器化技术,为企业带来了前所未有的敏捷性和可扩展性。然而,随着容器化应用的…...
Tensorflow 2.0 GPU的使用与限制使用率及虚拟多GPU
Tensorflow 2.0 GPU的使用与限制使用率及虚拟多GPU 1. 获得当前主机上特定运算设备的列表2. 设置当前程序可见的设备范围3. 显存的使用4. 单GPU模拟多GPU环境 先插入一行简单代码,以下复制即可用来设置GPU使用率: import tensorflow as tf import numpy…...
【PyCharm】Python和PyCharm的相互关系和使用联动介绍
李升伟 整理 Python 是一种广泛使用的编程语言,而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境(IDE)。以下是它们的相互关系和使用联动的介绍: 1. Python 和 PyCharm 的关系 Python:一种解释型、…...
动态规划:多重背包
本题力扣上没有原题,大家可以去卡码网第56题 (opens new window)去练习,题意是一样的。 56. 携带矿石资源(第八期模拟笔试) 题目描述 你是一名宇航员,即将前往一个遥远的行星。在这个行星上,有许多不同类…...
AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异
背景 字节跳动正式发布中国首个AI原生集成开发环境工具(AI IDE)——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro,支持切换满血版DeepSeek R1&V3, 可以帮助各阶段开发者与AI流畅协作,更快、更高质量地完…...
TensorFlow 的基本概念和使用场景
TensorFlow 是一个由 Google 开发的开源深度学习框架,用于构建和训练机器学习模型。它的基本概念包括以下几点: 张量(Tensor):在 TensorFlow 中,数据以张量的形式表示,张量可以是多维数组&#…...
gRPC学习笔记
微服务 一旦某个服务器宕机,会引起整个应用不可用,隔离性差 只能整体应用进行伸缩,浪费资源,可伸缩性差 代码耦合在一起,可维护性差 微服务架构:解决了单体架构的弊端 可以按照服务进行单独扩容 各个…...
Linux常见指令
Linux常见指令 1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令和rm指令7、man指令8、cp指令9、mv指令10、cat指令11、重定向12、more指令13、less指令14、head指令15、tail指令16、管道17、时间相关指令18、cal指令19、find指令20、grep指令21、zip/unzip指…...
Vue3、vue学习笔记
<!-- Vue3 --> 1、Vue项目搭建 npm init vuelatest cd 文件目录 npm i npm run dev // npm run _ 这个在package.json中查看scripts /* vue_study\.vscode可删 // vue_study\src\components也可删除(基本语法,不使用组件) */ // vue_study\.vscode\lau…...
用OpenCV写个视频播放器可还行?(C++版)
引言 提到OpenCV,大家首先想到的可能是图像处理、目标检测,但你是否想过——用OpenCV实现一个带进度条、倍速播放、暂停功能的视频播放器?本文将通过一个实战项目,带你深入掌握OpenCV的视频处理能力,并解锁以下功能&a…...
clion+arm-cm3+MSYS-mingw +jlink配置用于嵌入式开发
0.前言 正文可以跳过这段 初识clion,应该是2015年首次发布的时候, 那会还是大三,被一则推介广告吸引到,当时还在用vs studio,但是就喜欢鼓捣新工具,然后下载安装试用了clion,但是当时对cmake规…...
物联网-IoTivity:开源的物联网框架
IoTivity 是一个开源的物联网(IoT)框架,旨在为物联网设备提供互操作性、安全性和可扩展性。它由 Open Connectivity Foundation (OCF) 主导开发,遵循 OCF 的标准,致力于实现设备之间的无缝连接和通信。IoTivity 提供了一个统一的框架,支持设备发现、数据交换、设备管理和…...
Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!
在数字化时代,PDF文件以其稳定性和通用性成为了文档交流和存储的热门选择。无论是阅读、编辑、转换还是转曲,大家对PDF文件的操作需求日益增加。因此,一款出色的PDF处理软件不仅要满足多样化的需求,还要通过简洁的界面和强大的功能…...
【c++】模板进阶
在前面我们学习了模板的基础用法【c】 模板初阶-CSDN博客初步认识了函数模板和类模板,接下来让我们看看模板还有哪些进阶的应用。 非类型模板参数 之前我们用到的模板全都使用了类型参数 类型参数:表示某种数据类型(如 int、double、自定义…...
IntelliJ IDEA 2021版创建springboot项目的五种方式
第一种方式,通过https://start.spring.io作为spring Initializr的url来创建项目。 第二种方式,通过https://start.spring.io官网来直接创建springboot项目压缩包,然后导入至我们的idea中。 点击generate后,即可生成压缩包…...
数字信号处理之信号功率谱计算welch方法(分段加窗平均周期图)、Bartlett方法(周期图)(Python)
welch方法原理说明 welch方法[1]通过将数据划分为重叠的段,计算每个段的进行修改(加窗)后的周期图,然后对所有段的周期图求和进行平均,得到最终的功率谱密度。 Python和Matlab中均存在welch函数。welch函数通过配置noverlap为0,可…...
【面试】Java 基础
基础 1、Java 中几种基本数据类型什么,各自占用多少字节2、基本数据同包装类的区别3、Java 基本类型的参数传递和引用类型的参数传递有啥区别4、隐式类型转换和显式类型转换5、switch 语句表达式结果的类型6、数组的扩容方式7、面向对象三大特征8、静态变量和成员变…...
【工具使用】IDEA 社区版如何创建 Spring Boot 项目(详细教程)
IDEA 社区版如何创建 Spring Boot 项目(详细教程) Spring Boot 以其简洁、高效的特性,成为 Java 开发的主流框架之一。虽然 IntelliJ IDEA 专业版提供了Spring Boot 项目向导,但 社区版(Community Edition)…...
CTFHub-FastCGI协议/Redis协议
将木马进行base64编码 <?php eval($_GET[cmd]);?> 打开kali虚拟机,使用虚拟机中Gopherus-master工具 Gopherus-master工具安装 git clone https://github.com/tarunkant/Gopherus.git 进入工具目录 cd Gopherus 使用工具 python2 "位置" --expl…...
【Python字符串】\n是什么?它与raw字符串、多行字符串的运用有什么关系?
李升伟 整理 在Python中,\n 是换行符,用于在字符串中表示新的一行。当你在字符串中使用 \n 时,Python 会在该位置插入一个换行符,使得输出在 \n 处换行。 1. 普通字符串中的 \n 在普通字符串中,\n 会被解释为换行符…...
Linux 配置静态 IP
一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址,每次启动虚拟机服务都是不一样的 IP,因此要配置静态 IP 地址避免每次都发生变化,下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念: 动态 IP…...