內存緩存資料庫
『壹』 內存資料庫是怎麼實現數據到內存的
相對於磁碟,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁碟上訪問能夠極大地提高應用的性能。同時,內存資料庫拋棄了磁碟數據管理的傳統方式,基於全部數據都在內存中重新設計了體系結構,並且在數據緩存、快速演算法、並行操作方面也進行了相應的改進,所以數據處理速度比傳統資料庫的數據處理速度要快很多,一般都在10倍以上。內存資料庫的最大特點是其"主拷貝"或"工作版本" 常駐內存,即活動事務只與實時內存資料庫的內存拷貝打交道。顯然,它要求較大的內存量,但並非任何時刻整個資料庫都存放在內存,即內存資料庫系統還是要處理I/O。
『貳』 資料庫緩存機制是什麼緩存是如何作用資料庫
緩存的介質一般是內存,所以讀寫速度很快。但如果緩存中存放的數據內量非常大時,也會用硬碟容作為緩存介質。緩存的實現不僅僅要考慮存儲的介質,還要考慮到管理緩存的並發訪問和緩存數據的生命周期。
『叄』 內存資料庫主流的有哪些,並給出各自特點!
內存資料庫從范型上可以分為關系型內存資料庫和鍵值型內存資料庫。
在實際應用中內存資料庫主要是配合oracle或mysql等大型關系資料庫使用,關注性能。
作用類似於緩存,並不注重數據完整性和數據一致性。
基於鍵值型的內存資料庫比關系型更加易於使用,性能和可擴展性更好,因此在應用上比關系型的內存資料庫使用更多。
比較FastDB、Memcached和Redis主流內存資料庫的功能特性。
FastDB的特點包括如下方面:
1、FastDB不支持client-server架構因而所有使用FastDB的應用程序必須運行在同一主機上;
2、fastdb假定整個資料庫存在於RAM中,並且依據這個假定優化了查詢演算法和介面。
3、fastdb沒有資料庫緩沖管理開銷,不需要在資料庫文件和緩沖池之間傳輸數據。
4、整個fastdb的搜索演算法和結構是建立在假定所有的數據都存在於內存中的,因此數據換出的效率不會很高。
5、Fastdb支持事務、在線備份以及系統崩潰後的自動恢復。
6、fastdb是一個面向應用的資料庫,資料庫表通過應用程序的類信息來構造。
FastDB不能支持Java API介面,這使得在本應用下不適合使用FastDB。
Memcached
Memcached是一種基於Key-Value開源緩存伺服器系統,主要用做資料庫的數據高速緩沖,並不能完全稱為資料庫。
memcached的API使用三十二位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不同的機器上。當表格滿了以後,接下來新增的資料會以LRU機制替換掉。由於 memcached通常只是當作緩存系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的程序更新memcached內的資料。
memcached具有多種語言的客戶端開發包,包括:Perl、PHP、JAVA、C、Python、Ruby、C#。
Redis
Redis是一個高性能的key-value資料庫。redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部分場合可以對關系資料庫起到很好的補充作用。它提供了C++、Java、Python,Ruby,Erlang,PHP客戶端。
『肆』 一個例子說明內存資料庫為什麼比磁碟資料庫要快
假定在程序效率和關鍵過程相當且不計入緩存等措施的條件下,讀寫任何類型的數據都沒有直接操作文件來的快,不論MSYQL過程如何,最後都要到磁碟上去讀這個「文件」(記錄存儲區等效),所以當然這一切的前提是只讀 內容,無關任何排序或查找操作。
動態網站一般都是用資料庫來存儲信息,如果信息的及時性要求不高 可以加入緩存來減少頻繁讀寫資料庫。
兩種方式一般都支持,但是繞過操作系統直接操作磁碟的性能較高,而且安全性也較高,資料庫系中的磁碟性能一直都是瓶頸,大型資料庫一般基於unix
系統,當然win下也有,不常用應為win的不可靠性,unix下,用的是裸設備raw設備,就是沒有加工過的設備(unix下的磁碟分區屬於特殊設備,
以文件形式統一管理),由dbms直接管理,不通過操作系統,效率很高,可靠性也高,因為磁碟,cache和內存都是自己管理的,大型資料庫系統
db2,oracal,informix(不太流行了),mssql算不上大型資料庫系統。
1、直接讀文件相比資料庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。
2、一次讀取的內容越大,直接讀文件的優勢會越明
顯(讀文件時間都是小幅增長,這跟文件存儲的連續性和簇大小等有關系),這個結果恰恰跟書生預料的相反,說明MYSQL對更大文件讀取可能又附加了某些操
作(兩次時間增長了近30%),如果只是單純的賦值轉換應該是差異偏小才對。
3、寫文件和INSERT幾乎不用測試就可以推測出,資料庫效率只會更差。
4、很小的配置文件如果不需要使用到資料庫特性,更加適合放到獨立文件里存取,無需單獨創建數據表或記錄,很大的文件比如圖片、音樂等採用文件存儲更為方便,只把路徑或縮略圖等索引信息放到資料庫里更合理一些。
5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數時間會少3秒左右。
6、fetch_row和fetch_object應該是從fetch_array轉換而來的,書生沒看過PHP的源碼,單從執行上就可以說明fetch_array效率更高,這跟網上的說法似乎相反。
磁碟讀寫與資料庫的關系:
一 磁碟物理結構
(1) 碟片:硬碟的盤體由多個碟片疊在一起構成。
在硬碟出廠時,由硬碟生產商完成了低級格式化(物理格式化),作用是將空白的碟片(Platter)劃分為一個個同圓心、不同半徑的磁軌
(Track),還將磁軌劃分為若干個扇區(Sector),每個扇區可存儲128×2的N次方(N=0.1.2.3)位元組信息,默認每個扇區的大小為
512位元組。通常使用者無需再進行低級格式化操作。
(2) 磁頭:每張碟片的正反兩面各有一個磁頭。
(3) 主軸:所有磁片都由主軸電機帶動旋轉。
(4) 控制集成電路板:復雜!上面還有ROM(內有軟體系統)、Cache等。
二 磁碟如何完成單次IO操作
(1) 尋道
當控制器對磁碟發出一個IO操作命令的時候,磁碟的驅動臂(Actuator
Arm)帶動磁頭(Head)離開著陸區(Landing
Zone,位於內圈沒有數據的區域),移動到要操作的初始數據塊所在的磁軌(Track)的正上方,這個過程被稱為尋道(Seeking),對應消耗的時
間被稱為尋道時間(Seek Time);
(2) 旋轉延遲
找到對應磁軌還不能馬上讀取數據,這時候磁頭要等到磁碟碟片(Platter)旋轉到初始數據塊所在的扇區(Sector)落在讀寫磁頭正下方之後才能開始讀取數據,在這個等待碟片旋轉到可操作扇區的過程中消耗的時間稱為旋轉延時(Rotational Delay);
(3) 數據傳送
接下來就隨著碟片的旋轉,磁頭不斷的讀/寫相應的數據塊,直到完成這次IO所需要操作的全部數據,這個過程稱為數據傳送(Data Transfer),對應的時間稱為傳送時間(Transfer Time)。完成這三個步驟之後單次IO操作也就完成了。
根據磁碟單次IO操作的過程,可以發現:
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間
進而推算IOPS(IO per second)的公式為:
IOPS = 1000ms/單次IO時間
三 磁碟IOPS計算
不同磁碟,它的尋道時間,旋轉延遲,數據傳送所需的時間各是多少?
1. 尋道時間
考慮到被讀寫的數據可能在磁碟的任意一個磁軌,既有可能在磁碟的最內圈(尋道時間最短),也可能在磁碟的最外圈(尋道時間最長),所以在計算中我們只考慮平均尋道時間。
在購買磁碟時,該參數都有標明,目前的SATA/SAS磁碟,按轉速不同,尋道時間不同,不過通常都在10ms以下:
3. 傳送時間2. 旋轉延時
和尋道一樣,當磁頭定位到磁軌之後有可能正好在要讀寫扇區之上,這時候是不需要額外的延時就可以立刻讀寫到數據,但是最壞的情況確實要磁碟旋轉整整
一圈之後磁頭才能讀取到數據,所以這里也考慮的是平均旋轉延時,對於15000rpm的磁碟就是(60s/15000)*(1/2) = 2ms。
(1) 磁碟傳輸速率
磁碟傳輸速率分兩種:內部傳輸速率(Internal Transfer Rate),外部傳輸速率(External Transfer Rate)。
內部傳輸速率(Internal Transfer Rate),是指磁頭與硬碟緩存之間的數據傳輸速率,簡單的說就是硬碟磁頭將數據從碟片上讀取出來,然後存儲在緩存內的速度。
理想的內部傳輸速率不存在尋道,旋轉延時,就一直在同一個磁軌上讀數據並傳到緩存,顯然這是不可能的,因為單個磁軌的存儲空間是有限的;
實際的內部傳輸速率包含了尋道和旋轉延時,目前家用磁碟,穩定的內部傳輸速率一般在30MB/s到45MB/s之間(伺服器磁碟,應該會更高)。
外部傳輸速率(External Transfer Rate),是指硬碟緩存和系統匯流排之間的數據傳輸速率,也就是計算機通過硬碟介面從緩存中將數據讀出交給相應的硬碟控制器的速率。
硬碟廠商在硬碟參數中,通常也會給出一個最大傳輸速率,比如現在SATA3.0的6Gbit/s,換算一下就是6*1024/8,768MB/s,通常指的是硬碟介面對外的最大傳輸速率,當然實際使用中是達不到這個值的。
這里計算IOPS,保守選擇實際內部傳輸速率,以40M/s為例。
(2) 單次IO操作的大小
有了傳送速率,還要知道單次IO操作的大小(IO Chunk Size),才可以算出單次IO的傳送時間。那麼磁碟單次IO的大小是多少?答案是:不確定。
操作系統為了提高 IO的性能而引入了文件系統緩存(File System Cache),系統會根據請求數據的情況將多個來自IO的請求先放在緩存裡面,然後再一次性的提交給磁碟,也就是說對於資料庫發出的多個8K數據塊的讀操作有可能放在一個磁碟讀IO里就處理了。
還有,有些存儲系統也是提供了緩存(Cache),接收到操作系統的IO請求之後也是會將多個操作系統的 IO請求合並成一個來處理。
不管是操作系統層面的緩存還是磁碟控制器層面的緩存,目的都只有一個,提高數據讀寫的效率。因此每次單獨的IO操作大小都是不一樣的,它主要取決於系統對於數據讀寫效率的判斷。這里以SQL Server資料庫的數據頁大小為例:8K。
(3) 傳送時間
傳送時間 = IO Chunk Size/Internal Transfer Rate = 8k/40M/s = 0.2ms
可以發現:
(3.1) 如果IO Chunk Size大的話,傳送時間會變大,從而導致IOPS變小;
(3.2) 機械磁碟的主要讀寫成本,都花在了定址時間上,即:尋道時間 + 旋轉延遲,也就是磁碟臂的擺動,和磁碟的旋轉延遲。
(3.3) 如果粗略的計算IOPS,可以忽略傳送時間,1000ms/(尋道時間 + 旋轉延遲)即可。
4. IOPS計算示例
以15000rpm為例:
(1) 單次IO時間
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間 = 3ms + 2ms + 0.2 ms = 5.2 ms
(2) IOPS
IOPS = 1000ms/單次IO時間 = 1000ms/5.2ms = 192 (次)
這里計算的是單塊磁碟的隨機訪問IOPS。
考慮一種極端的情況,如果磁碟全部為順序訪問,那麼就可以忽略:尋道時間 + 旋轉延遲 的時長,IOPS的計算公式就變為:IOPS = 1000ms/傳送時間
IOPS = 1000ms/傳送時間= 1000ms/0.2ms = 5000 (次)
顯然這種極端的情況太過理想,畢竟每個磁軌的空間是有限的,尋道時間 + 旋轉延遲 時長確實可以減少,不過是無法完全避免的。
四 資料庫中的磁碟讀寫
1. 隨機訪問和連續訪問
(1) 隨機訪問(Random Access)
指的是本次IO所給出的扇區地址和上次IO給出扇區地址相差比較大,這樣的話磁頭在兩次IO操作之間需要作比較大的移動動作才能重新開始讀/寫數據。
(2) 連續訪問(Sequential Access)
相反的,如果當次IO給出的扇區地址與上次IO結束的扇區地址一致或者是接近的話,那磁頭就能很快的開始這次IO操作,這樣的多個IO操作稱為連續訪問。
(3) 以SQL Server資料庫為例
數據文件,SQL Server統一區上的對象,是以extent(8*8k)為單位進行空間分配的,數據存放是很隨機的,哪個數據頁有空間,就寫在哪裡,除非通過文件組給每個表預分配足夠大的、單獨使用的文件,否則不能保證數據的連續性,通常為隨機訪問。
另外哪怕聚集索引表,也只是邏輯上的連續,並不是物理上。
日誌文件,由於有VLF的存在,日誌的讀寫理論上為連續訪問,但如果日誌文件設置為自動增長,且增量不大,VLF就會很多很小,那麼就也並不是嚴格的連續訪問了。
2. 順序IO和並發IO
(1) 順序IO模式(Queue Mode)
磁碟控制器可能會一次對磁碟組發出一連串的IO命令,如果磁碟組一次只能執行一個IO命令,稱為順序IO;
(2) 並發IO模式(Burst Mode)
當磁碟組能同時執行多個IO命令時,稱為並發IO。並發IO只能發生在由多個磁碟組成的磁碟組上,單塊磁碟只能一次處理一個IO命令。
(3) 以SQL Server資料庫為例
有的時候,盡管磁碟的IOPS(Disk Transfers/sec)還沒有太大,但是發現資料庫出現IO等待,為什麼?通常是因為有了磁碟請求隊列,有過多的IO請求堆積。
磁碟的請求隊列和繁忙程度,通過以下性能計數器查看:
LogicalDisk/Avg.Disk Queue Length
LogicalDisk/Current Disk Queue Length
LogicalDisk/%Disk Time
這種情況下,可以做的是:
(1) 簡化業務邏輯,減少IO請求數;
(2) 同一個實例下,多個資料庫遷移的不同實例下;
(3) 同一個資料庫的日誌,數據文件分離到不同的存儲單元;
(4) 藉助HA策略,做讀寫操作的分離。
3. IOPS和吞吐量(throughput)
(1) IOPS
IOPS即每秒進行讀寫(I/O)操作的次數。在計算傳送時間時,有提到,如果IO Chunk Size大的話,那麼IOPS會變小,假設以100M為單位讀寫數據,那麼IOPS就會很小。
(2) 吞吐量(throughput)
吞吐量指每秒可以讀寫的位元組數。同樣假設以100M為單位讀寫數據,盡管IOPS很小,但是每秒讀寫了N*100M的數據,吞吐量並不小。
(3) 以SQL Server資料庫為例
對於OLTP的系統,經常讀寫小塊數據,多為隨機訪問,用IOPS來衡量讀寫性能;
對於數據倉庫,日誌文件,經常讀寫大塊數據,多為順序訪問,用吞吐量來衡量讀寫性能。
磁碟當前的IOPS,通過以下性能計數器查看:
LogicalDisk/Disk Transfers/sec
LogicalDisk/Disk Reads/sec
LogicalDisk/Disk Writes/sec
磁碟當前的吞吐量,通過以下性能計數器查看:
LogicalDisk/Disk Bytes/sec
LogicalDisk/Disk Read Bytes/sec
LogicalDisk/Disk Write Bytes/sec
『伍』 常用的內存緩存資料庫redis 讀什麼
['redis]
請使用上面的音標!
『陸』 如何設置資料庫緩存
內存資料庫有現成的redis,高效存取鍵值對,鍵設為你的查詢條件,值設為你的查詢結果轉為字元串
查詢時先從redis取,沒有再查資料庫,並且設置redis的過期時間,這種方式需要項目對實時性要求不高,這樣你才能用緩存,而且如果你的項目沒有明顯的熱點,即沒有某些內容確定會多次被查到,那你緩存就不會命中,添加緩存反而影響你得速度
redis是一種nosql的內存資料庫,感興趣你可以了解一下,優點就是性能強勁
數據查詢請求多就把結果緩存下來,你查資料庫再快也沒有直接把結果從內存讀出來快
同樣的sql請求只有第一次查資料庫,之後通通讀內存
或者你乾脆藉助這種思想,創建一個全局的map對象,然後查詢條件作key
,結果作value,就省去了了解redis的過程,把整個資料庫裝內存不太科學,你有多少條數據啊
『柒』 資料庫表空間與緩存 內存有關系么
CPU的運算速度比主內存的讀寫速度要快得多,這就使得CPU在訪問內存時要花很長時間來等待內存的操作,這種空等造成了系統整體性能的下降。為了解決這種速度上的不匹配問題,我們在CPU與主內存之間加入了比主內存要快的SRAM(StaticRam,靜態存儲器)。SRAM儲存了主內存的映象,使CPU可以直接通過訪問SRAM來完成數據的讀寫。由於SRAM的速度與CPU的速度相當,從而大大縮短了數據讀寫的等待時間,系統的整體速度也自然得到提高。高速緩存即Cache,就是指介於CPU與主內存之間的高速存儲器(通常由靜態存儲器SRAM構成)。Cache的工作原理是基於程序訪問的局部性。依據局部性原理,可以在主存和CPU通用寄存器之間設置一個高速的容量相對較小的存儲器,把正在執行的指令地址附近的一部分指令或數據從主存調入這個存儲器,供CPU在一段時間內使用。這對提高程序的運行速度有很大的作用。這個介於主存和CPU之間的高速小容量存儲器稱作高速緩沖存儲器(Cache)。CPU對存儲器進行數據請求時,通常先訪問Cache。由於局部性原理不能保證所請求的數據百分之百地在Cache中,這里便存在一個命中率。即CPU在任一時刻從Cache中可靠獲取數據的幾率。命中率越高,正確獲取數據的可靠性就越大。
『捌』 資料庫和內存資料庫有什麼區別
資料庫是數據保存在磁碟中,內存資料庫是數據保存在內存中,這就是它們的主要區別。
『玖』 為什麼 內存資料庫 差分緩沖區
內存資料庫 在傳統的資料庫表中,由於磁碟的物理結構限制,表和索引的結構為B-Tree,這就使得該類索引在大並發的OLTP環境中顯得非常乏力,雖然有很多辦法來解決這類問題,比如說樂觀並發控制,應用程序緩存,分布式等。但成本依然會略高。而隨著這些年硬體的發展,現在伺服器擁有幾百G內存並不罕見,此外由於NUMA架構的成熟,也消除了多CPU訪問內存的瓶頸問題,因此內存資料庫得以出現。 內存的學名叫做Random Access Memory(RAM),因此如其特性一樣,是隨機訪問的,因此對於內存,對應的數據結構也會是Hash-Index,而並發的隔離方式也對應的變成了MVCC,因此內存資料庫可以在同樣的硬體資源下,Handle更多的並發和請求,並且不會被鎖阻塞,而SQL Server 2014集成了這個強大的功能,並不像Oracle的TimesTen需要額外付費,因此結合SSD AS Buffer Pool特性,所產生的效果將會非常值得期待。SQL Server內存資料庫的表現形式 在SQL Server的Hekaton引擎由兩部分組成:內存優化表和本地編譯存儲過程。雖然Hekaton集成進了關系資料庫引擎,但訪問他們的方法對於客戶端是透明的,這也意味著從客戶端應用程序的角度來看,並不會知道Hekaton引擎的存在。如圖1所示
『拾』 資料庫緩存機制是什麼就是緩存是如何作用資料庫的越詳細越好。要對的。
首先你要了解下什麼是 資料庫緩存機制 (最好找書本來看下)
已經過了很久了。我都忘記了。不過可以舉個類似的例子 希望幫助你下理解。
還有些需要具體例子代碼看的話,最好還是找資料庫的相關書籍講解比較詳細 網上很少能詳細講解的 如果在學校就最好了。找老師問就可以 或者你去些關於資料庫方面的論壇上找找資料
資料庫緩存機制 緩存是介於應用程序和物理數據源之間,其作用是為了降低應用程序對物理數據源訪問的頻次,從而提高了應用的運行性能。緩存內的數據是對物理數據源中的數據的復制,應用程序在運行時從緩存讀寫數據,在特定的時刻或事件會同步緩存和物理數據源的數據。
緩存的介質一般是內存,所以讀寫速度很快。但如果緩存中存放的數據量非常大時,也會用硬碟作為緩存介質。緩存的實現不僅僅要考慮存儲的介質,還要考慮到管理緩存的並發訪問和緩存數據的生命周期。
再如:
靜態的網站的內容都是些簡單的靜態網頁直接存儲在伺服器上,可以非常容易地達到非常驚人的訪問量。但是動態網站因為是動態的,也就是說每次用戶訪問一個頁面,伺服器要執行資料庫查詢,啟動模板,執行業務邏輯到最終生成一個你所看到的網頁,這一切都是動態即時生成的。從處理器資源的角度來看,這是比較昂貴的。
對於大多數網路應用來說,過載並不是大問題。因為大多數網路應用並不是washingtonpost.com或Slashdot;它們通常是很小很簡單,或者是中等規模的站點,只有很少的流量。但是對於中等至大規模流量的站點來說,盡可能地解決過載問題是非常必要的。這就需要用到緩存了。
緩存的目的是為了避免重復計算,特別是對一些比較耗時間、資源的計算。