php多數(shù)據(jù)庫(kù)支持的應(yīng)用程序設(shè)計(jì)第1/2頁(yè)
更新時(shí)間:2008年08月12日 12:26:47 作者:
以前做PHP應(yīng)用,多數(shù)是單數(shù)據(jù)庫(kù)數(shù)據(jù)查詢(xún)和更新,頂多也是主從數(shù)據(jù)庫(kù)的支持,實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單。主從數(shù)據(jù)庫(kù)的問(wèn)題在于,當(dāng)會(huì)話(huà)存儲(chǔ)在數(shù)據(jù)庫(kù)的時(shí)候,同步將可能出現(xiàn)問(wèn)題,也就是說(shuō)有可能出現(xiàn)會(huì)話(huà)的中斷。
所以我想在主從數(shù)據(jù)庫(kù)設(shè)計(jì)上,應(yīng)該將所有會(huì)話(huà)相關(guān)表進(jìn)行特殊對(duì)待。即:所有的會(huì)話(huà)數(shù)據(jù)表都可以更新和查詢(xún),當(dāng)一個(gè)用戶(hù)訪(fǎng)問(wèn)站點(diǎn)的時(shí)候,即將此用戶(hù)綁定到指定數(shù)據(jù)庫(kù),所有會(huì)話(huà)訪(fǎng)問(wèn)和查詢(xún)操作都對(duì)此數(shù)據(jù)庫(kù)進(jìn)行。會(huì)話(huà)表不做同步,其他非會(huì)話(huà)類(lèi)更新也從主數(shù)據(jù)庫(kù)更新。這樣做其實(shí)也逃脫不了會(huì)話(huà)更新時(shí)候的數(shù)據(jù)庫(kù)切換,所以如果不想麻煩,還是將會(huì)話(huà)存放在文本中進(jìn)行的好。
分?jǐn)?shù)據(jù)庫(kù)設(shè)計(jì),將可能從壓力性能上會(huì)提升幾個(gè)檔次,當(dāng)然單次執(zhí)行效率不會(huì)比單數(shù)據(jù)庫(kù)來(lái)的高的,畢竟存在著數(shù)據(jù)庫(kù)切換的效率問(wèn)題。分庫(kù)以及主從數(shù)據(jù)庫(kù)搭配是可以比較好改善數(shù)據(jù)庫(kù)并發(fā)瓶頸的方案。原則:大數(shù)據(jù)量,分庫(kù);大訪(fǎng)問(wèn)量,主從。很多時(shí)候,都是這兩者并行(本文不討論cache)。
我想,如果要實(shí)現(xiàn)分庫(kù)以及主從關(guān)系,那么數(shù)據(jù)庫(kù)服務(wù)器數(shù)量將是非??捎^,在應(yīng)用程序中隨時(shí)切換到某一臺(tái)服務(wù)器,將是非常頭痛的問(wèn)題,配置更換,變量名稱(chēng),是不是會(huì)有一大堆呢?如何尋找更好的解決方案將是本文談?wù)摰脑?huà)題。
首先是分庫(kù)使得數(shù)據(jù)庫(kù)頗多的問(wèn)題。什么情況下分庫(kù)?或許有些人還搞不明白為什么要分庫(kù),我就簡(jiǎn)要說(shuō)一下自己的經(jīng)驗(yàn)猜測(cè)。比如一個(gè)博客程序,一般設(shè)計(jì)是將日志存放在一張日志表中。假設(shè)是一個(gè)多用戶(hù)博客,那么將會(huì)關(guān)聯(lián)一個(gè)uid,如果數(shù)據(jù)量不大,這樣設(shè)計(jì)是沒(méi)有問(wèn)題的,但是當(dāng)日志量巨大,一天有幾十萬(wàn)條日志記錄錄入的時(shí)候,而且訪(fǎng)問(wèn)量也比較可觀的時(shí)候,我想不可能每個(gè)用戶(hù)來(lái)訪(fǎng)問(wèn)日志列表,都去從這包含幾千萬(wàn)條日志記錄的數(shù)據(jù)表中去找那么幾條,效率可見(jiàn)一斑。這個(gè)時(shí)候就該考慮到分庫(kù)的問(wèn)題。如何分?有一個(gè)很簡(jiǎn)單的分表方法,即,根據(jù)uid段,將日志記錄在各個(gè)數(shù)據(jù)庫(kù)中,當(dāng)然,這個(gè)分布還是需要根據(jù)以往統(tǒng)計(jì)結(jié)果做出調(diào)整的,因?yàn)橛脩?hù)日志分布肯定不是均勻的。設(shè)置好uid段,然后根據(jù)uid索引到指定數(shù)據(jù)庫(kù)配置,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)象即可。配置信息可能如下:
$configs['db_info']['blog'][0] = array(
'db_host' => '192.168.0.1',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][2] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
//...還有很多
至于選擇哪一臺(tái)服務(wù)器,只需要根據(jù)uid做一個(gè)簡(jiǎn)單的匹配就可以了。
再談到的就是主從數(shù)據(jù)庫(kù)了。什么情況下使用主從數(shù)據(jù)庫(kù)?比如某個(gè)名人博客,訪(fǎng)問(wèn)量相當(dāng)?shù)拇?,已?jīng)沒(méi)有辦法把他的數(shù)據(jù)再進(jìn)行拆分了,這個(gè)時(shí)候就得考慮主從數(shù)據(jù)庫(kù)服務(wù)器了,使用多臺(tái)數(shù)據(jù)庫(kù)來(lái)分流。這樣要適用主從和分庫(kù),可能上面配置信息得稍微改動(dòng)一下。
$configs['db_info']['blog'][0]['master'] = array(
'db_host' => '192.168.0.1',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][0]['slave'][0] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][0]['slave'][1] = array(
'db_host' => '192.168.0.3',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['master'] = array(
'db_host' => '192.168.0.4',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['slave'][0] = array(
'db_host' => '192.168.0.5',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['slave'][1] = array(
'db_host' => '192.168.0.6',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['session'][0]['master'] = array(
'db_host' => '192.168.0.7',
'db_name' => 'session',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['session'][1]['master'] = array(
'db_host' => '192.168.0.8',
'db_name' => 'session',
'db_user' => 'root',
'db_pass' => '',
);
寫(xiě)到這里,我想都應(yīng)該知道如何分表和分配你的數(shù)據(jù)庫(kù)了吧,接下去我就來(lái)說(shuō)一下如何輕松的讀取這樣的配置信息,如何將這些配置融入你的數(shù)據(jù)庫(kù)驅(qū)動(dòng)中。
分?jǐn)?shù)據(jù)庫(kù)設(shè)計(jì),將可能從壓力性能上會(huì)提升幾個(gè)檔次,當(dāng)然單次執(zhí)行效率不會(huì)比單數(shù)據(jù)庫(kù)來(lái)的高的,畢竟存在著數(shù)據(jù)庫(kù)切換的效率問(wèn)題。分庫(kù)以及主從數(shù)據(jù)庫(kù)搭配是可以比較好改善數(shù)據(jù)庫(kù)并發(fā)瓶頸的方案。原則:大數(shù)據(jù)量,分庫(kù);大訪(fǎng)問(wèn)量,主從。很多時(shí)候,都是這兩者并行(本文不討論cache)。
我想,如果要實(shí)現(xiàn)分庫(kù)以及主從關(guān)系,那么數(shù)據(jù)庫(kù)服務(wù)器數(shù)量將是非??捎^,在應(yīng)用程序中隨時(shí)切換到某一臺(tái)服務(wù)器,將是非常頭痛的問(wèn)題,配置更換,變量名稱(chēng),是不是會(huì)有一大堆呢?如何尋找更好的解決方案將是本文談?wù)摰脑?huà)題。
首先是分庫(kù)使得數(shù)據(jù)庫(kù)頗多的問(wèn)題。什么情況下分庫(kù)?或許有些人還搞不明白為什么要分庫(kù),我就簡(jiǎn)要說(shuō)一下自己的經(jīng)驗(yàn)猜測(cè)。比如一個(gè)博客程序,一般設(shè)計(jì)是將日志存放在一張日志表中。假設(shè)是一個(gè)多用戶(hù)博客,那么將會(huì)關(guān)聯(lián)一個(gè)uid,如果數(shù)據(jù)量不大,這樣設(shè)計(jì)是沒(méi)有問(wèn)題的,但是當(dāng)日志量巨大,一天有幾十萬(wàn)條日志記錄錄入的時(shí)候,而且訪(fǎng)問(wèn)量也比較可觀的時(shí)候,我想不可能每個(gè)用戶(hù)來(lái)訪(fǎng)問(wèn)日志列表,都去從這包含幾千萬(wàn)條日志記錄的數(shù)據(jù)表中去找那么幾條,效率可見(jiàn)一斑。這個(gè)時(shí)候就該考慮到分庫(kù)的問(wèn)題。如何分?有一個(gè)很簡(jiǎn)單的分表方法,即,根據(jù)uid段,將日志記錄在各個(gè)數(shù)據(jù)庫(kù)中,當(dāng)然,這個(gè)分布還是需要根據(jù)以往統(tǒng)計(jì)結(jié)果做出調(diào)整的,因?yàn)橛脩?hù)日志分布肯定不是均勻的。設(shè)置好uid段,然后根據(jù)uid索引到指定數(shù)據(jù)庫(kù)配置,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)對(duì)象即可。配置信息可能如下:
復(fù)制代碼 代碼如下:
$configs['db_info']['blog'][0] = array(
'db_host' => '192.168.0.1',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][2] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
//...還有很多
至于選擇哪一臺(tái)服務(wù)器,只需要根據(jù)uid做一個(gè)簡(jiǎn)單的匹配就可以了。
再談到的就是主從數(shù)據(jù)庫(kù)了。什么情況下使用主從數(shù)據(jù)庫(kù)?比如某個(gè)名人博客,訪(fǎng)問(wèn)量相當(dāng)?shù)拇?,已?jīng)沒(méi)有辦法把他的數(shù)據(jù)再進(jìn)行拆分了,這個(gè)時(shí)候就得考慮主從數(shù)據(jù)庫(kù)服務(wù)器了,使用多臺(tái)數(shù)據(jù)庫(kù)來(lái)分流。這樣要適用主從和分庫(kù),可能上面配置信息得稍微改動(dòng)一下。
復(fù)制代碼 代碼如下:
$configs['db_info']['blog'][0]['master'] = array(
'db_host' => '192.168.0.1',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][0]['slave'][0] = array(
'db_host' => '192.168.0.2',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][0]['slave'][1] = array(
'db_host' => '192.168.0.3',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['master'] = array(
'db_host' => '192.168.0.4',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['slave'][0] = array(
'db_host' => '192.168.0.5',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['blog'][1]['slave'][1] = array(
'db_host' => '192.168.0.6',
'db_name' => 'blog',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['session'][0]['master'] = array(
'db_host' => '192.168.0.7',
'db_name' => 'session',
'db_user' => 'root',
'db_pass' => '',
);
$configs['db_info']['session'][1]['master'] = array(
'db_host' => '192.168.0.8',
'db_name' => 'session',
'db_user' => 'root',
'db_pass' => '',
);
寫(xiě)到這里,我想都應(yīng)該知道如何分表和分配你的數(shù)據(jù)庫(kù)了吧,接下去我就來(lái)說(shuō)一下如何輕松的讀取這樣的配置信息,如何將這些配置融入你的數(shù)據(jù)庫(kù)驅(qū)動(dòng)中。
您可能感興趣的文章:
- 在CentOS中安裝Rancher2并配置kubernetes集群的圖文教程
- Rancher無(wú)法添加主機(jī)問(wèn)題的解決方法
- php實(shí)現(xiàn)的單一入口應(yīng)用程序?qū)嵗治?/a>
- PHP啟動(dòng)windows應(yīng)用程序、執(zhí)行bat批處理、執(zhí)行cmd命令的方法(exec、system函數(shù)詳解)
- PHP中開(kāi)發(fā)XML應(yīng)用程序之基礎(chǔ)篇 添加節(jié)點(diǎn) 刪除節(jié)點(diǎn) 查詢(xún)節(jié)點(diǎn) 查詢(xún)節(jié)
- 用定制的PHP應(yīng)用程序來(lái)獲取Web服務(wù)器的狀態(tài)信息
- 使用Rancher在K8S上部署高性能PHP應(yīng)用程序的教程
相關(guān)文章
PHP調(diào)用MySQL的存儲(chǔ)過(guò)程的實(shí)現(xiàn)代碼
MySQL好像從5.0開(kāi)始才引入存儲(chǔ)過(guò)程,反正以前做應(yīng)用的時(shí)候從沒(méi)碰過(guò),不過(guò)現(xiàn)在因?yàn)橹饕鲀?nèi)部系統(tǒng)2008-08-08PHP實(shí)現(xiàn)讀取Excel文件的記錄(一)
這篇文章主要介紹了如何利用PHP讀取Excel文件的記錄,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的可以跟隨小編了解一下2022-03-03php mysql操作mysql_connect連接數(shù)據(jù)庫(kù)實(shí)例詳解
php操作數(shù)據(jù)庫(kù)首先必須連接到指定的數(shù)據(jù)庫(kù),連接數(shù)據(jù)庫(kù)可以使用PHP mysql_connect函數(shù),本文章向大家介紹mysql_connect函數(shù)的使用方法和實(shí)例,需要的朋友可以參考一下2016-12-12php實(shí)現(xiàn)批量刪除掛馬文件及批量替換頁(yè)面內(nèi)容完整實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)批量刪除掛馬文件及批量替換頁(yè)面內(nèi)容的方法,涉及php文件與目錄的遍歷、查找以及字符串與數(shù)組的遍歷與替換操作相關(guān)技巧,適用于utf-8編碼環(huán)境,需要的朋友可以參考下2016-07-07