Posts Tagged ‘数据库’
从数据库管理到在线购物,从博客到电子邮件,开放源代码的PHP程序数不胜数。从1998年到现在,十年的热情与坚持、良好的软件架构、团队协作和创新理念,造就了一批优秀的PHP程序。下面让我们来看看互联网上有史以来最具影响力的PHP程序:
1998
phpMyAdmin
phpMyAdmin是一个通过WEB界面管理MySQL数据库的程序。它可以创建、删除数据库,创建、删除和编辑数据表,删除、编辑和新增字段,执行任何SQL语句,管理字段上的主键,管理用户权限,输出数据到多种数据格式,而且目前有50种各国语言版本。 本程序由phpMyAdmin团队开发。
1999
SquirrelMail
SquirrelMail是一个基于标准的Webmail类库。它包含了PHP内置的IMAP和SMTP协议,及用于生成HTML4.0界面的代码,支持多种浏览器。SquirrelMail易于安装和配置,提供所有你想要从邮件客户端得到的功能,例如强大的MIME支持,地址簿和文件目录操作等。
2000
eZ Pu.......
More>>
先来看一个场景:当一个用户要使用银行的转帐服务,他要从自己的卡上转一部分钱到另外的一张卡上,他希望这个操作是在自己的卡上减少金额,在另外的卡上增 加金额,这两个操作要么都发生,要么都不发生。但是一些软件和硬件的因素会影响这两个操作的正常发生,这就使系统存在不稳定状态的可能。
事务就是解决这种情况的方式,它可以保证软硬件发生故障是系统的稳定性。
一个事务是有下列属性的工作单元。
原子性(ATOMICITY):
一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。
一致性(CONSISTENCY):
一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成了一个成功的事务时,数据应处于一致的状态。换句话说,一个事务应该把系统从一 个一致-状态转换到另一个一致状态。举个例子,在关系数据.......
More>>
PL/Proxy和PostgreSQL集群的结构关系可以用下图清楚地表示
以下操作是在三台不同机器上执行的情况,其中plproxy节点的机器名是P1,数据库节点的机器名分别是D1和D2。机器硬件配置如下,同时需要Linux-4.2、postgresql-8.3.0和plproxy-2.0.4,pgbouncer的安装过程略去。
plproxy节点:
hostname: P1
inet addr:10.0.0.1
OS: Linux 2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz
MemTotal: 514440 kB
node1节点:
hostname:D1
inet addr:10.0.0.2
OS: Linux 2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz
MemTotal: 254772 kB
node2节点:
hostname:D2
inet addr:10.0.0.3
OS: Linux 2.6.9-42.ELsmp
CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz
MemTotal: 254772 kB
1. 在P1, D1,D2上安装postgresql-8.3.0,并创建URTCluster数据库
## Compile and install
gunzip postgre.......
More>>
从LiveJournal后台发展看大规模网站性能优化方法
于敦德 2006-3-16
一、LiveJournal发展历程
LiveJournal是99年始于校园中的项目,几个人出于爱好做了这样一个应用,以实现以下功能:
博客,论坛
社会性网络,找到朋友
聚合,把朋友的文章聚合在一起
LiveJournal采用了大量的开源软件,甚至它本身也是一个开源软件。
在上线后,LiveJournal实现了非常快速的增长:
2004年4月份:280万注册用户。
2005年4月份:680万注册用户。
2005年8月份:790万注册用户。
达到了每秒钟上千次的页面请求及处理。
使用了大量MySQL服务器。
使用了大量通用组件。
二、LiveJournal架构现状概况
三、从LiveJournal发展中学习
LiveJournal从1台服务器发展到100台服务器,这其中经历了无数的伤痛,但同时也摸索出了解决这些问题的方法,通过对LiveJournal的学习,可以让我们避免LJ曾经犯过的错误,并且从一开始就对系统.......
More>>
在数据库中有两个表,一个比较巨大,大约1千万条记录(表Big),另一个只有5000条(表small)。
目前需要根据表small来更新表Big。
UPDATE Big SET Bf1=0 WHERE BigId IN(SELECT BigId FROM Small WHERE Sf1>0)
但是这样执行下来,速度非常慢,并且连接使用这台DB服务器的程序也都慢了下来,几近不可用。
仔细分析这条SQL语句,使用了IN。有人说IN是会分拆成一个个OR表达式的,而OR语句将不会使用索引,所以有时候遇到OR,会用UNION ALL来代替。
但在这里用UNION ALL是不行的。
根据笔者的猜想,这条SQL语句大概会用上全表搜索,大表1千万条记录,那么至少比较1千万次,怎么会不慢呢。
于是选择改用游标,先将小表的记录提取出来,然后一条条的跟大表结合执行。
DECLARE curT CURSOR FOR SELECT BigId FROM Small WHERE Sf1>0;
DECLARE @Id INT;
OPEN curT;
FETCH NEXT FROM curT INTO .......
More>>
DBUtils 是一套允许线程化 Python 程序可以安全和有效的访问数据库的模块。DBUtils已经作为 Webware for Python 一部分用来结合 PyGreSQL 访问 PostgreSQL 数据库,当然他也可以用在其他Python应用程序中来访问 DB-API 2 兼容的数据库接口。
模块
DBUtils实际上是一个包含两个子模块的Python包,一个用于连接DB-API 2模块,另一个用于连接典型的PyGreSQL模块。
全局的DB-API 2变量
SteadyDB.py 用于稳定数据库连接
PooledDB.py 连接池
PersistentDB.py 维持持续的数据库连接
SimplePooledDB.py 简单连接池
典型的 PyGreSQL 变量
SteadyPg.py 稳定PyGreSQL连接
PooledPg.py PyGreSQL连接池
PersistentPg.py 维持持续的PyGreSQL连接
SimplePooledPg.py 简单的PyGreSQL连接池
对标准DB-API 2模块的依赖如下图所示:
对典型的PyGreSQL模块依赖如下图所示:
下载
你可以从 Webware 的网站下载最新版本:
http:.......
More>>
