一般人們會選擇縱向擴展(scale up)SQL Server資料庫,而非橫向擴展(scale out)。縱向擴展很容易:增加硬體、處理能力、內存、磁碟和提高網路速度。其原理就是仍然在一台伺服器上運行資料庫,但是增加了伺服器的處理能力和資源。這種方法很昂貴,但是非常簡單直接。
採用雲技術
有時候,最簡單的方法就是將問題交由其他人處理。微軟的Windows Azure雲服務包含一個基於雲的SQL Server版本SQL Azure.這在技術上並非真正意義的橫向擴展,因為它是一種無限縱向擴展方法。所以,轉移到Azure並不需要對您的應用程序進行大改動。實際上,您只需要將應用程序遷移到SQL Azure,然後支付存儲、處理和數據傳輸費用。這些都是收費服務,但是您不需要再擔心擴展問題。
復制
SQL Server原生復制是一種支持橫向擴展的解決方案,與資料庫的創建和使用方式有關。您只需要在多台伺服器上復制多個資料庫副本,然後將不同的用戶指向各台伺服器。這種方法通常最適合支持地理位置分散的用戶,如亞洲辦公室的用戶使用伺服器1,而北美辦公室的用戶則使用伺服器2.每一台伺服器都擁有完整的數據副本,並且會復制夥伴伺服器的所有修改。
這種方法不支持自動負載均衡,並且最適合用在用戶固定只使用一部分數據的情況。換而言之,如果亞洲用戶只需要編輯與他們辦公室相關的數據--例如,主要是亞洲客戶的信息,那麼復制能夠保證其他資料庫副本也包含這些記錄的副本。如果所有用戶都需要編輯完整的數據集,那麼復制就變得有一些復雜,因為SQL Server必須在支持用戶的同時,編輯位於不同伺服器的同一個數據。
SQL Server的合並復制能夠處理這種沖突,但是您必須進行一些自定義合並編程,這意味著您的開發人員必須開發一些演算法,確定用戶並發訪問數據時誰獲取編輯許可權。客戶應用程序也需要增加編程;使它們不僅向資料庫提交數據修改,也要循環檢查這些修改是否被其他並發用戶重寫。用戶也需要重新培訓,因為客戶端應用程序可能會提示:"您正在編程的數據已經發生變化。您需要重新檢查,確定您的編輯是否仍然有效。"
聯合資料庫
另一個重要的橫向擴展方法是聯合。通過這種方法,您可以將資料庫劃分到多台伺服器上。垂直分割將同一個表的不同行保存到不同的伺服器上。同時,地理分區是最常用的方法:將所有亞洲數據記錄保存在一台伺服器上,而所有歐洲數據則保存在另一台伺服器上。這種方法不同於整體復制:每一個位置的伺服器都不具備完整的資料庫,而只擁有該位置的數據。通過實現一種SQL Server分布式分區視圖而形成完整的表,用戶就可以瀏覽一個"聯合"或組合的數據視圖。水平分割則將表的欄位保存在不同的伺服器上,因此各台伺服器一起協作構成組合的表。
這些資料庫的創建並不簡單,其中涉及一種整體操作。您需要掌握關於數據訪問和使用的詳細信息,才能夠實現正確的部署。此外,您還需要一位SQL Server資料庫架構師,他應該全面理解這些技術,分析您的業務情況,並且能夠正確地創建這些組件。
在一些情況中,實現這種橫向擴展對客戶端應用程序的改動很小。對於本身在設計上大量使用視圖和存儲過程進行數據訪問的應用程序,更是如此。因為這些元素只是是在後台抽象,在客戶端上不會發生變化。但是,這些應用程序並不常見;通常,實現橫向擴展都需要修改客戶端程序,使客戶端與後台結構分離。
橫向擴展並不簡單
毫無疑問,實現SQL Server橫向擴展非常復雜--這也是Azure等雲資料庫系統流行的原因之一。此外,有一些第三方供應商能夠幫助實現橫向擴展技術,而不需要完全依賴SQL Server的原生特性。您需要自己下功夫了解這些方法,理解數據訪問和使用方法,這樣才能夠選擇最符合您要求的方法。
㈡ mysql資料庫要放1億條信息怎樣分表
mysql資料庫對1億條數據的分表方法設計:
目前針對海量數據的優化有兩種方法:
(1)垂直分割
如果單表的IO壓力大,可以考慮用水平分割,其原理就是通過hash演算法,將一張表分為N多頁,並通過一個新的表(總表),記錄著每個頁的的位置。
假如一個門戶網站,它的資料庫表已經達到了1億條記錄,那麼此時如果通過select去查詢,必定會效率低下(不做索引的前提下)。為了降低單表的讀寫IO壓力,通過水平分割,將這個表分成10個頁,同時生成一個總表,記錄各個頁的信息,那麼假如我查詢一條id=100的記錄,它不再需要全表掃描,而是通過總表找到該記錄在哪個對應的頁上,然後再去相應的頁做檢索,這樣就降低了IO壓力。
㈢ SQL如何進行表的拆分
1.復製表結構及數據到新表
create table 新表 select * from 舊表 where ...
2.只復製表結構到新表
create table 新表 select * from 舊表 where 1=2 (即:讓where條件不成立)
3.復制舊表的數據到新表(假設兩個表結構一樣)
insert into 新表 select * from 舊表
4.復制舊表的數據到新表(假設兩個表結構不一樣)
insert into 新表(欄位1,欄位2,.......) select 欄位1,欄位2,...... from 舊表.
㈣ 報表差一分錢怎麼調平
資產負債表相差一分錢的處理方法是必須查找到出錯的原因,然後進行改正:資產負債表是根據總賬會計科目的月末余額直接填列的。
CELL單元格式報表工具,是將報表看作是由一系列連續的單元格組成的區域。要改變報表組件(一般是文本或圖形)的位置,只能通過改變行高列寬方式進行,組件之間 不能重疊,單元格可以合並。單元格式報表工具的優點是畫線,插入列,多行列標題繪制非常方便。
但格子中的動態數據綁定,往往需要手寫公式來進行。這種報表 只是很好的解決了"表"的問題,但對於"報"的問題依然存在。
工具:
根據報表的繪制方式,報表工具大致可以分為SQL畫布方式,Cell單元格方式和兩者結合型:
SQL畫布方式報表工具的特點是將報表水平分割成若干個區域,在各個區域上放置報表組件,報表組件位置可以是任意的,各組件可以互相重疊。
畫布式報表工具的優點 是可以做到可視化數據綁定,組件位置自由。缺點是插入列、組件對齊困難,畫表格線經常出現線與線之間的錯開現象。這種報表只是很好的解決了"報"的問題, 但對於"表"的問題依然存在。
㈤ mysql水平分表和分區有什麼區別
一,什麼是mysql分表,分區
什麼是分表,從表面意思上看呢,就是把一張表分成N多個小表,具體請看mysql分表的3種方法
什麼是分區,分區呢就是把一張表的數據分成N多個區塊,這些區塊可以在同一個磁碟上,也可以在不同的磁碟上,具體請參考mysql分區功能詳細介紹,以及實例
二,mysql分表和分區有什麼區別呢
1,實現方式上
a),mysql的分表是真正的分表,一張表分成很多表後,每一個小表都是完正的一張表,都對應三個文件,一個.MYD數據文件,.MYI索引文件,.frm表結構文件。
Sql代碼
[root@BlackGhost test]# ls |grep user
alluser.MRG
alluser.frm
user1.MYD
user1.MYI
user1.frm
user2.MYD
user2.MYI
user2.frm
簡單說明一下,上面的分表呢是利用了merge存儲引擎(分表的一種),alluser是總表,下面有二個分表,user1,user2。他們二個都是獨立的表,取數據的時候,我們可以通過總表來取。這里總表是沒有.MYD,.MYI這二個文件的,也就是說,總表他不是一張表,沒有數據,數據都放在分表裡面。我們來看看.MRG到底是什麼東西
Sql代碼
[root@BlackGhost test]# cat alluser.MRG |more
user1
user2
#INSERT_METHOD=LAST
從上面我們可以看出,alluser.MRG裡面就存了一些分表的關系,以及插入數據的方式。可以把總表理解成一個外殼,或者是聯接池。
b),分區不一樣,一張大表進行分區後,他還是一張表,不會變成二張表,但是他存放數據的區塊變多了。
Sql代碼
[root@BlackGhost test]# ls |grep aa
aa#P#p1.MYD
aa#P#p1.MYI
aa#P#p3.MYD
aa#P#p3.MYI
aa.frm
aa.par
從上面我們可以看出,aa這張表,分為二個區,p1和p3,本來是三個區,被我刪了一個區。我們都知道一張表對應三個文件.MYD,.MYI,.frm。分區呢根據一定的規則把數據文件和索引文件進行了分割,還多出了一個.par文件,打開.par文件後你可以看出他記錄了,這張表的分區信息,根分表中的.MRG有點像。分區後,還是一張,而不是多張表。
2,數據處理上
a),分表後,數據都是存放在分表裡,總表只是一個外殼,存取數據發生在一個一個的分表裡面。看下面的例子:
select * from alluser where id='12'表面上看,是對表alluser進行操作的,其實不是的。是對alluser裡面的分表進行了操作。
b),分區呢,不存在分表的概念,分區只不過把存放數據的文件分成了許多小塊,分區後的表呢,還是一張表。數據處理還是由自己來完成。
3,提高性能上
a),分表後,單表的並發能力提高了,磁碟I/O性能也提高了。並發能力為什麼提高了呢,因為查尋一次所花的時間變短了,如果出現高並發的話,總表可以根據不同的查詢,將並發壓力分到不同的小表裡面。磁碟I/O性能怎麼搞高了呢,本來一個非常大的.MYD文件現在也分攤到各個小表的.MYD中去了。
b),mysql提出了分區的概念,我覺得就想突破磁碟I/O瓶頸,想提高磁碟的讀寫能力,來增加mysql性能。
在這一點上,分區和分表的測重點不同,分表重點是存取數據時,如何提高mysql並發能力上;而分區呢,如何突破磁碟的讀寫能力,從而達到提高mysql性能的目的。
4),實現的難易度上
a),分表的方法有很多,用merge來分表,是最簡單的一種方式。這種方式根分區難易度差不多,並且對程序代碼來說可以做到透明的。如果是用其他分表方式就比分區麻煩了。
b),分區實現是比較簡單的,建立分區表,根建平常的表沒什麼區別,並且對開代碼端來說是透明的。
三,mysql分表和分區有什麼聯系呢
1,都能提高mysql的性高,在高並發狀態下都有一個良好的表面。
2,分表和分區不矛盾,可以相互配合的,對於那些大訪問量,並且表數據比較多的表,我們可以採取分表和分區結合的方式(如果merge這種分表方式,不能和分區配合的話,可以用其他的分表試),訪問量不大,但是表數據很多的表,我們可以採取分區的方式等。
㈥ SQL表中怎麼把表欄位值拆分成兩半呢
select right('00000'+left(col,patindex('%[^0-9]%',col)-1),5)col1,right(col,len(col)-patindex('%[^0-9]%',col)+1)col2 from tb
㈦ SQL Server中表格水平拆分的問題
用游標應該能輕松搞定
DECLARE@ClassIDVARCHAR(32);
DECLARE@NewTableVARCHAR(32);
DECLARECURSOR_TMPCURSORFAST_FORWARDFORWARD_ONLYLOCALREAD_ONLY
FOR
SELECT班級FROM學生信息表GROUPBY班級;
OPENCURSOR_TMP;
FETCHNEXTFROMCURSOR_TMPINTO@ClassID;
WHILE@@FETCH_STATUS=0
BEGIN
SET@NewTable='New_Class_'+@ClassID;--新的表名稱
--EXEC('DROPTABLE'+@NewTable+';');
EXEC('SELECT*INTO'+@NewTable+'FROM學生信息表WHERE(班級='+@ClassID+');');
--設置主鍵,約束等
FETCHNEXTFROMCURSOR_TMPINTO@ClassID;
END;
CLOSECURSOR_TMP;
DEALLOCATECURSOR_TMP;
GO
--確定數據正確後再處理源表數據
㈧ MS SQLserver水平,垂直分割問題
在SQL Server2000 中事務復制的改進主要包括以下幾個方面.並行快照處理保證即使在創建初始快照時仍可對出版表進行修改提高錯誤處理能力可以跳過指定的錯誤繼續進行數據復制.在訂購者處對復制數據進行確認包括對垂直分割的確認通過SQL Server Enterprise Manager 也可以使用確認
---
以上,希望對你有所幫助。
㈨ 在sql資料庫里的視圖是什麼意思,怎麼理解
視圖為原始資料庫數據的一種變換,是查看錶中數據的另外一種方式。可以將視圖看成是一個移動的窗口,通過它可以看到感興趣的數據。視圖為從一個或多個實際表中獲得的,這些表的數據存放在資料庫中。那些用於產生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產生。
視圖的定義存在資料庫中,與此定義相關的數據並沒有再存一份於資料庫中。通過視圖看到的數據存放在基表中。
(9)sql表水平分割擴展閱讀
視圖有很多優點,主要表現在:
1、視點集中
使用戶只關心它感興趣的某些特定數據和他們所負責的特定任務。這樣通過只允許用戶看到視圖中所定義的數據而不是視圖引用表中的數據而提高了數據的安全性。
2、簡化操作
視圖大大簡化了用戶對數據的操作。因為在定義視圖時,若視圖本身就是一個復雜查詢的結果集,這樣在每一次執行相同的查詢時,不必重新寫這些復雜的查詢語句,只要一條簡單的查詢視圖語句即可。可見視圖向用戶隱藏了表與表之間的復雜的連接操作。
3、定製數據
視圖能夠實現讓不同的用戶以不同的方式看到不同或相同的數據集。因此,當有許多不同水平的用戶共用同一資料庫時,這顯得極為重要。
4、合並分割數據
在有些情況下,由於表中數據量太大,故在表的設計時常將表進行水平分割或垂直分割,但表的結構的變化卻對應用程序產生不良的影響。如果使用視圖就可以重新保持原有的結構關系,從而使外模式保持不變,原有的應用程序仍可以通過視圖來重載數據。
5、安全性
視圖可以作為一種安全機制。通過視圖用戶只能查看和修改他們所能看到的數據。其它資料庫或表既不可見也不可以訪問。如果某一用戶想要訪問視圖的結果集,必須授予其訪問許可權。視圖所引用表的訪問許可權與視圖許可權的設置互不影響。
㈩ sql server水平分表,約束列必須是主鍵或者聯合主鍵的一部分嗎,如何做到約束列不是主鍵
水平分割:根據一列或多列數據的值把數據行放到兩個獨立的表中。不一定要用主鍵的,可以用某一個非主鍵來關聯,保證唯一性即可。