内存映射

Elasticsearch 中映射参数doc_values 和 fielddata分析比较

可紊 提交于 2019-12-01 06:56:45
doc_values 默认情况下,大部分字段是索引的,这样让这些字段可被搜索。倒排索引(inverted index)允许查询请求在词项列表中查找搜索项(search term),并立即获得包含该词项的文档列表。 倒排索引(inverted index): 如果我们想要获得所有包含 brown 的文档的词的完整列表,我们会创建如下查询: GET /my_index/_search { "query" : { "match" : { "body" : "brown" } }, "aggs" : { "popular_terms": { "terms" : { "field" : "body" } } } } 倒排索引是根据词项来排序的,所以我们首先在词项列表中找到 brown,然后扫描所有列,找到包含 brown 的文档。我们可以快速看到 Doc_1 和 Doc_2 包含 brown 这个 token。 然后,对于聚合部分,我们需要找到 Doc_1 和 Doc_2 里所有唯一的词项。用倒排索引做这件事情代价很高: 我们会迭代索引里的每个词项并收集 Doc_1 和 Doc_2 列里面 token。这很慢而且难以扩展:随着词项和文档的数量增加,执行时间也会增加。 Doc values 通过转置两者间的关系来解决这个问题。倒排索引将词项映射到包含它们的文档,doc values

Hibernate 映射文件配置

随声附和 提交于 2019-12-01 03:19:51
对象关系的映射是用一个XML文档来说明的。映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等。 下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。 Java代码 <?xml version= "1.0" ?> <!-- 所有的XML映射文件都需要定义如下所示的DOCTYPE。 Hibernate会先在它的类路径(classptah)中搜索DTD文件。 --> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <!-- hibernate-mapping有几个可选的属性: schema属性指明了这个映射的表所在的schema名称。 default -cascade属性指定了默认的级联风格 可取值有 none、save、update。 auto- import 属性默认让我们在查询语言中可以使用非全限定名的类名 可取值有 true 、 false 。 package 属性指定一个包前缀。 --> <hibernate-mapping schema= "schemaName" default -cascade=

必须知道的MyBatis实用知识点

丶灬走出姿态 提交于 2019-12-01 03:01:48
一、 MyBatis简介 MyBatis的前身是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。2013年11月迁移到GitHub,因此目前MyBatis是由GitHub维护的。 同样作为持久层框架的 Hibernate在前些年非常的火,它在配置了映射文件和数据库连接文件后就可以通过Session操作,它甚至提供了HQL去操作POJO进而操作数据库的数据,几乎可以使编程人员脱离sql语言。可是为什么MyBatis却越来越受欢迎呢?我们稍稍总结如下: Hibernate: 1.不方便的全表映射,比如更新时需要发送所有的字段; 2.无法根据不同的条件组装不同sql; 3.对多表关联和复制sql查询支持较差; 4.有HQL但性能较差,做不到sql优化; 5.不能有效支持存储过程; 在当今的大型互联网中,灵活、 sql优化,减少数据的传递是最基本的优化方法,但是Hibernate却无法满足我们的需求,而MyBatis提供了更灵活、更方便的方法。在MyBatis里,我们需要自己编写sql,虽然比Hibernate配置要多,但是是MyBatis可以配置动态sql,也可以优化sql,且支持存储过程,MyBatis几乎能做到 JDBC 所能做到的所有事情!凭借其高度灵活

Mybatis

ぃ、小莉子 提交于 2019-12-01 01:21:02
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/a745233700/article/details/80977133 1、什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 (2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 (3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: (1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 (2

mybatis执行过程及经典面试题

北慕城南 提交于 2019-11-30 18:03:58
Mybatis执行流程   mybatis中xml解析是通过SqlSessionFactoryBuilder.build()方法。   初始化mybatis(解析xml文件构建成Configuration对象)并初始化SqlSessionFactory对象   在解析xml时会同时根据其中节点做相应的初始化操作   关键节点: settings、typeAliases、mappers   通过SqlSesssionFactory.openSession()方法打开一个SqlSession对象   SqlSessionFactory对象的作用是里面存了全局的配置信息以及初始化环境和DataSource,DataSource对象可以用来开辟连接,SqlSessionFactory对象是用来保存全局信息并且打开数据库连接   在打开SqlSession对象的时候就会开辟一个连接对象并传给SqlSession对象,和数据库打交道的操作入口在于SqlSession对象   通过SqlSession.getMapper()根据传入的Mapper对象类型动态代理并返回一个动态代理后的Mapper对象   由SqlSession.select()/update(),MapperProxy对象的invoke()方法执行后再执行execure方法,再根据情况选择执行select/update  

Mybatis学习——Mybatis核心配置

可紊 提交于 2019-11-30 16:18:07
MyBatis的核心配置   在使用MyBatis框架时,设计两个核心的d对象:SqlSessionFactory和SqlSession. SqlsessionFactory   SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,其主要作用用来创建SqlSession对象,SqlSessionFactory实例对象是可以通过SqlSessionFactoryBulider对象来构建,而SqlSessionFactoryBulider对象可以通过XML文件或者Configuration实例来创建SqlSessionFactory实例,其代码如下: //1.读取配置文件 String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.获取会话工厂对象 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);   注意:SqlSessionFactory对象是线性安全的,它一旦被创建,在整个应用程序间都会存在,如果我们多次的创建同一个SqlSessionFactory对象

以及Hibernate和Mybatis区别

帅比萌擦擦* 提交于 2019-11-30 14:40:14
ORM框架? Object Relational Mapping,对象-关系映射。 项目中的业务实体有两种表现形式:对象和关系数据,即在内存中表现为对象,在数据库中表现为关系数据。 为什么需要ORM框架? ORM框架是对象关系映射,那为什么要映射mapping? 因为对象之间可以存在关联和继承关系,但是在数据库中,关系数据无法表达多对多关联和继承关系。(ps:在数据库原理中,会把逻辑上的多对多转换为多个一对关系才能实现)因此,对象和关系(业务实体的两种表现形式)想要映射正确,项目系统一般以中间件的形式,即持久层框架。 Hibernate? Hibernate是一个开源的对象关系映射框架。 它对jdbc进行了非常轻量级的对象封装,将pojo(普通的Java对象)与数据库表建立映射关系,是一个全自动的ORM框架,甚至自动生成SQL语句,自动执行。 因此,程序员可以随心所有地使用对象编程思维来操纵数据库。 Hibernate特点: Hibernate通过修改一个“持久化”对象的属性,从而修改数据库表中对应的记录数据 提供线程和进程两个级别的缓存提升应用程序性能 有丰富的映射方式将 Java对象之间的关系(POJO) 转换为 数据库表之间的关系 屏蔽不同数据库实现之间的差异。在Hibernate中只需通过“方言”的形式指定当前使用的数据库,就可以根据底层数据库的实际情况生成适合的SQL语句

MyBatis进阶

六眼飞鱼酱① 提交于 2019-11-30 13:35:37
MyBatis进阶 笔记内容:日志管理、动态SQL、缓存、对象关联查询、分页、批处理和注解 日志管理 日志文件作用:用于记录系统操作事件的记录文件或文件集合,日志保存历史数据,是诊断问题以及理解系统活动的重要依据。 日志分为两部分:比如,SLF4j与Logback,如下图所示 日志门面和日志实现作用区别:统一的门面屏蔽了底层复杂的实现,门面就像插盘的面板规格,插盘内部的电路设计细节不同。门面和实现分开有助于数据迁移。 日志实现组件作用:提供日志的打印、输出、管理 使用步骤 在pom文件中加入logback依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> 可以自定义控制台输出日志的格式:在resources目录下新建logback.xml,规定控制台的输出日志格式。 一般调试时,设置root level级别为debug以上,方便调试。 <configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>[%thread] %d{HH:mm

虚拟地址到物理地址的转换过程

白昼怎懂夜的黑 提交于 2019-11-30 12:24:00
1.arm32 MMU 32位arm MMU支持2级页表,L1和L2(这里不考虑LAPE),支持如下特性 VA--PA,最多2级页表转换 支持32bit的物理地址 支持如下的内存大小 1M或16M的段 4K或64K的页 2.一级页表映射 一级页表的映射过程 图中L1采用1M section映射 TTBA[31:14]表示L1的基地址 一级页表项占4字节,VA[31:20] << 2表示虚拟地址在页表中的偏移 TTBA[31:14] | (VA[31:20] << 2)表示虚拟地址的一级页表项的地址 L1页表项的内容由 PA[31:20] | mmu_flags | [1:0]组成,其中最后2bit表示表的类型 PA[31:20] | VA[19:0]则获得段式映射的PA TTBA从何而来? TTBA保存在CP15 c2中,从图中可以看出其地址是16KB对齐 TTBA地址具体由TTRB0和TTRB1决定,其中TTRB0对应用户空间,TTRB1对应内核空间 L1如何跟VA对应? 每个页表项占4个字节,低2bit为0b00,VA[31:20] <<2即为页表偏移量 每个页表项表示1M的空间,4K个页表项代表4G的进程空间 一级页表项内容如何定义? [1:0]低2位表示页表类型 0b00 ---- invalid 0b01 ---- 页式映射,[31:10]表示二级页表基地址

004-guava 集合-新增集合类型-MultiSet, MultiMap, BiMap , Table, ClassToInstanceMap, RangeSe, RangeMap等

孤人 提交于 2019-11-30 12:13:42
一、概述   Guava引入了很多JDK没有的、但明显有用的新集合类型。这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念。作为一般规则,Guava集合非常精准地遵循了JDK接口契约。 二、使用 2.1、MultiSet[无序 +可重复 ]-工具类Multisets   Guava提供了一个新集合类型 Multiset ,它可以多次添加相等的元素。维基百科从数学角度这样定义Multiset:”集合[set]概念的延伸,它的元素可以重复出现…与集合[set]相同而与元组[tuple]相反的是,Multiset元素的顺序是无关紧要的:Multiset {a, a, b}和{a, b, a}是相等的”。—— 译者注:这里所说的集合 [set]是数学上的概念,Multiset继承自JDK中的Collection接口,而不是Set接口,所以包含重复元素并没有违反原有的接口契约。   这个接口没有实现java.util.Set接口,Set接口规定里面是不能够放入重复的元素,如果放入重复元素会被覆盖掉的;然而Multiset接口却是可以放入重复元素的,Set接口中的元素是[1,2,3],Multiset中确可以[1✖️2,2✖️3,3✖️3]来表示多个相同的元素。 Guava提供了多种Multiset的实现,大致对应JDK中Map的各种实现: Map 对应的