喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
 11  1/2  1  2  > 
     
标题: 喜悦原创首发 - 看各种规模的数据库应用  
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
喜悦原创首发 - 看各种规模的数据库应用

0 提前说点闲话
0.0 闲话:
继续征友情链接.技术类优先....最后几天啦...
并且感谢上次给偶的文章(小论各种缓存手段)投票的同志们.
希望同志们继续支持这篇文章.....欢迎投票.
0.1 acc/mssql
M$的平台上(asp/.net等),数据库一般都是它.
access已经接近过时(但是,有许多的方法可以避免它的缺陷,这里不多做讨论)
0.2 oracle
跨平台的大型应用.一般玩的起这种数据库的一般都是该方面的牛人.
或者就是什么培训班毕业的同志,同样不考虑
================
本文从这里才进入正题,主要讨论的就是中小规模的开源数据库应用.
1 sqlite
为什么把sqlite提到mysql的前面?你考虑过没有?
作为轻量级的开源数据库,在中小规模应用中它可以作为主力,但是大家都没有认识到它的威力.
据sqlite官方自称,承载100k pv是不成问题的.而sqlite官方的访问量是1M pv.照样能够正常工作.

在许多评测中(当然不可能是大型应用的评测,这种东西sqlite是跑不动的.)sqlite比pgsql,mssql发挥都要好不少.

奶瓶前面有一个关于session的应用,就是基于sqlite的.

sqlite虽然在某些功能方面远不及mysql,但是如果有比较好的算法,偶相信问题是可以被解决的.

小声说:php5去掉了mysql的内置支持.而改为默认支持mysql.这可能是mysql在开源社区的一次小挫折.
虽然php官方不承认这与mysql的版权有关,但是偶觉得也是有关系的
(mysql双重授权,对GNU GPL软件实行GNU GPL的开源,对其它软件进行商业授权,好像大批量100多美刀/个)
但是pgsql无此问题.它是bsd授权.

在偶以前的文章中曾经提到了pdo.
sqlite和mysql之间的迁移应该是比较容易的.仔细看看语法就知道了.
(你看看这个分页的语法,和mysql可以说是99%相同的.)

管理部分有sqlitemanager(http://sqlitemanager.sourceforge.net/),很类似phpmyadmin.管理问题大可放心.

下面的部分中偶讲继续介绍如何实现mysql支持的高级功能.本节告一段落.
2 mysql(pgsql的现状和mysql差不多)
mysql***一般认为***有两种表类型
(myisam,innodb.当然不仅是如此了,好像接近10种.
偶自己主要在小规模应用时用myisam,大规模应用时用innodb(当然尽可能要把事务功能关掉)
最近有soliddb storage engine beta,可参见偶blog上对soliddb的新闻及评测.暂时的感觉不太好
参见:http://www.fcicq.net/wp/index.php/archives/103)

假设如果某论坛帖子数过多,需要进行分表,有许多的方式.
2.1 在程序范畴上进行修改,使其支持多表.
这方面的典型例子:动网论坛(dvbbs)
大家可能都听说dvbbs要有php版本,源码还没有发布.
但是大概的方式和asp的方式是差不多的.

在topic表中查找对应帖子所在的表.然后根据表名得到存储位置.

当然这种方式也有许多的缺点(比如topic表过大的问题,可以看看merge表的部分.)
但是应该都是可以克服的.

2.2 merge表
大家看看mysql的手册就知道,merge表实际上就是许多相同表结构的****myisam****表的集合(确实不支持innodb).

这个方式有个优点.同样引用论坛的应用情况说明一下.
比如1年前的老帖子,你可以把这些帖子倒入单独的myisam表,然后使用myisampack来压缩(压缩率约为60%).
然后将原来的表做为merge表.这样能够大大减小数据库开销
缺点也是有的,如果要修改数据库结构,几乎不可能(除非导出,重新导入,然后再进行操作)

2.3 分区表(mysql 5.1新功能)
仍然是***myisam***表的集合,但是相对来说实现了自动化.把上面的分表工作自动化了.
但是同样遇到了许多缺点,同样的,也不易修改结构.建立表后需要重新导入数据.

偶个人认为分区表肯定不如merge表.如果分区表支持innodb那就是另一回事了 - 自己写程序避免不行吗?

3 成功的例子:
虽然mysql只适用于中小型数据库(这话不对.但是也只能这么说),
但是还是有人利用它做了大事情.

最典型的就是livejournal(lj).
他们的成长历程估计已经有许多网站转载过了.
如果需要看看大规模的应用例子的话,他们就是典型.
他们的工作都是开源的.包括经常被使用的memcached.这里就不多给人做广告了.

ps:这种文章偶是不太好意思转载的...呵呵.
4 如何用php实现merge表和分区表的功能(sqlite,低版本mysql适用)
主要解决两个问题,一个是插入,另一个就是查询(更新,删除同理.)

引用lj的方案,有一台服务器专管分配id,并且分配存储区域.
(如果你**缺钱**的话,你可以用***奇偶数或者取余***,在服务器A上写1,3,5...)
大概就这么回事...

(第一种方式)比如查询:
select dbid,id from id2db where id=xxxxx(或者用username='abc'?)
然后得到dbid,再到相应的服务器去取.
第二种就相当简单了.这里不赘述.

如果想实现分区表的话插入就更简单了.
取出的时候要注意数据库的***数据范围***
(如存储的数据是05-06年的,那么查询的时候就不要查到别的表去.)
mysql5.1解决了这个问题,希望你也能解决 :-)

提示:你可以用一下unixstamp(或者干脆比较日期)来解决这个问题.

文章就到这里.感觉有点小小的跑题.不过偶相信对各位是有帮助的.

课后题:

有一个数据库,里面有4个表.里面是数据的日期范围
tableA 03-1-1 04-1-1
tableB 04-1-1 05-1-1
tableC 05-1-1 06-1-1
tableD 06-1-1 ......
如果用户查询03-3-1 到05-3-1的数据,你要选哪些表?如何排序?
(提示:union)

版权声明:喜悦原创首发,禁止随意转载.
如果本文有错误或其它方面的问题请联系:fcicqbbs AT gmail DOT com.
再次小广告:继续征友情链接.技术类优先....最后几天啦...欢迎访问偶blog一逛,签名里有.

最后一句话,本文是偶最后一次参加本活动的收笔之作.下次机会就都让给各位了....





2006-8-18 09:45 PM#1
查看资料  访问主页  Blog  发短消息  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] [转]关于正则表达式的贪婪与非贪婪模式
支持又坐了沙发哦
动网那种方式
搜索起来比较麻烦吧。。
不知道SQLITE做缓存效果怎么样
2006-8-18 10:33 PM#2
查看资料  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 如何设置虚拟IP跟数据库的对应。
由于空间商的原因,国内大多数用的是mysql数据库。呵呵,mysql数据库用得好,union可是大用途!
fcicq 写得不少精品,特别是“小论各种缓存手段 ”,技术很不错。技术好的大家交流交流,希望不要为了不想获奖而收笔之作。大家还是很希望看到你的作品的,希望你继续支持原创版块,为国内的php发展作出努力!

[ 本帖最后由 qh663 于 2006-8-19 03:24 AM 编辑 ]




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-19 03:10 AM#3
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 新闻采集原理
谢楼上两位了.由于某些原因可能不会有下一篇了....所以称为收笔之作.
数据库的问题用好了作用确实很大的.

回2楼:动网的方法从算法上讲偶觉得是不错的,但是从效果看(尤其是因为数据库的局限性)不好.搜索起来并不麻烦
sqlite缓存的效果你自己测试一下就知道,偶感觉是比较好的.用内存表存session确实很不错,虽然偶有别的更好的办法.





2006-8-19 06:41 PM#4
查看资料  访问主页  Blog  发短消息  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 在线手册是哪里弄来的?
你看出来没有?小错误一个

改动一下.不用麻烦版主了.能看出来的就比较厉害..
原文:
小声说:php5去掉了mysql的内置支持.而改为默认支持mysql.这可能是mysql在开源社区的一次小挫折.
改后:
小声说:php5去掉了mysql的内置支持.而改为默认支持sqlite.这可能是mysql在开源社区的一次小挫折.





2006-8-19 10:26 PM#5
查看资料  访问主页  Blog  发短消息  顶部
 
kernel
中级会员
Rank: 3Rank: 3
一般会员



UID 26080
精华 0
积分 287
帖子 202
金钱 287 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-2-10
状态 离线
[推荐阅读] 判断spider测试
用日期判断我想到过 搜索咋办 效率.....
象论坛这种 一个版面的贴可能几年前的都会被顶上来 这样不同日期段的一起就...

[ 本帖最后由 kernel 于 2006-8-20 03:49 PM 编辑 ]




log more
2006-8-20 03:46 PM#6
查看资料  访问主页  发短消息  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] PHP菜鸟进阶教程系列------之 第二部分 PHP与MYSQL编
楼上的:论坛的旧帖可以考虑锁定,也可以考虑换一种方式进行查询.问题用merge表可以解决.




2006-8-20 06:28 PM#7
查看资料  访问主页  Blog  发短消息  顶部
 
luzhou (luzhou)
金牌会员
Rank: 6Rank: 6
资深会员



UID 22070
精华 0
积分 1048
帖子 1037
金钱 1048 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2003-7-28
状态 离线
[推荐阅读] php写的IC卡读写程序


QUOTE:
原帖由 fcicq 于 2006-8-19 10:26 PM 发表
你看出来没有?小错误一个

改动一下.不用麻烦版主了.能看出来的就比较厉害..
原文:
小声说:php5去掉了mysql的内置支持.而改为默认支持mysql.这可能是mysql在开源社区的一次小挫折.
改后:
小声说:php5去掉了 ...
嘿嘿。。。。。。




自在的PHPer~
2006-8-21 08:40 AM#8
查看资料  发短消息  顶部
 
unspace (未知空间)
版主
Rank: 7Rank: 7Rank: 7
百万富翁


UID 67567
精华 0
积分 48934
帖子 5039
金钱 47847 喜悦币
威望 0
人脉 1087
阅读权限 100
注册 2005-12-28
来自 吉林
状态 离线
[推荐阅读] php加速之js篇
那个错误,知道是笔误,通过语义可以分析出来



7月1日起,北京市低保、最低工资标准、失业保险、工伤保险、基本养老金5项社会保障标准均将全部上调。其中,最低工资标准增加70元,提高到800元。
2006-8-21 12:03 PM#9
查看资料  访问主页  Blog  发短消息  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 到广州的村民注意啦:广州生存攻略
...............




2006-8-29 11:52 AM#10
查看资料  访问主页  Blog  发短消息  顶部
 11  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.027902 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP