首页 文章 精选 留言 我的

精选列表

搜索[编译原理],共10000篇文章
优秀的个人博客,低调大师

阿里云快照容量基本原理

快照容量与磁盘容量的关系 快照是在某个时间点,对整个磁盘数据状态的捕捉。在创建快照的过程中, 通过消除空块的操作,使得单个快照容量小于磁盘容量。阿里云会识别出从未写入过数据的磁盘空间,并标记为空块,不进行计量, 以节省用户的快照空间。 数据写入操作的准确定义 首先澄清一个概念,对底层分布式存储系统而言,“数据写入操作”不仅仅 意味着用户写入的业务数据,也包括格式化磁盘等一系列 IO 操作。用户在拿到磁盘后,必须要先格式化才能正常使用,格式化的本质是建立文 件系统的过程。一个分区或磁盘在作为文件系统使用前,需要初始化,并将数据 结构记录到磁盘上,这个过程就叫建立文件系统。 因此,在磁盘上建立文件系统,也就意味着对磁盘有数据写入操作。 不同的文件系统,在格式化时写入的文件大小也不尽相同,具体如下: Windows 系统格式化,分为快速和正

优秀的个人博客,低调大师

[ElasticSearch2.x]Filter之Filter原理

1. ElasticSearch 2.0 变动 1.1 Queries与filters合并 查询(Queries)和过滤器(filters)进行合并 - 所有过滤器子句现在都是查询子句( all filter clauses are now query clauses.)。 相反,查询子句现在可以在查询上下文或过滤器上下文中使用: Query context 在查询上下文中使用的查询将计算相关性分数,不会被缓存。 只要过滤器上下文不适用,就使用查询上下文。 Filter context 在过滤器上下文中使用的查询将不会计算相关性分数,并且可以缓存。 过滤器上下文由以下引入: constant_score查询 bool查询中的must_not和(新添加)filter参数 function_score查询中的filter和filters参数 任何叫filter的API,例如post_filter搜索参数,或者在聚合和索引别名中(any API called filter, such as the post_filter search parameter, or in aggregations or index aliases) 1.2 or 和 and通过bool实现 以前or和and过滤器与bool过滤器有不同的执行模式。 (It used to be important to use and/or with certain filter clauses, and bool with others.)。 现在这个区别已被删除:现在bool查询足够智能,可以很好地处理这两种情况。 由于这种变化,现在or和and过滤器是bool查询内部执行语法。 这些过滤器将来会被删除。 1.3filtered查询 与query过滤器 废弃 query过滤器已经废弃不再需要 - 所有查询都可以在查询或过滤器上下文中使用。 filtered查询已被弃用。filtered查询如下: GET _search { "query": { "filtered": { "query": { "match": { "text": "quick brown fox" } }, "filter": { "term": { "status": "published" } } } } } 将查询和过滤器转换为bool查询中的must和filter参数: GET _search { "query": { "bool": { "must": { "match": { "text": "quick brown fox" } }, "filter": { "term": { "status": "published" } } } } } 1.4 Filter自动缓存 以前可以通过_cache选项来控制哪些过滤器被缓存,并提供一个自定义的_cache_key。 这些选项已被弃用,如果存在,将被忽略。 过滤器上下文中使用的查询子句现在可以自动缓存。该算法考虑到使用频率,查询执行成本以及构建过滤器的成本。 terms过滤器查找机制不在缓存文档内容.现在依赖于文件系统缓存.如果查找索引不是太大,建议通过设置index.auto_expand_replicas:0-all将其复制到所有节点,以消除网络开销。 1.5 Java API Query和Filter重构 org.elasticsearch.index.queries.FilterBuilders从ElasticSearch2.0开始已被删除,作为查询和过滤器组合的一部分。 这些过滤器现在可以在QueryBuilders中使用具有相同名称的方法。所有可以接受FilterBuilder的方法现在也可以接受QueryBuilder。 以前使用方式: FilterBuilders.boolFilter() .must(FilterBuilders.termFilter("name", "张三")) .mustNot(FilterBuilders.rangeFilter("age").from(28).to(30)) .should(FilterBuilders.termFilter("city", "北京")); 现在可以使用如下方式: BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(QueryBuilders.termQuery("name", "张三")); boolQueryBuilder.must(QueryBuilders.rangeQuery("age").from(28).to(30)); boolQueryBuilder.must(QueryBuilders.termQuery("city", "北京"); ConstantScoreQueryBuilder queryBuilder = QueryBuilders.constantScoreQuery(boolQueryBuilder); 2. 深入理解Filter 在执行非评分查询时,Elasticsearch内部会执行多个操作.以下面查询为例: curl -XPUT 'localhost:9200/my_store/products/1' -d '{ "price" : 10, "productID" : "XHDK-A-1293-#fJ3" }'; curl -XPUT 'localhost:9200/my_store/products/2' -d '{ "price" : 20, "productID" : "KDKE-B-9947-#kL5" }'; curl -XPUT 'localhost:9200/my_store/products/3' -d '{ "price" : 30, "productID" : "JODL-X-1937-#pV7" }'; curl -XPUT 'localhost:9200/my_store/products/4' -d '{ "price" : 40, "productID" : "QQPX-R-3956-#aD8" }'; 例如我们想要查询产品ID为XHDK-A-1293-#fJ3的产品: curl -XGET 'localhost:9200/my_store/products/_search?pretty' -d' { "query" : { "constant_score" : { "filter" : { "term" : { "productID" : "XHDK-A-1293-#fJ3" } } } } } ' 2.1 查找匹配文档 term查询在倒排索引中查找词条XHDK-A-1293-#fJ3,并检索包含该词条的所有文档。 在本例中,只有文件1具有我们正在寻找的词条。然后获取包含该 term 的所有文档。 2.2 构建bitset 然后,过滤器构建一个bitset - 一个包含1和0的数组,描述了哪些文档包含查找词条。 匹配文档的标志位是 1 。 在我们的例子中,bitset将是[1,0,0,0](只有文档1具有我们要查找的词条)。在内部,它表示成一个 "roaring bitmap",可以同时对稀疏或密集的集合进行高效编码。 2.3 迭代bitset(s) 一旦为每个查询生成了bitsets,Elasticsearch会遍历该bitsets,以找到满足所有过滤条件的匹配文档集合。 执行顺序是启发式的(The order of execution is decided heuristically),但通常最稀疏的bitsets是首先被迭代的(因为它排除了最大数量的文档)。 2.4 增加使用计数器 Elasticsearch 可以缓存非评分查询从而达到更快的访问,但是有一点不合理的地方是它也会缓存一些使用极少的东西。由于倒排索引的原因,非评分计算已经相当快了,所以我们只想缓存那些我们知道在后面会被再次使用的查询,以避免资源的浪费。 为了实现上面的目标,Elasticsearch 会跟踪每个索引查询使用的历史。如果查询在最近的 256 次查询中会被多次用到,那么就会被缓存到内存中。而当bitset被缓存时,对于具有少于10,000个文档(或小于总索引大小的3%)的段,会省略缓存。这些小的段即将会消失,所以为它们缓存是一种浪费。 实际情况并非如此(执行有点复杂,这取决于查询计划是如何重新规划的,有些启发式是基于查询代价的)(execution is a bit more complicated based on how the query planner re-arranges things, and some heuristics based on query cost),你可以在理论上认为非评分查询 先于 评分查询执行。非评分查询的目的是降低那些将高成本评分查询计算的文档数量,从而达到快速搜索的目的。 从概念上记住非评分计算是首先执行的,这将有助于写出高效又快速的搜索请求。 原文:https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_internal_filter_operation https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking_20_query_dsl_changes.html https://www.elastic.co/guide/en/elasticsearch/reference/2.0/breaking_20_java_api_changes.html

优秀的个人博客,低调大师

HBase学习总结(4):HBase的工作原理

一、切分和分配大表 HBase中的表是由行和列组成的。HBase中的表可能达到数十亿行和数百万列。每个表的大小可能达到TB级,有时甚至PB级。这些表会切分成小一点儿的数据单位,然后分配到多台服务器上。这些小一点儿的数据单位叫region。托管region的服务器叫RegionServer。一张表由多个小一点的region组成,如图1所示。 图1 多个小一点的region组成一张表 RegionServer和HDFS DataNode典型情况下并列配置在同一物理硬件上,如图2所示。RegionServer本质上是HDFS客户端,在上面存储/访问数据。主(master)进程分配region给RegionServer,每个RegionServer一般托管多个region。 图2 RegionServer和DataNode典型情况下并列配置在同一台主机上 考虑到基础数据存储在HDFS上,所有客户端都可以在一个命名空间下访问。所有RegionServer都可以访问文件系统里同一个文件,因此RegionServer可以托管任何region,如图3所示。通过DataNode和RegionServer并列配置,理论上RegionServer可以把本地DataNode作为主要DataNode进行读写操作。 图3 RegionServer托管region的示意图 单个region大小由hbase-site.xml文件里的配置参数HBase.hregion.max.filesize决定,当一个region大小变得大于该值时,它会切分成两个region。 二、如何找到region 当一个region分配给RegionServer时,客户端应用如何知道它的位置? HBase中有两个特殊的表,-ROOT-和.META.,用来查找各种表的region位置在哪里。-ROOT-和.META.也会切分成region,其中,-ROOT-永远不会切分超过一个region,.META.和其他表一样可以按需切分成许多region。 当客户端应用要访问某行时,它先找-ROOT-表,查找什么地方可以找到负责某行的region。-ROOT-指向.META.表的region去寻找答案。.META.表由入口地址组成,客户端应用使用这个入口地址判断哪一个RegionServer托管待查找的region。这个查找过程就像是一个3层分布式B+树(如图4所示),-ROOT-表是B+树的-ROOT-节点,.META. region是-ROOT-节点的叶子,用户表的region是.META. region的叶子。 图4 -ROOT-、.META.和用户表的B+树视图 在图4中,-ROOT-表只包含了一个region,托管在RegionServer RS1上;.META.表包含了3个region,托管在RS1、RS2和RS3上面;用户表T1和T2分别包含3个和4个region,分别在RS1、RS2和RS3上面。 图5 HBase中的表分布在各个RegionServer上 如图5所示,RegionServer 1(RS1)托管用户表T1的region R1和.META.表的region M2;RegionServer 2(RS2)托管用户表的region R2、R3和.META.表的region M1;RegionServer 3(RS3)只托管了-ROOT-。 三、如何找到-ROOT-表 一个叫做ZooKeeper的系统提供了HBase系统的入口点。ZooKeeper是一种集中服务,用来维护配置信息、命名服务、提供分布式同步和提供分组服务等。这是一种高可用的、可靠的分布式配置服务。 客户端与HBase系统的交互分几个步骤,ZooKeeper是入口点。整个交互过程如图6所示。 图6 客户端与HBase系统的交互过程 从图6可以看出,交互步骤为: 第一步:客户端询问ZooKeeper,-ROOT-在哪里? 第二步:ZooKeeper回复客户端,-ROOT-在RegionServer RS1上面。 第三步:客户端询问在RS1上的-ROOT-表,哪一个.META. region可以找到表T1里的行00007? 第四步:RS1上的-ROOT-表回复客户端,在RegionServer RS3上的.META. region M2可以找到。 第五步:客户端询问RS3上的.META. region M2,在哪一个region上可以找到表T1里的行00007以及哪一个RegionServer为它提供服务? 第六步:RS3上的.META. region M2回复客户端,数据在RegionServer RS3上面的region T1R3上。 第七步:客户端发消息给RS3上面的region T1R3,要求读取行00007。 第八步:RS3上面的region T1R3将数据返回给客户端。 本人微信公众号:zhouzxi,请扫描以下二维码:

优秀的个人博客,低调大师

👍JeeSite V5.13.1 发布,提升 Vite 编译性能,多项优化改进

升级内容 Vue 分离端版本 新增 PC 消息增加 buttons 读取 新增 表格列标题 title 新增 h 函数支持,数组类型支持 新增 Upload 增加 showPreviewList 参数,直接在表单里显示预览文件列表 新增 BasicTable 编辑表格联动例子(选择框查询条件,实时读取第一列的数据) 新增 TestData 子表编辑表格,增加图片上传组件 新增 useDrawer 增加 getDrawerProps 获取抽屉层属性方法 新增 useModal 增加 getModalProps 获取对话框属性方法 新增 DBM 索引管理添加常用字段索引快捷按钮 优化 DBM 提交的时候,同步 暂存、创建、提交 按钮状态。 优化 BasicTable 编辑表格 增加防抖,防止取消编辑行的时候出现递归问题 优化 BasicTable 表格列删除 customTitle 没有用到的属性 优化 BasicTable 表格带搜索框的按钮 1 像素遮挡优化 优化 ListSelect 组件每次弹窗后,刷新列表内容 优化 Upload 文件上传组件列表,对话框自动高度实现方式优化 优化 Upload 文件上传组件列表,增加空列表显示文字 优化 Upload 文件上传组件预览界面按钮更改为右对齐 优化 Upload 文件上传组件的在小窗口下增加水平滚动 调整 现代浏览器支持列表:['chrome107', 'edge107', 'firefox104', 'safari16'] 调整 旧版浏览器支持列表:['chrome>=87', 'edge>=88', 'firefox>=78', 'safari>=14'] 调整 env 属性,默认关闭 VITE_LEGACY 参数(@vitejs/plugin-legacy)(构建性能提升50%) 调整 BasicTable 编辑表格 edit-change record 参数为响应对象,可直接在事件代码中更改表格行值 调整 移除 暂时用不到的 nprogress 显示进度条依赖 修正 Dialog 组件 getProps 方法未返回属性 Spring Boot 3 和 2 后端功能升级 新增 QueryType.BETWEEN、QueryType.NOT_BETWEEN 查询类型 优化 @Idempotent 幂等注解,支持 key 指定多个,使用逗号分隔,提升性能 优化 文字“候”还是“后”,稍后:说明后面还需有动作,需再进行尝试;稍候:说明只需等待就可以了 优化 数据权限,当未设置控制权限的时候给一个默认权限(拥有的权限) 优化 StringUtils 驼峰命名法工具,使用下划线开头的时候忽略它 优化 DBM 增加幂等注解,防止段时间内重复提交 优化 代码生成模版:生成模块代码(Maven) 优化 报表设计器 自动加载 JeeSite 多数据源 优化 TestData 子表增加图片上传组件 优化 项目结构,单元测试类配置 优化 启动脚本 startup.bat(sh) 支持接受参数 优化 新增 -Dspring.config.additional-location 方式读取配置文件 调整 IpAddrFilter 重命名为 GlobalFilter 全局过滤器,并将 MDC 移动到进来 修正 代码生成器 windows 下 zip 压缩包路径不正确问题 修正 达梦 20240115 以后版本出现 model 关键字的问题 修正 ExcelImport 数值类型为负数的时候小数问题 升级 政务中间件 内网穿透 spring boot 3、httpclient5 升级 poi 5.4.1、docker plugin 0.46.0 更多细节优化改进 升级方法 修改所有pom.xml文件中的jeesite-parent版本号为5.13.1.springboot3-SNAPSHOT Spring Boot 2 版本,修改所有pom.xml文件中的jeesite-parent版本号为5.13.1-SNAPSHOT 如果您修改了parent、common、modules等项目源码,请与git上的代码进行同步 如果您是跨版本升级,请注意每一个版本的升级方法,业务上有调整的地方进行修改 执行root/package.bat(sh)打包脚本,强制更新依赖。 Vue 分离端 请与jeesite-vue代码仓库源码进行同步,合并代码,手动解决冲突代码 如果您是跨版本升级,请注意每一个版本的升级方法,业务上有调整的地方进行修改 匹配后端版本为JeeSite v5.13.1 springboot3 或 springboot2 了解更多 JeeSite 官网地址:http://jeesite.com JeeSite 在线文档:http://docs.jeesite.com JeeSite Vue 版演示地址:https://vue.jeesite.com JeeSite 全栈版演示地址:https://demo.jeesite.com JeeSite 源码下载地址:https://gitee.com/thinkgem/jeesite5 JeeSite Vue 前端源码:https://gitee.com/thinkgem/jeesite-vue JeeSite 跨平台手机端:https://gitee.com/thinkgem/jeesite-uniapp JeeSite Cloud 微服务:https://gitee.com/thinkgem/jeesite-cloud JeeSite 客户端安装程序:https://gitee.com/thinkgem/jeesite-client JeeSite 生态系统 AI + RAG + CMS 人工智能助手:https://jeesite.com/docs/cms-ai 分布式微服务(Spring Cloud):https://gitee.com/thinkgem/jeesite-cloud Flowable 业务流程引擎(BPM):http://jeesite.com/docs/bpm/ 多站点内容管理模块(CMS):https://jeesite.com/docs/cms/ 手机端移动端:https://gitee.com/thinkgem/jeesite-uniapp PC 客户端程序:https://gitee.com/thinkgem/jeesite-client Vue3 分离版本:https://gitee.com/thinkgem/jeesite-vue JeeSite 统一认证:https://jeesite.com/docs/oauth2-server/ JFlow 工作流引擎:https://gitee.com/thinkgem/jeesite-jflow Mybatis-Plus:https://gitee.com/thinkgem/jeesite-mybatisplus Magic 接口快速开发:https://gitee.com/thinkgem/jeesite-magic-api 内外网中间件:https://my.oschina.net/thinkgem/blog/4624519

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册