- 浏览: 166976 次
- 性别:
- 来自: 广州
文章列表
索引的数据结构(转)
- 博客分类:
- mysql
传送门
摘要
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。
文章主要内容分为三个部分。
第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。
索引(BTree和hash区别)
- 博客分类:
- mysql
在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议。
二者区别
备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTREE,例如像下面这样的写法:
CREATE TABLE t(aid int unsigned not null auto_increment,userid int unsigned not null default 0,username varchar(20) not null default ‘’,detail varchar(255) not null default ‘’,pri ...
图示
总结:
一、设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。
二、设计模式的六大原则:
总原则-开闭原则
对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所 ...
日志:
1、error log日志,服务器开启、关闭或运行中的错误信息。通过此命令查看日志地址:
#mysql> show variables like 'log_error';
2、bin log二进制日志:记录修改数据或有可能改变数据的语句。
3、gemerol log通用日志:记录数据库所有操作。
4、slow log慢查询日志:记录执行时间超过指定时间(配置文件设置)的语句。一般用来查找有问题的sql,来优化等,常用。
MySql安全:
1、分配权限:
2、绑定监听IP:
mysql服务器有两个IP地址,一个作为外网的,一个内网的。只需要在配置文件 ...
直接复制而来,回顾知识点看到。
1、内连接:利用内连接可获取两表的公共部分的记录
2、外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)
1)左连接:select * from A Left JOIN B ON A.Aid=B.Bnameid
2)右连接:select * from A Right JOIN B ON A.Aid=B.Bnameid
mysql自定义函数,可以实现像count()等自定义函数。写起来和存储过程有点像。
Map、List等集合
- 博客分类:
- javaSE
编程思想是相通的,只是实现方式有所不同。
数据库中,我们常常用索引来找到具体某个值,当然会经常用联合索引。而在开发中,常常会有种情况:集合的key使用自定义类对象,需要自己实现hashCode()和equal()方法。
再来看看Map、List、Set等集合的实现:
一、Map,以hashMap为例,
1)初始化为长度16的数组,数组每个元素为一个链表对象。
2)当新建链表元素个数超过threshold,数组长度就扩展2倍。
3)当put时候,用if (e.hash == hash && ((k = e.key) == key || key.e ...
思路:使用装饰者模式,定义MyRequestSessionWrapper类继承HttpServletRequestWrapper类,重写session的get和setAttr等方法;然后通过filter在执行servlet前,用MyRequestSessionWrapper对象来代替HttpServletRequest。
代码如下:
public class MyRequestSessionWrapper extends HttpServletRequestWrapper {
public MyRequestSessionWrapper(HttpServletRequest re ...
以jetty服务器为例:
引用:ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
...
游戏服务器知识点问题
- 博客分类:
- 游戏服务器
一、游戏服务器开发中,与服务器通讯的过程中,TCP长连接传输的数据包肯定会存在粘包(前一个操作数据包和后一个数据包放在一起),断包(一个操作数据包分成若干段传输)。怎么处理这种问题呢?
解决方案:每个数据包添加包首部,首部中应该至少包含数据包的长度,通过先将数据包放入缓存(Buffer),再从Buffer中读取一个完整的操作数据包来处理。一个数据包传过来后,先放入Buffer中,数据包不完整则break等待下一个数据包的到来。
另外,缓存Buffer可放在用户session对象中,而Buffer初始化时ByteBuffer.allocateDirect(6000)是DirectByteB ...
多线程join()方法
- 博客分类:
- javaSE
直接代码:
public static void main(String[] args) {
List<Thread> list = new ArrayList();
for (int k = 0; k < 10; k++) {
Thread t = new MyThread(k);
list.add(t);
}
for (Thread t : list) {
t.start();
}
int n = 0;
for (Thread t : list) {
try {
t.join(); ...
spring的jdbc和mybatis
- 博客分类:
- spring源码
引用:由于JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate类使用DataSourceUtils获取及释放连接,而且连接是与线程绑定的,因此这些JDBC模板类是线程安全的,即JdbcTemplate对象可以在多线程中重用。
spring的JDBC:
DataSourceUtils得到一个数据库连接的实现,和hibernate等ORM框架一样,得到连接后放入ThreadLocal中,同一个线程用同一个连接,源码如下:
public static Connection doGetConnection(DataSourc ...
spring的aop
- 博客分类:
- spring
一、基于注解的aop编程:
1)需要的jar包,pom.xml:
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<arti ...
数据是最重要的,所以定时备份是相当重要的,本文使用mysql,所以备份很有必要用到mysql的binlog,然后再结合linux的定时任务crontab进行导出数据库冷备份。可以敲命令,不过在图形化界面操作相对方便。可参考
一、备份日志,开启binlog(默认关闭):
通过mysql> show variables like 'log_%';查看:
如果binlog选项为OFF,则在配置文件加上log-bin=D:/Mysql/binlog/mysql-bin.log,注意window和linux配置文件不同、路径不同。
二、冷备份:
mysqldump导出备份数据(默认开启 ...
本次使用linux版本是centos7:
1、下载压缩包到本地:
比如:curl http://download.redis.io/releases/redis-3.0.4.tar.gz -o redis-3.0.4.tar.gz
或者:# wget http://download.redis.io/releases/redis-3.0.4.tar.gz
如果没有安装过 GCC 和 Make,那么就使用 yum 安装:
...
一、线程池:
Executors是创建线程池的工厂方法,首先看Executors的所有方法:其中有三个比较常用:
以上三个方法返回的对象不同,其实看看源码就清楚了:
public interface ScheduledExecutorService extends ExecutorService {
ScheduledFuture<?> schedule(Runnable arg0, long arg1, TimeUnit arg3);
<V> ScheduledFuture<V> schedule(Callable< ...