用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4846|回复: 4
收起左侧

请教,如何使CI支持分布式数据库

[复制链接]
发表于 2008-4-14 15:08:36 | 显示全部楼层 |阅读模式
刚刚接触ci,把手册也大体看了一下,发现好像ci并不支持分布式数据库。
跟据以前开发经验,一个网站的数据库可能需要几台或几十台数据库。以mysql数据库为例,一般结构为一台主数据库,用于插入,修改,删除等sql的运行,其它几台数据库为从库,用于数据的读取。这样可以有效降低数据库负载。
ci好像并没有把数据库读写分开,不知道能不能做这种分布式数据库。
发表于 2008-4-14 16:40:21 | 显示全部楼层
CI支持同时读写不同的数据库,在config/database.php里设置不同的数据库,然后程序里自己根据需要来连接指定的数据库。
 楼主| 发表于 2008-4-15 11:08:33 | 显示全部楼层
可有楼上没明白我的意思,我知道ci可以连接不同的数据库,但没有办法降低数据库负载。真正的大型网站,读写数据库应该是分开的,而读库可能有几天甚至几十台。结果应该类似
<bar>
<main>192.168.1.1|web_bar|</main>
<query>192.168.1.2|web_bar</query>
<query>192.168.1.3|web_bar</query>
等等
</bar>
<cms>
<main>192.168.2.1|web_cms</main>
<query>192.168.2.2|web_cms</query>
<query>192.168.2.3|web_cms</query>
</cms>

然后,所有的insert、update、delete等操作,直接对main进行操作,而所有select语句,都会在query数据库中执行,而我需要关心的,应该到底是bar,还是cms,框架应该自己完成对哪个库的操作。
读库常用的方法就是每次请求都随机取一个query库,这样假设每秒有1000个数据库请求,有10天query库,每台每秒处理的请求就是100个,可以大大降底数据库压力。

目前CI虽然可以指库数据库,但这种对模块操作可能更适合,无法降低负载。所以希望有人能给出解决办法。这也是这个框架我目前发现的唯一不足。不过这个应该是比较容易解决的,如果官方能解决了最好,实在不成,我只能抽时间自己解决了,不过又担心以后升级上的麻烦。
发表于 2008-4-15 12:40:16 | 显示全部楼层
mysql proxy~~try this~~与CI无关的解决方案,不用担心以后CI升级的事儿
发表于 2008-4-15 16:34:47 | 显示全部楼层
load balancing与开发框架无关。

本版积分规则