`
文章列表
传送门 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。 文章主要内容分为三个部分。 第一部分主要从数据结构及算法理论层面讨论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 ...
图示 总结: 一、设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 二、设计模式的六大原则: 总原则-开闭原则 对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所 ...

mysql知识梳理

日志: 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等集合

编程思想是相通的,只是实现方式有所不同。        数据库中,我们常常用索引来找到具体某个值,当然会经常用联合索引。而在开发中,常常会有种情况:集合的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()方法

直接代码: 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(); ...
引用:由于JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate类使用DataSourceUtils获取及释放连接,而且连接是与线程绑定的,因此这些JDBC模板类是线程安全的,即JdbcTemplate对象可以在多线程中重用。   spring的JDBC: DataSourceUtils得到一个数据库连接的实现,和hibernate等ORM框架一样,得到连接后放入ThreadLocal中,同一个线程用同一个连接,源码如下: public static Connection doGetConnection(DataSourc ...

spring的aop

一、基于注解的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导出备份数据(默认开启 ...

redis

本次使用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 安装: ...

线程池汇总1

一、线程池: Executors是创建线程池的工厂方法,首先看Executors的所有方法:其中有三个比较常用:   以上三个方法返回的对象不同,其实看看源码就清楚了: public interface ScheduledExecutorService extends ExecutorService { ScheduledFuture<?> schedule(Runnable arg0, long arg1, TimeUnit arg3); <V> ScheduledFuture<V> schedule(Callable< ...
Global site tag (gtag.js) - Google Analytics