MySQL Proxy是一个处于你的client端和MySQL
server端之间的一个中间件,实现负载均衡、读写分离、故障转移。
|||||||||||||||安装|||||||||||||||||||||||
1、安装之前
按照手册安装MySQL Proxy之前先要安装以下软件
libevent 1.x or higher (1.3b or later is preferred)
lua 5.1.x or higher
glib2 2.6.0 or higher
pkg-config
libtool 1.5 or higher
MySQL 5.0.x or higher developer files
rpm查看libevent
1、主要配置项
Query_cache_type
这个选项表示缓存是否被激活。具体选项是OFF、ON或DEMAND。DEMAND的意思是只有包含了SQL_CACHE选项的查询才能被缓存
Query_cache_size
分配给查询的总内存,以字节为单位。它必须是1024的倍数。
Query_cache_min_res_unit
分配缓存块的最小值。
Query_cache_limit
这个选项限制了mysql存储的最大结果。如果查询的结果比这个值大,那么就不会被缓存。
Query_cache_wlock_invalidate
这个选项指是否缓存其他链接已经锁定了的表。默认值是OFF,可以让你从其他链接已经锁定了的表中读取缓存过的数据,这改变了服务器的语义。因为这种读取通常是不被允许的。
(2012-02-07 14:26)
在组织数据库时,需要使用主键与外键约束才能使用ActiveReocrd的关系操作;
下面的一个ER图显示的是一个例子

ER图
申明关系
两张表之间的关系无非三种:一对多;一对一;多对多; 在AR中,定义了四种关系:
(2012-01-30 22:22)
最近哈希表碰撞攻击(Hashtable collisions as DOS
attack)的话题不断被提起,各种语言纷纷中招。本文结合PHP内核源码,聊一聊这种攻击的原理及实现。
哈希表碰撞攻击的基本原理
哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表。PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结构存储)。
理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内定位到一个桶(术
(2012-01-30 11:59)
consistent hashing 算法早在 1997 年就在论文 Consistent
hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛;
1 基本场景
比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache
上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache
;
选择正确的数据类型
1、占用最小的磁盘空间
2、数据类型越简单越好
3、尽量避免null值
Myisam特性
1、锁和并发
MyISAM锁定了整张表,而不是行。读取程序能获得将要读取的表的读锁。写入程序获得写锁。然而,当查询语句执行的时候,仍然可以插入新的数据。(并发插入)。这个是非常有用的特性。
2、自动修复
MySQL支持自动检测和修复MyISAM类型的表。
3、手动修复
你可以使用CHECK TABLE和REPAIR
TABLE命令来检测表的错误和修复错误。当服务器停止的时候,你可以使用myisamchk命令行工具去检查和修复表。
4、索引特性
在MyISAM表中,你可以给第一个500字符的BLOB和TEXT列加上索引,MyISAM支持全文索引。为了复杂的查询,索引了单独的词。在以后会详细介绍索引。
5、健写入延迟
MyISAM表标有DELAY_KEY_WRITE的创建选项。意思是在一个语句结束后,不会把更改的索引写入到硬盘上。而是MyISAM在内存中缓存了更该。当它精简缓冲区或者关闭表的时候,就会把缓存
RANGE分区《范围分区》
///常运用于根据时间范围
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
LIST分区
///常用于地域性分区
PARTITION BY LIST(store_id)(
PARTIT
当前我用的是APC-3.0.19 stable ,用户自己到 http://pecl.php.net/package/APC
下载最新版。
①安装
wget http://pecl.php.net/get/APC-3.0.19.tgz
tar xzvf APC-3.0.19.tgz
/usr/local/webserver/php/bin/phpize
./configure –enable-apc –enable-apc-mmap
–with-php-config=/usr/local/webserver/php/bin/php-config
–prefix=/usr/local/apc
make && make install
注:安装编译后检查相应目录:
ll
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/
-rwxr-xr-x 1 root root 416628 12-15 17:13 apc.so
安装成功!
②配置/etc/php.ini
vi /usr/local/webserver/php/etc/php.ini
shift+g到最末行,末尾加入
[apc]
extension=”a
1.为什么要用MongoDB
1>查询速度非常快(通常来说,它比一般的关系型数据库快5位左右),海量数据的存储
2>高扩展性,自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
Sharding分片,这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding
的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群
3>高可靠性,复制及自动故障转移:MongoDB
数据库支持服务器之间的数据复制,复制的主要目标是提供冗余及自
在MySQL中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是MongoDB
Database Profiler。所以MongoDB 不仅有,而且还有一些比MySQL的Slow Query
Log更详细的信息。
开启 Profiling 功能
有两种方式可以控制 Profiling
的开关和级别,第一种是直接在启动参数里直接进行设置。 启动MongoDB时加上–profile=级别
即可。
也可以在客户端调用 db.setProfilingLevel(级别) 命令来实时配置,Profiler
信息保存在 system.profile
中。我们可以通过db.getProfilingLevel()命令来获取当前的Profile级别,类似如下操作