- 博客(65)
- 收藏
- 关注
原创 Mysql(9)优化数据库结构
目录1、优化数据大小Table ColumnsRow FormatIndexesJoinsNormalization2、优化数据类型优化数值(Numeric)数据优化字符和字符串类型针对 BLOB 类型进行优化3、表列数和行大小的限制Column Count LimitsRow Size LimitsRow Size Limit Examples1、优化数据大小设计我们的表以最小化它们在磁盘上的空间。 这可以通过减少写入磁盘和从磁盘读取的数
2022-02-08 17:56:12
1147
1
原创 Mysql(8)如何使用索引
索引用于快速查找具有特定列值的行。 如果没有索引,MySQL 必须从第一行开始,然后读取整个表以查找相关行。 table越大,成本越高。 如果表有相关列的索引,MySQL 可以快速确定要在数据文件中间查找的位置,而无需查看所有数据。 这比顺序读取每一行要快得多。大多数 MySQL 索引(PRIMARY KEY、UNIQUE、INDEX 和 FULLTEXT)都存储在 B 树中。 例外:空间数据类型的索引使用 R-trees; MEMORY 表也支持hash索引; InnoDB 对 FULLTEXT 索引
2022-02-08 15:36:47
810
原创 Mysql(7)Limit 查询优化
如果我们只需要结果集中指定数量的行,请在查询中使用 LIMIT 子句,而不是获取整个结果集并丢弃额外的数据。MySQL 有时会优化具有 LIMIT row_count 子句且没有 HAVING 子句的查询:如果使用 LIMIT 只选择几行,MySQL 在某些情况下会使用索引,而通常它更愿意进行全表扫描。 如果将 LIMIT row_count 与 ORDER BY 结合使用,MySQL 会在找到排序结果的第一个 row_count 行后立即停止排序,而不是对整个结果进行排序。 如果使用索引进行
2022-02-08 14:34:12
974
原创 Mysql(6)Group By优化
满足 GROUP BY 子句的最通用方法是扫描整个表并创建一个新的临时表,其中每个组的所有行都是连续的,然后使用此临时表来发现组并应用聚合函数(如果有)。 在某些情况下,MySQL 能够做得比这更好,并通过使用索引访问来避免创建临时表。为 GROUP BY 使用索引的最重要的先决条件是所有 GROUP BY 列都引用来自同一索引的属性,并且索引按顺序存储其键(例如,对于 BTREE 索引)。 临时表的使用是否可以被索引访问替代还取决于查询中使用了索引的哪些部分、为这些部分指定的条件以及所选的聚合函数。
2022-02-08 14:09:28
2026
原创 Hystrix(4)
以下是 HystrixCommand 的基本“Hello World”实现:public class CommandHelloWorld extends HystrixCommand<String> { private final String name; public CommandHelloWorld(String name) { super(HystrixCommandGroupKey.Factory.asKey("exampleGroup"));
2022-01-27 17:14:02
110
原创 Mysql(5)Order By优化
使用索引来满足 ORDER BY在某些情况下,MySQL 可能会使用索引来满足 ORDER BY 子句并避免执行文件排序操作中涉及的额外排序。即使 ORDER BY 与索引不完全匹配,也可以使用索引,只要索引的所有未使用部分和所有额外的 ORDER BY 列都是 WHERE 子句中的常量。 如果索引不包含查询访问的所有列,则仅当索引访问比其他访问方法便宜时才使用索引。假设 (key_part1, key_part2) 上有索引,以下查询可能会使用该索引来解析 ORDER BY 部分。 优化器是否
2022-01-27 14:12:07
1573
原创 Hystrix(3)
Circuit Breaker(断路器)下图显示了 HystrixCommand 或 HystrixObservableCommand 如何与 HystrixCircuitBreaker 交互及其逻辑和决策流程,包括计数器在断路器(circuit breaker)中的行为方式。电路(circuit)开闭发生的具体方式如下:假设整个电路的量达到某个阈值(HystrixCommandProperties.circuitBreakerRequestVolumeThreshold())....
2022-01-26 16:06:55
276
原创 Hystrix(2)流程介绍
下图显示了当我们通过 Hystrix 向服务依赖项发出请求时会发生什么:以下部分将更详细地解释此流程:1.构造一个HystrixCommand或HystrixObservableCommand对象第一步是构造一个 HystrixCommand 或 HystrixObservableCommand 对象来表示我们对依赖项发出的请求。 向构造函数传递发出请求时需要的任何参数。如果期望依赖项返回单个响应,则构造一个 HystrixCommand 对象。 例如:HystrixCommand
2022-01-26 14:23:08
371
原创 Mysql(4)index合并优化
Index Merge 访问方法检索具有多个范围扫描的行并将其结果合并为一个。 此访问方法仅合并来自单个表的索引扫描,而不是跨多个表的扫描。 合并可以生成其底层扫描的并集、交集或交集并集。SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;SELECT * FROM tbl_name WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;SELECT * FROM t1, t2 WHERE (
2022-01-26 11:33:07
1164
原创 Mysql(3)Range优化
范围访问方法使用单个索引来检索包含在一个或多个索引值间隔内的表行的子集。 它可用于单部分或多部分索引。 以下部分描述了优化器使用范围访问的条件。目录单部分索引的范围访问方法多部分索引的范围访问方法多值比较的等式范围优化行构造函数表达式的范围优化范围优化的限制内存使用单部分索引的范围访问方法对于单部分索引,索引值区间可以方便地用 WHERE 子句中的相应条件表示,表示为范围条件而不是“区间”。单部分索引的范围条件定义如下:对于 BTREE 和 HASH 索引,在使用 =
2022-01-26 11:03:47
2396
原创 Mysql(2)WHERE 子句优化
本节讨论可用于处理 WHERE 子句的优化。 这些示例使用 SELECT 语句,但相同的优化适用于 DELETE 和 UPDATE 语句中的 WHERE 子句。我们可能很想重写查询以使算术运算更快,同时牺牲可读性。 因为 MySQL 会自动进行类似的优化,所以我们通常可以避免这项工作,并将查询保留在更易于理解和维护的形式中。 MySQL执行的一些优化如下:删除不必要的括号: ((a AND b) AND c OR (((a AND b) AND (c AND d))))-> (a A
2022-01-20 20:14:43
690
原创 Mysql (1)优化概述
数据库性能取决于数据库级别的几个因素,例如表、查询和配置设置。 这些软件结构会导致硬件级别的 CPU 和 I/O 操作,我们必须将其最小化并尽可能提高效率。 在处理数据库性能时,首先要学习软件方面的高级规则和指南,并使用挂钟时间来衡量性能。 当我们成为专家时,我们会更多地了解内部发生的事情,并开始测量诸如 CPU 周期和 I/O 操作之类的东西。典型用户的目标是从现有的软件和硬件配置中获得最佳的数据库性能。 高级用户寻找机会改进 MySQL 软件本身,或开发自己的存储引擎和硬件设备以扩展 MySQL 生
2022-01-20 19:54:17
815
原创 netty(2)
处理基于流的传输套接字缓冲区的一个小警告在基于流的传输(如TCP/IP)中,接收的数据存储在套接字接收缓冲区中。不幸的是,基于流的传输的缓冲区不是数据包队列,而是字节队列。这意味着,即使我们将两条消息作为两个独立的数据包发送,操作系统也不会将它们视为两条消息,而是将它们视为一堆字节。因此,无法保证我们所读的内容与远程对等方所写的内容完全相同。例如,假设操作系统的TCP/IP堆栈已接收到三个数据包:由于基于流的协议的这一一般属性,在应用程序中很有可能以以下碎片形式读取它们:因此,接收部
2022-01-12 15:11:14
315
原创 netty(1)
问题:如今,我们使用通用应用程序或库彼此通信。例如,我们经常使用HTTP客户端库从web服务器检索信息,并通过web服务调用远程过程调用。然而,通用协议或其实现有时不能很好地扩展。这就像我们不使用通用HTTP服务器来交换巨大的文件、电子邮件和近乎实时的消息,如财务信息和多人游戏数据。所需要的是一个高度优化的协议实现,专门用于特定用途。例如,我们可能希望实现一个HTTP服务器,该服务器针对基于AJAX的聊天应用程序、媒体流或大型文件传输进行了优化。我们甚至可以设计和实现一个全新的协议,该协议完全适合我们的
2022-01-12 14:33:43
175
原创 Hystirx(1)
什么是Hystrix?在分布式环境中,许多服务依赖项中的一些不可避免地会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助我们控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、阻止跨服务的级联故障以及提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。hytrixd的历史Hystrix是从Netflix API团队于2011年开始的弹性工程工作发展而来的。2012年,Hystrix继续发展和成熟,Netflix的许多团队都采用了它。如今,Netflix每天
2022-01-11 18:55:22
276
原创 Elasticsearch——Geo-distance查询
在距某个geopoint的给定距离内匹配“geo_point”和“geo_shape”值。例如:假设以下文档已编制索引:PUT /my_locations{ "mappings": { "properties": { "pin": { "properties": { "location": { "type": "geo_point" } } } }
2021-11-15 20:03:44
2525
1
原创 Spring Cloud Zuul(2)
目录核心特性服务发现负载平衡连接池Status 类别重试Retry on errorsRetry on status codesRequest PassportRequest AttempsOrigin并发保护HTTP/2Mutual TLS代理协议核心特性服务发现Zuul可与Eureka无缝协作,但也可配置为与静态服务器列表或我们选择的发现服务协作。使用Eureka服务器的标准方法如下所示:#使用Eureka的负载平衡后端
2021-10-27 15:52:53
612
原创 Spring Cloud Zuul(1)
Zuul是在云平台上提供动态路由,监控、弹性、安全等边缘服务的框架。Zuul相当于是设备和Netflix流应用的Web网站后端所有请求的前门。架构概述从高层来看,Zuul 2.0是一个Netty服务器,它运行pre-filters(入站过滤器),然后使用Netty客户端代理请求,然后在运行post-filter(出站过滤器)后返回响应。Filters过滤器是Zuul业务逻辑的核心所在。它们具有执行大量操作的能力,可以在请求-响应生命周期的不同部分运行,如上图所示。Inbound F.
2021-10-26 17:55:32
360
2
原创 Sharding-JDBC 使用
背景:公司的工单业务时分庞大,每个月大概至少会有500万工单,一年就至少会有6000万工单,如果接入的业务方继续增多,那么工单数量就会更加庞大,就需要对数据库进行分表。所以我们使用了按年份月份进行分表。因为我们项目使用的springboot,所以引入的Maven依赖: <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-j.
2021-10-22 14:24:05
370
原创 Elasticsearch——Geo-bounding box query
匹配与边界框相交的geo_point和geo_shape。例子:假设以下文档已编制索引:PUT /my_locations{ "mappings": { "properties": { "pin": { "properties": { "location": { "type": "geo_point" } } } } }}PUT /my_loc
2021-10-21 19:45:20
937
原创 Elasticsearch——Match phrase prefix query
按提供的顺序返回包含所提供文本的单词的文档。所提供文本的最后一个term被视为前缀,匹配以该term开头的任何单词。例子:GET /_search{ "query": { "match_phrase_prefix": { "message": { "query": "quick brown f" } } }}以下搜索返回的文档包含message字段中以quick brown f开头的短语。此搜索将匹配quick brown
2021-10-19 19:58:18
741
原创 Elasticsearch——Match boolean prefix query
match_bool_prefix查询分析其输入并根据terms构造bool查询。每个term(最后一个除外)都用于term查询。最后一个term用于前缀查询。一个match_bool_prefix query 例子:GET /_search{ "query": { "match_bool_prefix" : { "message" : "quick brown f" } }}其中,analysis生成的terms 是quick、brown和f 类似..
2021-10-19 19:17:17
498
原创 Elasticsearch——Match query
返回与提供的text、number、date或boolean匹配的文档。匹配前会分析提供的文本。match查询是执行全文搜索的标准查询,包括模糊匹配选项。例如:GET /_search{ "query": { "match": { "message": { "query": "this is a test" } } }}match的Top-level参数<field>(必填,object)要搜索的字段。
2021-10-18 20:26:51
927
原创 Elasticsearch——Boolean query
它匹配与其他查询的布尔组合相匹配的文档的一种查询,。bool查询映射到Lucene BooleanQuery。它是使用一个或多个布尔子句构建的,每个子句都有一个类型化引用。事件类型为:must 子句(query)必须出现在匹配的文档中,并将对分数起作用。 filter 子句(query)必须出现在匹配的文档中。但是,查询的分数将被忽略。filter子句在fiter上下文中执行,这意味着忽略评分,并考虑缓存子句。 should 子句(query)应出现在匹
2021-10-18 19:51:47
615
原创 Elasticsearch——Query and filter context
相关性得分默认情况下,Elasticsearch根据相关性得分对匹配的搜索结果进行排序,相关性得分衡量每个文档与查询的匹配程度。相关性分数是一个正浮点数,在搜索API的_score元数据字段中返回。分数越高,文档就越相关。虽然每种查询类型可以不同地计算相关性分数,但分数计算还取决于查询子句是在query上下文中运行还是在filter上下文中运行。Query context在query上下文中,查询子句回答问题“此文档与此查询子句的匹配程度如何?”除了决定文档是否匹配外,查询子句还计算_sco
2021-10-12 20:11:35
178
原创 Elasticsearch——查询结果排序
允许我们在特定字段上添加一个或多个排序。每种分类也可以颠倒。排序是在每个字段级别定义的,具有特殊的字段名,用于_score按分数排序,以及_doc按索引顺序排序。假设以下索引映射:PUT /my-index-000001{ "mappings": { "properties": { "post_date": { "type": "date" }, "user": { "type": "keyword" }, "name"
2021-10-11 20:35:04
2963
原创 Elasticsearch——搜索多个数据流和索引
要搜索多个数据流和索引,请将它们作为逗号分隔的值添加到搜索API的请求路径中。以下请求搜索my-index-000001和my-index-000002索引。GET /my-index-000001,my-index-000002/_search{ "query": { "match": { "user.id": "kimchy" } }}我们还可以使用索引模式搜索多个数据流和索引。以下请求以my index-*索引模式为目标。该请求搜索群集中以my
2021-10-09 15:50:28
740
原创 Elasticsearch——从搜索中检索选定字段
默认情况下,搜索响应中的每个命中都包括document _source,这是在索引文档时提供的整个JSON对象。建议使用两种方法从搜索查询中检索选定字段: 使用 fields 选项提取索引映射中存在的字段的值 如果需要访问在索引时传递的原始数据,请使用_source选项 我们可以同时使用这两种方法,但首选fields选项,因为它同时参考文档数据和索引映射。在某些情况下,我们可能希望使用其他方法检索数据。The fields option要检索搜索响应中的特定字段,请使用fi.
2021-10-09 15:35:18
2760
原创 Elasticsearch——分页查询
默认情况下,搜索返回前10个匹配的命中率。要浏览更大的结果集,可以使用搜索API的from和size参数。from参数定义要跳过的点击数,默认为0。size参数是要返回的最大点击数。这两个参数一起定义了一页结果。GET /_search{ "from": 10, "size": 20, "query": { "match": { "user.id": "kimchy" } }}避免使用“from”和“size”一次翻页太深或请求太多结果。搜索请求通常
2021-09-27 20:24:37
2016
原创 LeetCode——整数反转
给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−2^31, 2^31− 1],就返回0。示例1:输入:x=345输出:543示例2:输入:x=-456输出:-654示例3:输入:x=150输出:15我给出的答案是:class Solution { public int reverse(int x) { StringBuilder result = new Strin..
2021-09-17 19:55:55
202
原创 Elasticsearch——Filter search results
可以使用两种方法筛选搜索结果:使用带有filter子句的boolean查询。搜索请求(search requests)对搜索命中(search hits)和聚合(aggregations)应用布尔过滤器(boolean filters)。 使用搜索API的post_filter参数。搜索请求仅对search hits应用post filters,而不是聚合。我们可以使用post filter根据更广泛的结果集计算聚合,然后进一步缩小结果范围。我们还可以在后期筛选后重新存储命中,以提高相关性并重新排序
2021-09-10 16:41:49
657
原创 Collapse search results
可以使用“collapse”参数根据字段值collapse搜索结果。collapse是通过每个collapse键仅选择排序靠前的文档来完成的。例如,以下搜索按user.id折叠(collapse)结果,并按http.response.bytes对其进行排序。GET my-index-000001/_search{ "query": { "match": { "message": "GET /search" } }, "collapse": { "f
2021-09-10 16:14:51
683
原创 LeetCode——两数之和
题目:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。我们可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。我们可以按任意顺序返回答案。例子1:输入:nums = [2,8,11,15], target=10输出:[0,1]解释:因为 nums[0]+nums[1] == 10 ,所以返回[0,1]解答:class Solution {...
2021-09-08 11:19:28
68
原创 Elasticsearch——search data概述
搜索查询是对Elasticsearch数据流或索引中数据信息的请求。我们可以将查询视为一个问题,以Elasticsearch理解的方式编写。根据我们的数据,我们可以使用查询获得以下问题的答案:我的服务器上的哪些进程的响应时间超过500毫秒? 网络上的哪些用户在上周内运行了regsvr32.exe? 我的网站上的哪些页面包含特定的单词或短语?搜索由一个或多个查询组成,这些查询被组合并发送到Elasticsearch。匹配搜索查询的文档将在响应的点击或搜索结果中返回。搜索还可能包含用于更好地处
2021-09-02 20:29:39
586
原创 Elasticsearch——Text Analysis
文本分析使Elasticsearch能够执行全文搜索,其中搜索返回所有相关结果,而不仅仅是精确匹配。如果搜索Quick fox jumps,则可能需要包含A quick brown fox jumps over the lazy dog的文档,也可能需要包含相关单词(如fast fox或foxes leap)的文档。标记化分析通过标记化使全文搜索成为可能:将文本分解为更小的块,称为标记。在大多数情况下,这些标记是单个单词。如果我们将短语“the quick brown fox jumps”作
2021-08-31 20:13:49
473
原创 Elastisearch——Nested 字段类型
nested类型是object数据类型的一个专门版本,它允许对对象数组进行索引,以便它们可以相互独立地查询。当用大的任意键值集合键入键值对时,可以考虑将每个键值对建模为具有键和值字段的自己嵌套文档。相反,考虑使用扁平化数据类型,它将整个对象映射为单个字段,并允许对其内容进行简单搜索。嵌套文档和查询通常比较昂贵,因此在这个用例中使用扁平化数据类型是一个更好的选择。对象阵列的展平方式Elasticsearch没有内部对象的概念。因此,它将对象层次结构展平为字段名和值的简单列表。例如:PUT m
2021-08-30 20:22:17
508
原创 Elasticsearch——Keyword字段类型
keyword family包括以下字段类型:keyword,用于结构化内容,如ID、电子邮件地址、主机名、状态码、邮政编码或标记。 constant_keyword始终包含相同值的keyword字段。 wildcard非结构化machine-generated内容,wildcard类型针对具有大值或高基数的字段进行了优化。keyword字段通常用于排序(sorting)、聚合(aggregations)和term-level查询,例如term。避免使用keyword字段进行全文搜索(...
2021-08-25 20:09:38
6044
原创 Elasticsearch——Histogram字段类型
用于存储表示直方图的pre-aggregated数字数据的字段。此数据使用两个成对数组定义:由两个double组成的value数组,表示histogram的存储桶(buckets)。必须按升序提供这些值。 对应的integer numbers的counts数组,表示每个存储桶中有多少个值。这些数字必须为正或零。因为values数组中的元素对应于count数组中相同位置的元素,所以这两个数组必须具有相同的长度。注意:histogram 字段只能存储每个文档的一对值和计数数组。不支持嵌套(nes
2021-08-23 20:03:39
585
原创 Elasticsearch——Geopoint字段类型
geo_point类型的字段接受经纬度对,可以使用: 在边界框内、距离中心点一定距离内、多边形内或geo_shape查询内查找地质点的步骤。 按地理位置或距离中心点聚合文档。 将距离整合到文档的相关性得分中。 按距离对文档进行排序。 指定geopoint点有五种方式,如下所示:PUT my-index-000001{ "mappings": { "properties": { "location": { "type":
2021-08-21 12:01:40
2877
原创 Elasticsearch-Date字段类型
JSON没有日期数据类型,因此Elasticsearch中的日期可以是:包含格式化日期的字符串,例如“2015-01-01”或“2015/01/01 12:10:30”。 表示自历元以来的毫秒数。 表示自历元(配置)起的秒数。注意:自历元起的毫秒值必须为非负。使用格式化日期表示1970年之前的日期。在内部,日期转换为UTC(如果指定了时区),并存储为表示自历元起毫秒数的长数字。日期查询在内部转换为此长表示形式的范围查询,聚合和存储字段的结果根据与字段关联的日期格式转换回字符串。注意:日
2021-08-21 11:28:08
1408
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人