`
文章列表
按底层实现方式划分,Java文件读写有两种:用户空间拷贝 和 内核空间拷贝。 用户空间拷贝   数据传递需要在 用户空间 和 内核空间 之间转换。   java.nio.Files.copy() 几个重载方法内部都是这种方式。  典型用户空间数据拷贝: void copy(InputStream source, OutputStream target) { byte[] buffer = new byte[8192]; int n; while ((n = source.read(buffer)) > 0) { target.write(b ...
1. 测试目标与范围 本次测试的对象是什么。 该测试的意义是什么,期望得到什么信息。   2. 测试环境 2.1 软硬件部署 被测系统的部署情况,它与其它服务对接的部署方式。   2.2 配置清单 被测系统性能相关参数设置。 宿主机资源配置信息。   2.3 业务数据说明 数据类型,数据量,受影响的业务。   3. 测试方法 例: 方法简述 通过模拟的请求发起者,向被测系统发送请求; 记录被测系统的的吞吐量、响应时间、资源利用(CUP/内存/硬盘IO/网络IO等)、成功率。监控对象包括服务器总体状况 ...
当MySQL单表记录数太多时,各项操作性能会明显下降。 相关优化策略有很多,但肯定不是所有策略都适合某个特定案例。也许在技术层面上,很多策略都能提高性能,但我们也得考虑成本和收益(ROI)。 另,是否有性能提升 ...
水平拆分是优化数据库大表的常见方式。   拆分方式 水平拆分的一种实现方式是使用数据库本身支持的分区表特性,即多个物理子表组成一个逻辑总表。 也可以显式地 (库内)分表,或 分库。 库内分表 可以缓解单表 ...

【MySQL】表分区

MySQL表分区是MySQL提供的一种简单的数据表水平拆分方法。 分区表是一个逻辑表,它由多个物理子表组成。 目前只有 InnoDB 和 NDB 正式支持表分区。   注:表分区虽然可以缓解单表数据量过大的问题,但对于减轻数据库服务器压力的作用不大,所有请求还是在争用同一服务器的资源。   1. 创建分区表 可在创建表时指定分区方式。例: create table t1 ( id int, amount decimal(7,2), tr_date date) Partition by hash(month(tr_date)) Partitions 6; ...
垂直拆分是数据拆分方式中比较简单的方式(相对于水平拆分而言)。 注意:垂直拆分后单表数据量未变,依然很大(需要 水平拆分)。   垂直拆分有 分库 和 分表 两种方式。   垂直分库 垂直分库就是根据数据表的 ...
MySQL 的默认事务隔离级别是 Repeatable Read(可重复读)。 Oracle 的默认事务隔离级别是 Read Committed(读已提交)。 这是一个比较“怪”的现象。毕竟这两个事务隔离级别是差异是比较大的,而这两个数据库都是通用型的产品。 真实原因是MySQL为了规避一个数据复制场景中的缺陷,而选择 Repeatable Read 作为默认隔离级别。   基于 Statement 的 binlog binary log 的主要用途 MySQL的 binary log 记录了数据库的“事件”。这些“事件”描述了数据库的改动,包括 表的创建、数据修改等。 ...

MyBatis缓存

  MyBatis 有 一级缓存 和 二级缓存。   一级缓存 一级缓存,默认就是开启的,范围是 Session。 可通过 localCacheScope 设置不同的范围,支持两种范围: SESSION:同一个 SQL Session 内的查询共享数据。(默认配置)(类似事务隔离级别中的 “Repeatable Read”) STATEMENT:缓存仅用于语句执行;同一个 SQL Session 内的不同调用不会共享数据。 (类似 “Read Committed”) 注意:MyBatis中的Session与Spring中的事务绑定。Spring默认每次都创建一个新 ...
Spring不直接管理事务,它提供了事务管理器,但是具体相关管理职责由 Hibernate、MyBatis 等持久层框架实现。由这些持久层框架实现与数据库服务的通信。   @Transactional 使用Spring提供的事务框最普遍的方式是 在事务方法上添加标记 @Transactional,并设置相关属性。如: @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.REPEATABLE_READ) public void runInTransaction() { ... ...
避坑:自定义 Spring MVC 的 HttpMessageConverter 时,应显式设置各Converter的先后顺序,避免被Spring框架的“自动调整”打乱优先级。   @Configuration public class MyConfig impliments WebMvcConfigurer { @Override public void configureMessageConverters(List ...

【MySQL】索引结构

为数据表增加索引(Index)可以提升MySQL数据查询效率。MySQL中所有类型的数据字段都可以有索引。索引指向了数据表中的记录(行),可以快速判断某行记录是否符合 where 语句中的限定条件。 但是索引并不是越多越好: 索引需要耗费存储空间; 索引越多,MySQL在决定采用哪个索引时也会消耗更多时间; 数据的 增、删、改 都会引起索引的维护操作; 如果总共就一、二千条数据,或目标列的查询使用率很低,或重复索引值占比过高,就没必要创建索引。   MySQL中的索引结构 B+Tree MyISAM 和 InnoDB 都使用了 B+Tree 作为索引的数据 ...
事务的 4个 特性(ACID) 原子性(Atomicity):事务是不可分割的工作单元,其包含的操作,要么都做,要么都不做。 一致性(Consistency):事务执行后,数据记录必须符合各项约束条件。 隔离性(Isolation):并发事务的执 ...

【MySQL】索引类型

MySQL支持多种类型的索引。在使用时可以根据业务需求选择合适的索引类型。   普通索引 就是没有特殊限制的索引。示例: create index 'index_name_1' on table1 (column1);   唯一索引 唯一索引所使用的列(Column)值必须唯一,可以是空值,而且是允许多个空值。 如果索引引用了多列,则其组合的列值必须唯一。 示例: create unique index 'index_name_1' on table1 (column1);   主键索引 一种特殊的唯一索引,不允许列值为空值。通常在创建表时就创建主键 ...
较真点说,“字符集”指多个字符的合集,“字符编码”指对字符集中的字符进行编码的方式(方便信息传输)。 字符集 与 字符编码 是 1:N 的关系。 如,UTF-8 是针对 Unicode字符集 的一种编码方式。 在实际使用场景中,往往 ...
InnoDB 和 MyISAM 是MySQL中最常见的两种存储引擎。 通常: 读操作密集的表,选MyISAM 写操作密集的表,选InnoDB   二选一需要考虑哪些特性 以下特性是 InnoDB 和 MyISAM 二选一时通常需要考虑的特性。 MyISAM MyISAM 基于 ISAM(Indexed Sequential Access Method)改良而来。性能好,但是: 只有表锁,没有行锁。 读数据时,对所有读到的表加锁; 写数据时,对表加排它锁。 不支持事务 不支持崩溃后安全恢复 不支持外键   InnoDB ...
Global site tag (gtag.js) - Google Analytics