数据库相关

NoSQL数据库探讨之一 - 为什么要用非关系数据库?

随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付 web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:

1、High performance - 对数据库高并发读写的需求
web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的 BBS网站,往往也存在对高并发写请求的需求,例如像JavaEye网站的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,因此这是一个相当普遍的需求。

2、Huge Storage - 对海量数据的高效率存储和访问的需求
类似Facebook,twitter,Friendfeed这样的SNS网站,每天用户产生海量的用户动态,以Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,例如腾讯,盛大,动辄数以亿计的帐号,关系数据库也很难应付。

3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求
在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,为什么数据库不能通过不断的添加服务器节点来实现扩展呢?

mars - Tue, 2010-02-23 21:51

oracle约束

约束 Including Constraints

在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集.

ORACLE 使用完整性约束(integrity constraints)防止不合法的数据写入数据库,管理员和开发人员可以定义完整性规则,增强商业规则,限制数据表中的数据.如果一个DML语句执行的任何结果破坏了完整性约束,ORACLE就会回滚语句,返回错误信息.

mars - Thu, 2007-09-20 23:08

oracle是如何工作的 -- 比较形象

一个名叫Sid的男人,狂热地爱好拍摄、保存和整理照片。Sid的妻子名叫Debbie,他们有三个儿子Logan、Archie和Chuck。他有一所很大的房子,同住的有男管家Simon和女仆Pam。我将介绍他的家庭、他的房子和他的爱好:拍摄、收集和炫耀他的照片。
现在,Sid快乐地生活着—家庭、朋友和假期。他不时地拍照。事实上,他总是随身带着相机。他不想错过任何东西。每一个早餐、午餐和晚宴,都会被拍下来。当孩子们从学校回家,镜头摄入他们对父亲的问候。当孩子们做家庭作业的时候,“卡嚓、卡嚓、卡嚓”,照相机的快门响个不停。棒球赛上,儿子Archie的每一个投掷都被拍摄下来。学校的舞会上,Chuck的父亲拍下了每一个缓慢的舞步以及在苏打水机器旁的交谈。而他的狗——Sadie则是这个世界上被拍摄次数最多的狗。
他和他的家庭收藏了数以百万计的照片。一些照片被销毁掉了,一些则经历了改变。Sid有一套神奇的系统来处理这些照片。让我来告诉你一些关于他的家庭、他的房子的事,以及关于他和他的家人如何致力于发展、组织和保护所有这些照片。
Sid用一架特殊的相机拍摄。他的相机每拍摄一次,就同时产生一张照片和一张底片。他从来不用换胶卷(这是一种科幻技术)。照片被贴在房间的墙壁上,而底片则被保存在一个安全的地方。

mars - Thu, 2007-06-14 09:37

Oracle -- Top 10 Backup and Recovery best practices

Oracle Server - Enterprise Edition - Version: 9.2.0.1 to 10.2.0.3
Information in this document applies to any platform.
Top 10 Backup and Recovery best practices.
This document assumes that you are doing the Backup and Recovery basics
- Running in Archivelog mode
- multiplexing the controlfile
- Taking regular backups
- Periodically doing a complete restore to test your procedures.

1. Turn on block checking.
REASON: The aim is to detect, very early the presence of corrupt blocks in the database.
This has a slight performance overhead, but Checksums allow Oracle to detect early
corruption caused by underlying disk, storage system, or I/O system problems.

SQL> alter system set db_block_checking = true scope=both;

mars - Wed, 2007-05-23 16:39

ORACLE备份策略(ORACLE BACKUP STRATEGY)

  一、了解备份的重要性

  可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片、主板电路、内存、电源等任何一项不能正常工作,都会导致计算机系统不能正常工作。当然,这些损坏可以修复,不会导致应用和数据的损坏。但是,如果计算机的硬盘损坏,将会导致数据丢失,此时必须用备份恢复数据。

mars - Mon, 2007-05-07 14:25

一个oracle增量备份的实例

环境:Solaris9+oracle9i
part 1
增量备份的脚本ora_incr_bk.sh:
_____________________________________________________________
#!/usr/bin/bash

DATE=`date +%w`
DATE_2=`date +%Y%m%d`
BACKUP_PATH=/oradata/oradata_backup
LEVEL=$@
TARGET_SID=TNT_72
RMAN_SID=TNT_71
BIN=/oracle/app/oracle/product/9.2.0/bin

# Delete the data backed up last time
rm -rf $BACKUP_PATH/data/$DATE/*

if [ $LEVEL = 0 ]; then

$BIN/rman target sys/sys catalog rman/rman@$RMAN_SID log $BACKUP_PATH/log/level.$TARGET_SID.$LEVEL.$DATE_2.log<

resync catalog;
run{
allocate channel c3 type disk;
backup filesperset 6 format '$BACKUP_PATH/data/$DATE/arch.%d.live.%t' (archivelog from time 'sysdate-7' all delete input);
release channel c3;
}

run{

mars - Tue, 2007-04-10 19:15

Oracle导出程序Exp的使用具体过程

Oracle的导出实用程序(Export utility)允许从数据库提取数据,并且将数据写入操作系统文件。exp使用的基本格式:exp[username[/password[@service]]],以下例举exp常用用法。
  
  1. 获取帮助
    exp help=y
  
  2. 导出一个完整数据库
    exp system/manager file=bible_db log=dible_db full=y
  
  3. 导出数据库定义而不导出数据
    exp system/manager file=bible_db log=dible_db full=y rows=n
  
  4. 导出一个或一组指定用户所属的全部表、索引和其他对象
    exp system/manager file=seapark log=seapark owner=seapark
    exp system/manager file=seapark log=seapark owner=(seapark,amy,amyc,harold)

mars - Mon, 2007-04-02 09:27

SQL Server存储过程编写经验和优化

一、前言:在经过一段时间的存储过程开发之后,写下了一些开发时候的小结和经验与大家共享,希望对大家有益,主要是针对Sybase和SQL Server数据库,但其它数据库应该有一些共性。

二、适合读者对象:数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。

三、介绍:在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。

mars - Tue, 2006-09-05 10:24

创建索引对SQL语句执行的影响

一、创建索引对执行计划的影响

在SQL开始执行之前,Oracle会确定SQL语句的执行计划,并按照执行计划的步骤访问相应的表和索引。

一旦执行计划确定下来,Oracle会按照这个执行计划完成SQL语句的执行,在SQL语句执行开始之后建立的索引不会改变SQL语句的执行计划。

因此,创建索引不会对执行计划有任何的影响,也就不会对运行中的SQL语句有影响。下面通过一个例子简单验证一下:

SQL> CREATE TABLE TEST (ID NUMBER, FID NUMBER, NAME VARCHAR2(30), BID_COLUMNS CHAR(2000));

Table created.

mars - Thu, 2006-08-24 10:59

关系数据库设计之基本规则--范式

1NF: 属性不可再分
2NF:消除1NF的部分依赖
3NF:消除2NF的传递依赖

构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。下面我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

mars - Sun, 2006-05-28 17:59