Jump to Navigation

Database

MySQL, PostgreSQL数据库

redis中的key的两种过期机制

可以说redis是一个纯内存的缓存系统,其能存储的数据量不会超过节点的最大内存容量。
所以key的过期清理机制非常重要。

一种比较常用的机制是,在读取key的时候,检测是否过期。
这是当前所有的内存K/V都在使得的办法,这种办法的CPU代价很低,顺便就能实现。
不过这种机制有一个问题,对于那些比较少访问的数据,
很有可能一直没有机会处理失效,而长时间浪费本应该回收的内存。

redis实现了另外一种过期机制,定时分批扫描有过期设置的key。
比如每秒扫描100个这种key,如果有已经过期的,则删除。
下一秒扫描下个100个key,循环执行。
这种机制保证了过期的key一定能够从内存中删除,节省内存空间。
这机制由于需要定时扫描,有一定的CPU消耗。不过在每次扫描时,
并非扫描全部数据,所以算是对CPU消耗与内存消耗两者的比较好的折衷方案。

Category:

支持自动重连接的PHP PDO类完善

PHP的PDO是取代原来的php-mysql、php-mysqli模块的统一数据库访问模块,

比直接使用各自数据库提供的原始扩展函数相比,PDO的好处是移植性更好些。

最近在使用PDO开发框架过程,对其有了更多些的认识。

*)对长连接的支持

*)异常的使用

*)连接的自动关闭控制

*)连接中断的重连接(MySQL has gone away)

*)

最近遇到特别麻烦的问题,使用长连接是,全出来 MySQL Server has gone away的问题。

这种情况下PDO没有办法检测并重连接,也没有提供重新连接的相关方法。

这样对长连接的使用有点悲催了,开始运行的很正常的系统,运行一段时间后,却因为数据库连接的问题系统瘫痪了。

经过很多的代码测试与查找资料,实现了一个能重连接的PDO封装。在此分享思路与主要代码,补充PDO在实际应用中遇到的问题。

Category:

对于couchbase执行效率的一点认识

在2012年,对于IT行业来说是NoSQL的一年,所有的NoSQL产品不断出现,刷新着IT行业的技术理念。

在实际应用中,讨论比较多的,依旧是mongodb, redis, (其他可能还有许多),couchbase算是比较新的一种。

选择couchbase的理由在于,其设计理念上比较先进,水平扩展的功能基本透明,集群内的节点上的数据自动分布,添加减少节点时的rebanlance功能,与其他几个产品相比,比较简洁,也很实用好用。

接下来讨论它的效率了,couchbase 的集群功能与进程通信使用erlang实现的,所以对于单个操作上根本不占优势。因为即使单个操作,在实现上依然需要考虑集群的数据分配,数据的备份与磁盘的定入。

但是这种实现也有好处,在并发早大的情况下,其性能下降并不明显,couchbase官方的测试结果最大能达到每个节点写入2w个k/v。我自己的测试,也不低于这个数据。
根据这种情况,它更像数据库了。

所有在追求极致的访问速度,但访问并发不大的情况下,使用couchbase也许不太合适,但大多数项目下,还是比较好的选择。

Category:

membase-1.7数据库导出备份

*) 存储位置/opt/membase/var/lib/membase/default-data/
*) 执行数据备份:
cd /opt/membase/
./bin/mbbackup ./var/lib/membase/data/default-data/default /data1/backup/
注意上面的命令的第一个参数,指向桶的名字命令的数据文件default。
这样就把default桶的数据导出来了。查看导出文件大小,
ls -lh /data1/backup/
这个mbbackup命令没有别的参数,也没有别的选择,这么执行就ok。
这么备份出来的是整个集群的数据吗?还是只这个结点的呢? 对,数据仅是在这个结点上的。
*) 配置备份
./var/lib/membase/config/config.dat
把这个配置文件也一起备份了,或者还是把./var/lib/membase/config/整个目录也备份了呢。
这个目录只有一个文件,效果一样的。
*) 执行恢复

Category:

Paxos算法简述

Paxos算法是分布式中一个著名的一致性算法。它的假设前提是,在分布式系统中进程之间的通信会出现丢失、延迟、重复等现象,但不会出现传错的现象。Paxos算法就是为了保证在这样的系统中进程间基于消息传递就某个值达成一致。要理解paxos算法最好还是看作者本人(Leslie Lamport)的论文《The Part-Time Parliament》。在这里只是简单地介绍paxos最核心的思想,其实它还有很多的内容。

提议者和决议者是这里最重要的两个角色,paxos最核心的算法就是定义他们之间的通讯规则来保证某个变量在分布式系统中的一致性。

提议者是提出议案的人。每个议案都有一个议案号,议案号是区别不同议案的唯一标识,而且议案号是有大小次序的。这里的提议者不像我们真实世界里的提议者,这里的提议者提的议案内容不能随心所欲。提议者和决议者要遵循下面的规则:

1) 提议者先给议案决定一个议案号,注意整个系统中议案号都不能重复的。然后发消息给所有决议者,告诉他们我要提出第几号议案。

「翻译」Redis协议

「翻译」Redis协议

Redis

Redis协议是从以下几个方面做的一个折中方案:

  • 容易实现
  • 机器解析要快
  • 容易被人理解

网络层

客户端通过创建到6379端口的TCP连接来连接到一个Redis服务器。每个Redis命令或者客户端和服务器之间传输的数据都以\r\n (CRLF)结束。

请求

Redis可以接受由不同参数组成的命令。只要接收到一个命令,这个命令就会被执行,然后一个答复会被返回给客户端。

couchbase2.0 beta发布

2.0新功能:

可伸缩的JSON文档。

索引和查询。

跨机房同步复制。

递增式MapReduce。

透明压缩。

全文检索。

couchbase特性:

多点写入。

自动同步。

冗余备份。

永久存储。

异步IO。

couchbase缺点:

效率比其他内存NoSQL低了。

项目大,从源代码安装麻烦。

自带的安装包可配置性低。

PostgreSQL 9.2 正式版发布!

PostgreSQL 宣布 9.2 正式版发布了!该版本主要在性能方面有很大的提升,也包括一些新的 SQL 特性以及复制支持方面,主要内容包括:
允许查询直接从索引中获取数据,避免访问堆数据 (index-only scans)
允许查询计划器为指定参数值生成自定义的计划,甚至是用了 Prepared Statement
提升计划器通过内部索引扫描来使用嵌套循环
允许流复制从节点将数据转到其他从节点 (cascading replication)
允许 pg_basebackup 对待机的服务器进行基准备份
增加新工具 pg_receivexlog 用来手机 WAL 文件的改动
增加 SP-GiST (Space-Partitioned GiST) 索引访问方法
支持 range data types
增加 JSON 数据类型
为视图增加 security_barrier 选项
允许 libpq 连接字符串使用 URI 格式
为 libpq 增加 single-row processing mode 以更好的处理大结果集。

Category:

最新mysql5与postgresql9比较

文章比较长,贴个链接吧。

http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL

Category:

部署postgresql数据库集群

可把任意一台作为主服务器,提供读写功能,其他的服务器提供读取服务器,作为热备服务器使用。

如果主服务器有问题,可把其他任意一台从服务器转为主服务器

或者新安装一台服务器,从从服务器同步数据过来,然后再作为主服务器使用运行。

这种实现的是postgresql中的stream replication机制。属于异步复制,极端情况下可能丢失部分数据。

使用版本,postgresql 9.1,

pgbrounce-x.x.x

参与资料,

网络情况,

A: 172.24.202.242

B: 172.24.149.192

A上的设置, wal_level = 'hot_standby'

max_wal_senders = 5

B上的设置,

在data目录下创建一个recovery.conf

设置如下参数,standby_mode = 'on'

primary_conninfo = 'host=Aip port=5432 user=postgres password=123456'

Category:

页面

订阅 RSS - Database


Main menu 2

by Dr. Radut