我舉一個例子:有的OA系統是要公司客戶自己有伺服器,然後裝到客戶的伺服器上。可是客戶嫌麻煩,所以我想將OA系統(PHP+Mysql)放在自己的伺服器上,讓公司客戶及其員工來注冊使用。那麼問題來了,原來在客戶自己的伺服器上資料庫也就十幾張表,但都放到我的伺服器上,每注冊一個公司就得增加十幾張表,那如果有一萬家公司注冊資料庫不得有幾十萬張表?跟樓主一樣的問題,有一些老牌廠商早就給出來完美答案了,比如華為、天翎都有過類似的問題,這些企業提出的解決方案就很不錯,就針對上面的問題,最簡單的辦法是給每張表加個實例ID,一個公司對應一個實例ID,然後在你的MVC架構中跟DB最近的這一層加個攔截器,每個SQL查詢都自動帶上實例ID,這樣不用對代碼做很大改動。後期再根據需要優化,哪些公司合用一張表,哪些單獨佔用一張表甚至一個資料庫,總之具體問題具體對待,需要在運營的過程中根據用戶量和業務情況來分析採取對策。
⑵ 教你設計大型Oracle資料庫
本文教你如何設計大型Oracle資料庫 希望對大家有所幫助
一 概論
超大型系統的特點為
處理的用戶數一般都超過百萬 有的還超過千萬 資料庫的數據量一般超過 TB;
系統必須提供實時響應功能 系統需不停機運行 要求系統有很高的可用性及可擴展性
為了能達到以上要求 除了需要性能優越的計算機和海量存儲設備外 還需要先進的資料庫結構設計和優化的應用系統
一般的超大型系統採用雙機或多機集群系統 下面以資料庫採用Oracle 並行伺服器為例來談談超大型資料庫設計方法
確定系統的ORACLE並行伺服器應用劃分策略迅盯
資料庫物理結構的設計
系統硬碟的劃分及分配
備份及恢復策略的考慮
二 Oracle並行伺服器應用劃分策略
Oracle並行伺服器允許不同節點上的多個INSTANCE實例同時訪問一個資料庫 以提高系統的可用性 可擴展性及性能 Oracle並行伺服器中的每個INSTANCE實例都可將共享資料庫中的表或索引的數據塊讀入本地的緩沖區中 這就意味著一個數據塊可存在於多個INSTANCE實例的SGA區中 那麼保持這些緩沖區的數據的一致性就很嘩亮重要 Oracle使用 PCM( Parallel Cache Management)鎖維護緩沖區的一致性 Oracle同時通過I DLM(集成的分布式鎖管理器)實現PCM 鎖 並通過專門的LCK進程實現INSTANCE實例間的數據一致
考慮這種情況 INSTANCE 對BLOCK X塊修改 這時INSTANCE 對BLOCK X塊也需要修改 Oracle並行伺服器利用PCM鎖機制 使BLOCK X從INSTANCE 的SGA區寫入資料庫數據文件中 又從數據文件中把BLOCK X塊讀入INSTANCE 的SGA區中 發生這種情況即為一個PING PING使原來 個MEMORY IO可以完成的工作變成 個DISK IO和 個 MEMORY IO才能夠完成 如果系統中有過多的PING 將大大降低系統的性能
Oracle並行伺服器中的每個PCM鎖可管理多個數據塊 PCM鎖管理的數據塊的個數與分配給一個數據文件的PCM鎖的個數及該數據文件的大小有關 當INSTANCE 和INSTANCE 要操作不同的BLOCK 如果這些BLOCK 是由同一個PCM鎖管理的 仍然會發生PING 這些PING稱為FALSE PING 當多個INSTANCE訪問相同的BLOCK而產生的PING是TRUE PING
合理的應用劃分使不同的應用訪問不同的數據 可避免或減少TRUE PING;通過給FALSE PING較多的數據文件分配更多的PCM鎖可減少 FALSE PING的次數 增加PCM鎖不能減少TRUE PING
所以 Oracle並行伺服器設計的目的是使系統交易處理合理的分布在INSTANCE實例間 以最小化PING 同時合理的分配PCM鎖 減少FALSE PING 設計的關鍵是找出可能產生的沖突 從而決定應用劃分的策略 應用劃分有如下四種方法
根據功能模塊劃分 不同的節點運行不同的應用
根據用戶劃分 不同類型的用戶運行在不同的節點上
根據數據劃分 不同的節點訪問不同的數據或索引
根據時間劃分 不同的應用在不同的時間段運行
應用劃分的兩個重要原則是使PING最小化及使各節點的負載大致均衡
三 資料庫物理結構的設計
資料庫物理結構設計包括確定表及索引的物理存儲參數 確定及分配數據畝蘆和庫表空間 確定初始的回滾段 臨時表空間 redo log files等 並確定主要的初始化參數 物理設計的目的是提高系統的性能 整個物理設計的參數可以根據實際運行情況作調整
表及索引數據量估算及物理存儲參數的設置
lishixin/Article/program/Oracle/201311/18944