- 浏览: 12788 次
- 性别:
- 来自: 北京
最新评论
文章列表
数据存储的重要性大家都知道,在此就没必要去强调了。 那么如何将软件运行的这些数据有效合理的存储起来呢? 在设计时可以参考如下几点:
1、表结构的设计优先考虑遵循3范式
为什么要遵循第3范式?
...
理解高并发_我对并发编程的理解
- 博客分类:
- 理解高并发
对于并发编程, 涉及的技术点非常多, 我们首先需要明确一些基本概念,只有概念清晰,才能做到在以后深入学习关键技术的过程中不致于感觉到吃力和迷惑。 其次,我们还需要明白在并发编程最需要关注的问题是什么? 带着关键问题去学习,才能够起到事办功倍、稳扎稳打的效果。
下面是我所总结的一些很多人容易混淆的概念:
1. 高并发、多线程
● 高并发
高并发是请求,指的是多个客户端同一时刻向服务端发送请求, 它是一种现象。
比如,电商网站在双11凌晨12:00分 同时有2000个下单请求。
● 多线程
...
高并发已不是个热词, 然而用好它并非易事,很多时候如果没有使用得当,极容易产生适得其反的效果。 本系列我将系统性的给大家分享高并发的技术要点。 其具体技术点包括以下:
1. 我对并发编程的理解
2. synchronized原理及用法
3. 显式锁的用法
4. 锁的优化技巧
5. 线程通信之_wait/notify
6. 线程通信之_semaphore信号量
7. 线程通信之_countDownLatch
8. 线程通信之_cyclicBarrier循环栅栏
9. Future、Ca ...
1、允许mysql远程连接
同4
3、查看字符集设置
show variables like 'character%';
4、数据库赋权
grant all on *.* to 'root'@'%' identified by 'Reset123QWE';
flush privileges;
grant 权限名(所有的权限用all) on 库名(*全部).表名(*全部) to ‘要授权的用户名’@’%’(%表示所有的IP,可以只些一个IP)
grant USAGE on cms.* t ...
一、排序算法
a. 一次扫描性能高,减少了io随机请求的次数
b. 排序操作是在内存(sort_buffer)里面进行的, 先select结果再进行排序,如果结果值大于max_length_for_sort_data 阀值设置需要二次io读取
c. 关联查询会产生临时表再进行order by
二、优化思路
a. 尽量减少io的读取 max_length_for_sort_data 阀值设置
b. 尽量使用有序排序输出。 运用覆盖索引、主键索引
c. 控制select 字段数,不需要的字段没必要输入
d. …….
一次扫描算法(4. ...
Mvcc其实并不是真正意义上实现的乐观锁。mysql只是用它来解决事务隔离级别中的不可重复读的问题。
当事务T1 开启后, 需要修改某行, 会先给该行加上排他锁, 并且生成一个版本。
此时,事务T2进入,读取的记录永远是事务T1提交前的一个版本。
避免了2次读的记录不一致的情况。
Limit 是将所有记录查询出来进行范围限制输入。 会导致前面不需要的记录也进行io读取。
优化整体思路就是尽可能少操作io, 常用手段:
1、使用记录主键的方式进行优化
如: select * from p2p_20131230 where main_id > 1000000 order by main_id limit 10;
2、使用子查询进行查询
select * from p2p_20131230 where main_id >= (select main_id from p2p_20131230 limit 1000000,1 ...
对于锁需要重点掌握以下:
1. 锁分类
● 表锁
● 行锁
● 对象锁(meta-table锁),在table cache层实现
● 页锁
● 排他锁(互斥锁、X锁)
● 共享锁(S锁)
2.锁的使用注意事项
● innodb引擎是行级锁,适用于高并发场景的后台系统
● myisam引擎采用的是表级锁,适用于前端web系统
● 执行delete\update时默认会加互斥锁
● innodb, 如果delete \update在where条件后的字段没有加索引,会造成锁表,严重并发性能
● 修改字段、删除主键、删除主键字段时会造成meta-ta ...
理解mysql_数据类型
- 博客分类:
- 理解mysql
bigint: 9223372036854775807 20位 2^63-1
int: 2147483647 10位 2^32-1
smallint : 32767 5位 2^16-1
tinyint: 128
JDBC Type Java Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean
BOOLEAN boolean
TINYINT byte
SMALLINT ...
实现原理:
mysql的主从同步主要是通过bin-log来实现, 它是数据库服务器来控制的而非存储引擎控制,大概思路是master服务器从log buffer刷新磁盘的同时生成一个bin-log文件,通过socket消息发送给slave,slave执行完毕后(有可能是失败,也有可能是成功)向master报告一个消息, master根据情况判断是否commit还是rollback。
配置主从复制:
配置my.cnf.
1)、主:
grant replication slave on *.* to jk identified by '123456';
...
我们经常会出现A事务未交更改,B事务就能看到, 或者B 事务执行2次相同sql但查询的结果不一致,遇到这种情况可以通过设置不同的事务隔离级别来解决。
mysql有四种隔离级别:
● read-uncommited(读-不需要提交):
...
WAL机制, 先采用日志的方式将操作记录下来,然后刷新磁盘。
InnoDB遵循WAL协议,在日志持久化到磁盘之后,才会将日志对应的脏页刷 回磁盘;
InnoDB内存中,DML操作顺序如下:
– 写Undo(获取ROLLBACK_PTR系统列)
– 修改Page
– 写Redo的顺序
不同的Update语句,写的日志量有较大差异(三种Update Case);
– In Place Update日志量最小,操作最简单;
– 不修改主键列,日志量其次;
– 修改主键列,日志量最大,操作最复杂;
日志文件:
redo:保证事务的 ...
理解mysql_索引的原理及优化技巧
- 博客分类:
- 理解mysql
innodb的索引:
● innodb采用索引组织数据的形式,它是在存储引擎层面实现的,与后端的服务器层没有关联。不同的存储引擎有不同的实现算法。
● 索引的原理
索引采用b tree(平衡树)树的形式保存,所以是有顺序的。
索引的数据存储在表空间(tablespace)里面,
聚集索引(主键索引)上面存储了整个行的数据,而辅助索引上面仅存了指向主键的指针,因此辅助索引查询效率要低于主键索引1倍。
在插入和删除的时候性能比较低,需要维护平衡树。
● ...
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。
只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱动具体是怎么样批量执行的? 你是不是需要看一下内幕,才敢放心地使用这个选项? 下文会给出答案。
另外,有人说rewriteBatchedStatements只对INSERT有效,有人说它对UPDATE/ ...