摘要:原文地址:http://www.cnblogs.com/chowmin/articles/4629220.html 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。 Elasticsea...
阅读全文
摘要:原文地址:http://blog.csdn.net/bingduanlbd/article/details/52199347 分面搜索(Faceting)基于索引词项对搜索结果进行分类,同时返回每个分类对应的文档数。用户可以可以分类缩小结果范围。下图是一个结果汇总的例子: Amazon的搜索也提供了非常优秀的分面及相应的过滤: 环境 Solr的发行版自带了一些很好的例...
阅读全文
摘要:smartcn和ik的对比,来自http://www.cnblogs.com/hadoopdev/p/3465556.html 一、引言: 中文分词一直是自然语言处理的一个痛处,早在08年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜索引擎),那时的痛,没想到5年后的今天依然存在,切分效果、扩展支持、业务应用等方面依然不甚理想。收费的版本不提了,原因自不必言表,开源版本中,发...
阅读全文
摘要:本文收集自网络,部分内容个人编写。收集了一下网页的内容: http://blog.csdn.net/dingzfang/article/details/42804489 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrClo...
阅读全文
摘要:原文地址:http://chenzhou123520.iteye.com/blog/1863407 乐观锁介绍: 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下...
阅读全文
摘要:solr使用_version_来做文档的版本控制和修改时加锁(乐观锁) indexed是否索引 只能在索引的列上进行查询 stored是否存储 只能返回存储的列 required 是否必须 multiValued 是否多值 dynamicField 动态字段 uniqueKey主键列 id copyField 各种fieldtype : sortMissingLast:排序的时候...
阅读全文
摘要:部分来自http://www.jianshu.com/p/8cf609207497 一、总览 solr的配置重要的有三个:solr.xml、solrConfig.xml、schema.xml solr.xml 是整个Solr节点的配置,是定义关于core的管理、collection分片、solr云 和http请求处理,不过目前改动不多,也没仔细研究。 solrConfig.xml:关于core或...
阅读全文
摘要:如何控制评分 如果设置了sort字段,那么将会按照sort字段的顺序返回结果。 如果没有设置sort字段,那么将会根据相关度打分来排序。也就是说,相关度更高的排在前面。 如何来定制适合自身业务的排序打分规则(boost)呢?经过这段时间的思考与实践,想到了如下三个方法:1、定制Lucene的boost算法,加入自己希望的业务规则;2、使用Solr的edismax实现的方法,通过bf查询配置来影响b...
阅读全文
摘要:以下来自solr in action。 包含: 词项频次。查询词项出现在当前查询文档中的次数。 反向文档频次。查询词项出现在所有文档总的次数。 此项权重。 标准化因子: 字段规范: 文档权重。 字段权重。 长度归一化。消除长文档的优势。因为长文档的词项频次一般会比较大。 协调因子。避免一个文档中出现某一个词项的次数太多导致总分值太大。目的是让结果中包含更多的是出现所有词项的文档。 具体说明见下文。...
阅读全文
摘要:这里可以看到,solr的版本,lucene的版本,jvm的版本,CPU核数,jvm启动参数,还有物理内存占用,交换空间占用,jvm内存占用。 这里可以看到每个core的情况。 这里可以看到java的所有properties。 这里可以看到当前选中的core的信息。文档数,最大文档数,片段数,删除文档数等。
阅读全文
摘要:定义 查询解析器用于将查询语句(q参数)解析成搜索语法。 默认解析器:lucene Solr在查询的时候,用到了QueryParser对用户输入做解析,solr默认使用的解析器是lucene,被称之为Standard Query Parser。Standard Query Parser支持原生的查询语法,使你可以方便地构造结构化查询语句。当然,它还有不好的,就是容错比较差,总是把错误抛出来,而不是...
阅读全文
摘要:部分摘自:http://blog.csdn.net/u010342038/article/details/52997388 界面: 参数说明: 注意,以下是对所有的查询解析器都通用的参数。 defType :选择用来处理查询的查询分析器。 q (query)查询的关键字,此参数最为重要,例如,q=i
阅读全文
摘要:原文地址:http://www.ruanyifeng.com/blog/2011/09/restful REST的定义 表现层状态转移(REST)是一种软件架构风格,包括创建可扩展Web服务的指导方针和最佳做法。 REST是应用于分布式系统中的组件设计的一组协调的约束,可以导致性能更好,维护性更好的架构。 反过来,作为一种架构,其提出了一系列架构级约束。这些约束有: 使用客户/服务器...
阅读全文
摘要:原文地址:http://blog.csdn.net/chichengit/article/details/9235157 http://blog.csdn.net/njpjsoftdev/article/details/54015485 介绍: 所谓倒排索引的倒排,其实我感觉定义的不太贴切:正常的文档索引是,描述一个文档有哪些关键字,也就是文档—关键字列表这种结构,但是倒排索引是关键字—...
阅读全文
摘要:solr架构图: 以下是Apache Solr的主要构建块(组件) 请求处理程序 - 发送到Apache Solr的请求由这些请求处理程序处理。请求可以是查询请求或索引更新请求。根据这些请示的要求来选择请求处理程序。为了将请求传递给Solr,通常将处理器映射到某个URI端点,并且它将为指定的请求提供
阅读全文
摘要:文章1比较通俗易懂,可以入门,转载地址是http://www.cnblogs.com/linbingdong/p/6253479.html Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。 网上有很多讲解Paxos算法的文章,但是质量参差不齐。看了很多关于Paxos的资料后发现,学习Paxos最好的资料是论文《Paxos ...
阅读全文
摘要:原文地址:http://blog.jobbole.com/95632/ 分布式一致性回顾 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。 为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的...
阅读全文
摘要:以下内容汇总自网络。 在早期的计算机中,程序是直接运行在物理内存上的。换句话说,就是程序在运行的过程中访问的都是物理地址。 如果这个系统只运行一个程序,那么只要这个程序所需的内存不要超过该机器的物理内存就不会出现问题,我们也就不需要考虑内存管理这个麻烦事了,反正就你一个程序,就这么点内存,吃不吃得饱
阅读全文
摘要:锁 linux本身实现了集中锁机制,各种锁机制之间的差别是,当锁已经被其他线程持有的时候,一些锁使用自旋的方式来等待,另外一些锁会当当前线程改变为睡眠状态然后等待被唤醒。 锁的争用 如果一个锁处于高度争用状态,那么这个锁会成为系统的瓶颈,严重降低系统性能。 伸缩性 作者在树上说是扩展性,或者翻译的问
阅读全文
摘要:概念: 进程调度决定那个进程投入运行,运行多长时间。 进程调度没有太复杂的原理,最大限度的利用处理器时间的原则是:只要有可执行的程序,那么总会有进程在执行,如果可运行的进程比处理器数目要多,那么注定要有部分进程在等待。 多任务操作系统: 抢占式多任务模式:由调度系统来决定那个进程在运行。 非抢占式多
阅读全文
摘要:进程和线程 进程不单单包含可执行代码(代码段),好包含打开的文件,挂起的信号,处理器状态,虚拟内存地址等。 线程:从内核的角度来说,它并没有线程这个概念。Linux把所有线程都当做进程来实现。内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程。相反,线程仅仅被视为一个与其他进程共享某些资源
阅读全文
摘要:内核Kernel只是操作系统的一部分,操作系统本身在内核之上还包含命令行shell和其他种类的用户界面。 通常内核包含: 中断服务程序 进程管理和调度程序 内存管理程序 进程同步方法 IO和设备等 在我的开发工作中,重点用到的是高亮的三个。 应用系统通过系统调用与内核通信: 关于系统调用和shell
阅读全文
摘要:首先看例子,这例子摘抄自开涛的跟我学spring3。 @Test public void testPlatformTransactionManager() { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setIsolationLevel(TransactionDefinition.IS...
阅读全文
摘要:事务类型 数据库事务类型有本地事务和分布式事务: 本地事务:就是普通事务,能保证单台数据库上的操作的ACID,被限定在一台数据库上; 分布式事务:涉及两个或多个数据库源的事务,即跨越多台同类或异类数据库的事务(由每台数据库的本地事务组成的),分布式事务旨在保证这些本地事务的所有操作的ACID,使事务可以跨越多台数据库; Java事务类型有JDBC事务和JTA事务: ...
阅读全文
摘要:参考文章: MyBatis的架构设计以及实例分析 MyBatis缓存机制的设计与实现 MyBatis的一级缓存实现详解 及使用注意事项 MyBatis的二级缓存的设计原理
阅读全文
摘要:原文地址: http://www.cnblogs.com/xiaolang8762400/p/7399892.html mybatis提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的JavaBean中。下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的。 设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,...
阅读全文
摘要:原文地址:https://www.w3cschool.cn/mybatis/f4uw1ilx.html Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普...
阅读全文
摘要:原文地址:http://www.cnblogs.com/fangjian0423/p/spring-mybatis-MapperScannerConfigurer-analysis.html 前言 本文将分析mybatis与spring整合的MapperScannerConfigurer的底层原理,之前已经分析过java中实现动态,可以使用jdk自带api和cglib第三方库生成动态代理。本文分...
阅读全文
摘要:原文地址:http://www.cnblogs.com/baizhanshi/p/5778692.html 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生...
阅读全文
摘要:原文地址:http://blog.csdn.net/fcbayernmunchen/article/details/8635427 Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段。本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理。 在传统的文件IO操作中,我们都是调用操...
阅读全文
摘要:NIO java使用NIO的目的是为了提升性能,实际上老的io程序也已经优化过了,速度也有相应的提升。 NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总
阅读全文
摘要:流 InputStream和OutputStream是所有的输入流和输出流的超类。他们两个都是抽象类。 read方法和write方法都是阻塞方法,这意味着如果不能里可以写入或者读取,比如因为网络问题,那么当前线程将会被阻塞。 InputStream的API: 方法摘要intavailable() 返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。voidclose() ...
阅读全文
摘要:top命令 [root@localhost ~]# top top - 12:40:09 up 8 min, 2 users, load average: 0.01, 0.12, 0.12 Tasks: 455 total, 1 running, 454 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.4 us, 1.9 sy, 0.0 ...
阅读全文
摘要:原文地址:http://www.blogjava.net/dashi99/archive/2008/12/30/249207.html HTTP/1.1 Cache-Control的理解 网页的缓存是由HTTP消息头中的"Cache-control"来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其...
阅读全文
摘要:bash和进程 当我们首次连接到shell环境,或者执行bash命令的时候,都是在启动一个新的进程。启动者和被启动者是父子的关系。 [root@localhost ~]# find / -name zjf & [root@localhost ~]# ps -l F S UID PID PPID C
阅读全文
摘要:setDomainEnv.sh JAVA_HOME和各种jvm参数,CLASSPATH都在这里配置 #!/bin/sh # WARNING: This file is created by the Configuration Wizard. # Any changes to this script may be lost when adding extensions to this ...
阅读全文
摘要:整个过程大同小异,不再笔记,就摘了网上的一篇。 原文地址:http://www.cnblogs.com/walk-the-Line/p/5409094.html 一、安装weblogic10.3.6 64位: -bash-4.1$ java -jar wls1036_generic.jarUnable to instantiate GUI, defaulting to console mo...
阅读全文
摘要:卸载自带jdk [weblogic@localhost root]$ rpm -qa | grep jdk java-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64 java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64 [weblogic@localhost root]$ rpm -e java-1.7...
阅读全文
摘要:groupadd group1 useradd -g group1 user1 passwd user1 groups 查看当前用户的用户组 finger和id命令可以查看用户信息
阅读全文
摘要:定义: linux shell script是一组shell命令组成的批处理文件。类似于windows的bat文件。 shell脚本基本语法 每当读取到一个ENTER符号,就开始尝试执行该行的命令。 如果一行的命令太长,可以在行尾使用反斜杠\将命令延续到下一行。 [root@localhost testsh]# cat testenter.sh echo zjf is a good\ man#开...
阅读全文
摘要:原文地址:http://www.cnblogs.com/Quincy/archive/2012/03/26/2418485.html linux的正则表达式和js的基本没什么差别。所以不再详细研究了。网上摘了一篇文章。 在使用grep、awk和sed命令时,需要使用正则表达式。比如我通过grep找代码编译结果中是否有错误。或者是否有我代码的错误。这里说下正则表达式基本的应用: • 匹配...
阅读全文
摘要:别名: alias ll="ls -l" 命令的查找步骤: 如果是使用相对命令(如./command直接执行当前目录下的command文件),那么直接在当前目录下找到这个文件并执行。 绝对命令(如/usr/mysql/command)的方式,那么直接执行这个文件。 如果没有使用绝对路径,也没有./,那么先查看有没有设置的alias,否则就去PATH环境变量配置的路径下寻找,然后执行第一个寻找到的文...
阅读全文
摘要:变量的定义: 通常,作为一种习惯约定,环境变量声明全部使用大写。 简单的定义只需要=就可以,这种定义的类型只能是字符串,如果要定义其他类型的变量,需要使用declare。 testv="this is a test virable" 这种方式是定义字符串。整个语句都不能有空格,因为一旦有空格就会作为命令来执行,如果变量的内容有空格,那么就用引号括起来。 [root@localhost ~]# te...
阅读全文
摘要:Shell定义 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写...
阅读全文
摘要:vi vim linux有多重编辑器,但是在不同的distribution上不一样,vi基本是在每个distribution上都支持的。 vim是vi的增强版。vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计。 vi的三种模式: vim编辑器的三种模式:一般模式、编辑模式和命令行模式。 在一般模式中可以进行删除、复制和粘贴的功能,但是无法更加明确的编辑文件内容。 从一般模...
阅读全文
摘要:linux文件属性 如下: [root@localhost /]# ll 总用量 40 lrwxrwxrwx. 1 root root 7 5月 26 06:11 bin -> usr/bin dr-xr-xr-x. 3 root root 4096 5月 25 22:50 boot drwxr-xr-x. 3 root root 15...
阅读全文
摘要:命令的格式: command [options] [arguments] command:命令 options: --单词全称 或 -单字简称 如: ls --all 等于 ls -a ls -a -b -c 等于 ls -abc 注:linux命令区分大小写。 基本命令 date 显示日期与时间。 Tab键:命令补全和文件名补全 Ctrl + C:中断当前程序。 Ctrl +...
阅读全文
摘要:CPU: CPU内部可以分为两个主要单元:算数逻辑单元和控制单元。 算数逻辑单元主要用于程序运算和逻辑判断,控制单元主要用于协调各个组件和各单元的工作。 CPU基本可以分为两种: 精简指令集和复杂指令集系统。 精简指令集: 每个指令都较为精简,执行时间比较短,完成的操作也比较简单。指令的性能较佳,但是要实现复杂的功能,需要多个指令来完成。常见的微指令集CPU有Sun公司的SPARC系列,IBM的P...
阅读全文
摘要:意图:将一个命令请求封装成一个对象。解决命令的请求者和命令的实现者之间的耦合关系。 经典的命令模式包括4个角色: Command:定义命令的统一接口 ConcreteCommand:Command接口的实现者,用来执行具体的命令,某些情况下可以直接用来充当Receiver。 Receiver:命令的实际执行者 Invoker:命令的请求者,是命令模式中最重要的角色。这个角色用来对各个命令进行控制。...
阅读全文
摘要:设计原则1: 找出应用中可能需要变化的部分,把他们独立出来,不要和那些不需要变化的部分融合在一起。 设计原则2: 针对接口编程,而不是针对实现编程。 这里的接口包含抽象类。 编程时针对超类型(父类)进行编程,也就是说变量的声明类型(或方法的返回类型)是超类型,而不是具体的某个子类。 设计原则3: 多用组合 少用继承。 组合和继承都能作为将不变的代码和变化的代码分开的方式,但是组合更加灵活,可以将一...
阅读全文
摘要:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。 类适配器模式 类的适配器模式把适配的类的API转换成为目标类的API。 在上图中可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法...
阅读全文
摘要:单例模式的几种实现方式 单例模式的实现有多种方式,如下所示: 1、懒汉式,线程不安全 是否 Lazy 初始化:是 是否多线程安全:否 实现难度:易 描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。这种方式 lazy loading 很明显,不要求线程安全,在多线程不...
阅读全文
摘要:简单工厂模式 public class ShapeFactory { //使用 getShape 方法获取形状类型的对象 public Shape getShape(String shapeType){ if(shapeType == null){ return null; ...
阅读全文
摘要:装饰器模式 典型的例子:JAVA IO。 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰...
阅读全文
摘要:关于基本的OOP特征: OOP的几大特征是抽象 继承 封装 多态。 我们把共同的部分抽象出来作为抽象类的存在,使用继承和接口来实现多态,然后私有的部分封装起来。一定程度上说,这些概念都是简单的设计模式。 设计原则1: 找出应用中可能需要变化的部分,把他们独立出来,不要和那些不需要变化的部分融合在一起。 设计原则2: 针对接口编程,而不是针对实现编程。 这里的接口包含抽象类。 设计原则3: 多用...
阅读全文
摘要:来自:http://didiluck.iteye.com/blog/1779640 Spring 标注@Autowired 如果做到自动装配私有变量而不使用set方法的原理熟悉jdk的话就知道,方法就是使用java.lang.reflect.Field类的:Field.setAccessible(true); 将字段设置为'true',就可以直接使用set方法为其赋值了。如果不设置'true...
阅读全文
摘要:DIP: Dependency Inversion Principle。翻译过来是依赖反转原则,也叫依赖倒置原则。 依赖倒置原则是设计模式几个重要原则之一。具体定义就是,底层模块依赖高层模块定义的接口,高层模块不依赖底层模块的实现。 IOC:Inversion of Control。控制反转。 控制反转是实现依赖倒置的一种设计模式。在高层模块引入底层模块的实现的时候,不再通过在本身new的方式来创...
阅读全文
摘要:下载源代码包并解压,我下载的是3.2版本,下载地址在https://github.com/spring-projects/spring-framework/tree/3.2.x 因为Spring是使用gradle管理的,所以要下载gradle,下载地址在https://gradle.org/releases/,下载后解压,配置环境变量到bin目录。 执行Spring下载目录下的import-in...
阅读全文
摘要:B-Tree和B+Tree 目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构。 首先,对单个节点来说,是一个key value结构,key是作引的列,value有两种,对于聚簇索引来说,value就是数据,对于二级索引来说,value就是指向数据的地址。 B-Tree的结构如下: B-tree的特点是非叶子节点上也有数据。 B+Tree是B-...
阅读全文
摘要:注意:下面示例中的key1和key2代表两个索引,key_part1和key_part2代表一个复合索引的第一列和第二列。non_key代表非索引列。 优化SQL语句 where语句优化: mysql会自动执行的一些优化有: 删除不必要的括号: 常量条件替换 (a b>5 AND b=c AND a=5 常量条件去除 (B>=5 AND B=5) ...
阅读全文
摘要:查询缓存: 在解析一个sql之前,如果查询缓存是打开的,mysql会去检查这个查询(根据sql的hash作为key)是否存在缓存中,如果命中的话,那么这个sql将会在解析,生成执行计划之前返回结果。 ps:在5.1版本之前,使用=?参数这种不能使用查询缓存。 查询优化器: oracle使用基于cost的优化器。 可以使用last_query_cost来获取当前回话的上一个查询的cost: /*使用...
阅读全文
摘要:在大型web应用中,缓存可算是当今的一个标准开发配置了。在大规模的缓存应用中,应运而生了分布式缓存系统。分布式缓存系统的基本原理,大家也有所耳闻。key-value如何均匀的分散到集群中?说到此,最常规的方式莫过于hash取模的方式。比如集群中可用机器适量为N,那么key值为K的的数据请求很简单的应
阅读全文
摘要:整形的取值范围: TypeStorageMinimum ValueMaximum Value(Bytes)(Signed/Unsigned)(Signed/Unsigned)TINYINT1-1281270255SMALLINT2-3276832767065535MEDIUMINT3-83886088388607016777215INT4-214748364821474...
阅读全文
摘要:以下内容翻译自mysql5.6官方手册。 InnoDB是一种通用存储引擎,可平衡高可靠性和高性能。在MySQL 5.6中,InnoDB是默认的MySQL存储引擎。除非已经配置了不同的默认存储引擎,否则发出没有ENGINE =子句的CREATE TABLE语句会创建一个InnoDB表。 InnoDB的主要优势包括: 其DML操作遵循ACID模型,具有提交,回滚和崩溃恢复功能的事务以保护用户数据。...
阅读全文