內存資料庫
⑴ 內存資料庫優劣勢有那些
看你需要的場景:
1. 應用程序構造大量的鏈表,樹等復雜的數據結構代碼很多而且容易出錯調試麻煩,特別是對C/C++這種語言
2. 不得不說關系資料庫的表達能力很強,代碼量少,開發迅速, 但是mysql等等在性能上比手寫的數據結構慢了很多
3. 我看到的內存資料庫就是在這個場景下大有可為之地:有較高的性能需求,快速開發
⑵ 內存資料庫主要功能有哪些
內存資料庫從范型上可以分為關系型內存資料庫和鍵值型內存資料庫。 在實際應用中內存資料庫主要是配合oracle或mysql等大型關系資料庫使用,關注性能。 作用類似於緩存,並不注重數據完整性和數據一致性。 基於鍵值型的內存資料庫比關系型更加易...
⑶ 內存資料庫是怎麼實現數據到內存的
相對於磁碟,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁碟上訪問能夠極大地提高應用的性能。同時,內存資料庫拋棄了磁碟數據管理的傳統方式,基於全部數據都在內存中重新設計了體系結構,並且在數據緩存、快速演算法、並行操作方面也進行了相應的改進,所以數據處理速度比傳統資料庫的數據處理速度要快很多,一般都在10倍以上。內存資料庫的最大特點是其"主拷貝"或"工作版本" 常駐內存,即活動事務只與實時內存資料庫的內存拷貝打交道。顯然,它要求較大的內存量,但並非任何時刻整個資料庫都存放在內存,即內存資料庫系統還是要處理I/O。
⑷ 在windows下用哪些內存資料庫,類似redis的
內存資料庫從范型上可以分為關系型內存資料庫和鍵值型內存資料庫。在實際應用中內存資料庫主要是配合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客戶端。
⑸ 資料庫和內存資料庫有什麼區別
資料庫是數據保存在磁碟中,內存資料庫是數據保存在內存中,這就是它們的主要區別。
⑹ 內存資料庫有哪些
比較常用的有FastDB、SQLite、Berkeley DB、GigaBASE、H2等
⑺ 內存資料庫主流的有哪些,並給出各自特點
目前關系型內存資料庫主要有MySQL(使用內存存儲引擎)、SQL Server(In-Memory OLTP)、數蠶內存資料庫、Oracle 內存資料庫。
MySQL:免費產品,內存存儲引擎使用較少。
SQL Server:微軟的商業化產品,是為了適應大數據等業務產品新添加的存儲引擎,微軟SQL語句兼容性好,商業化成熟度高。
數蠶內存資料庫:數蠶科技針對中小型企業的內存資料庫,查詢響應快,支持多種sql特性。
Oracle 內存資料庫:基於內存計算的關系資料庫, 提供了響應時間極 短且吞吐量極高的應用程序。
非關系型內存資料庫主要有FastDB、Memcached和Redis等主流內存資料庫。結構簡單,支持數據結構多以基礎數據結構為主,一般應用於緩存等非關鍵數據存儲,其優點是數據查詢速度快,對下層編程介面良好。
⑻ 什麼情況下用內存資料庫
相對於磁碟,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁碟上訪問能夠極大地提高應用的性能。同時,內存資料庫拋棄了磁碟數據管理的傳統方式,基於全部數據都在內存中重新設計了體系結構,並且在數據緩存、快速演算法、並行操作方面也進行了相應的改進,所以數據處理速度比傳統資料庫的數據處理速度要快很多,一般都在10倍以上。內存資料庫的最大特點是其"主拷貝"或"工作版本" 常駐內存,即活動事務只與實時內存資料庫的內存拷貝打交道。顯然,它要求較大的內存量,但並非任何時刻整個資料庫都存放在內存,即內存資料庫系統還是要處理I/O。
內存資料庫是以犧牲內存資源為代價換取數據處理實時性的,內存資料庫和磁碟資料庫都是當今信息社會里每個企業所必須的關系型資料庫產品,磁碟資料庫解決的是大容量存儲和數據分析問題,而內存資料庫解決的是實時處理和高並發問題。兩者的存在是相輔相成的,內存資料庫的事務實時處理性能要遠強於磁碟資料庫。但是相對的,他的數據安全方面還沒有達到磁碟資料庫比肩的地步。
內存資料庫將物理內存作為數據的第一存儲介質,而將磁碟作為備份。隨著電信業務的發展,系統對實時性的要求和對業務靈活修改的要求非常高,在此種情況下對於內存資料庫的需求也越來越高。磁碟資料庫的做法是將數據存入內存中進行處理,這種方式的可管理性及數據安全可靠性都沒有保障。而內存資料庫正是針對這一弱點進行了改進。
實際上,內存資料庫並不是一項時髦技術,其出現於上世紀60年代末,但由於市場的需求原因在90年代後期才開始發展。作為新一代資料庫,Altibase產品已經走向混合型資料庫,其版本Altibase 4.0已經有一套自帶的磁碟資料庫,用戶一旦購買了Altibase的內存資料庫,就無須再購買磁碟資料庫。它把熱數據(經常被使用的、訪問比較高的、經常要運算的數據)放在內存資料庫里,而把歷史性數據放在磁碟資料庫里,可為用戶進一步減少投資。
對於內存資料庫而言,可以將同樣資料庫的部分內容存放於磁碟上,而另一部分存放於內存中。用戶可以選擇將數據存儲在內存表中以提供即時的數據訪問。若訪問時間不緊急或數據存於內存中所佔空間過大時,用戶可將這些數據存入磁碟表中。
比如,在手機用戶開始拔打電話時,如果應用基於內存資料庫技術的混合數據管理引擎,就通過內存表檢索其服務選項並立即驗證用戶身份,而將通話清單和計費清單歸檔到磁碟表中。從而,達到了速度與資源使用的平衡。
內存資料庫的技術,一個很重要的特點,是可以對內存中的數據實現全事務處理,這是僅僅把數據以數組等形式放在內存中完全不同的。並且,內存資料庫是與應用無關的,顯然這種體系結構具有其合理性。內存引擎可以實現查詢與存檔功能使用的是完全相同的資料庫,同時內存表與磁碟表也使用的是完全相同的存取方法。存儲的選擇,對於應用開發者而言是完全透明的。
對於內存資料庫而言,實現了數據在內存中的管理,而不僅僅是作為資料庫的緩存。不像其它將磁碟數據塊緩存到主存中的資料庫,內存資料庫的內存引擎使用了為隨機訪問內存而特別設計的數據結構和演算法,這種設計使其避免了因使用排序命令而經常破壞緩存資料庫性能的問題。通過內存資料庫,減少了磁碟I/O,能夠達到了以磁碟I/O 為主的傳統資料庫無法與其相比擬的處理速度。
因此,內存資料庫技術的應用,可以大大提高資料庫的速度,這對於需要高速反應的資料庫應用,如電信、金融等提供了有力支撐。
由於把大多數數據都放在內存中進行操作,使得內存資料庫有著比磁碟資料庫高得多的性能表現,這一特點非常契合電信企業運營支撐系統對實時性的要求。
電信業的競爭正在全方位地展開,這種競爭必然帶來新的價值鏈模式以及新的計費方式,這些變化對目前的電信運營支撐系統是一個挑戰。比如,多種業務的計費環節將不再是單一的按照時長或通信距離收取費用,而可能是根據時長、內容、使用量等多種參數的組合計費。為了應對這些挑戰,電信企業先後引入了內存資料庫,以提高後台數據管理的實時性、精確性和靈活性。
盡管內存資料庫已不是傳統磁碟資料庫的概念,但是內存資料庫本質上還是資料庫,它也具有一般資料庫的基本功能:
■ 永久數據的管理,包括資料庫的定義、存儲、維護等;
■ 完成各種數據操作,如查詢處理、存取、完整性檢查;
■ 事務管理,包括調度與並發控制等;
■ 對存取的控制和安全性檢驗;
■ 具有資料庫的可靠性恢復機制。
相對於利用程序開發手段調用內存處理來說,內存資料庫自有其優勢。首先,內存資料庫是產品化的資料庫管理軟體,極大縮短了開發周期; 其次,內存資料庫有著開放的平台和介面,程序開發和移植更加靈活便捷,也便於維護和二次開發; 第三,可以通過使用統一的SQL語言方便地查詢內存中的數據; 最後,能在資料庫中保障數據的安全性和完整性。這些優勢,對於快速部署和簡化維護都是有利的。
但內存資料庫也有其不可避免的缺點,比如: 不容易恢復,內存資料庫中的數據不總是永久的,為了保證實時,也不一定是一致和絕對正確的,有的是短暫的,有的是暫時不一致或非絕對正確的。
電信企業一直是內存資料庫的主要用戶,近幾年來,隨著計算機硬體技術的飛速發展、內存容量的提高、價格下跌以及計算機進入64位時代操作系統後可以支持更大的地址,為內存資料庫的實現提供了可能。目前內存資料庫在電信行業的應用也日趨成熟,已有超過90G的電信系統案例,能自動擴展內存空間,不需要重啟資料庫,提供ESOL自定義存儲過程,支持多線程,開發效率高,程序移植容易等等。
下面以兩個例子來介紹內存資料庫的應用。
?電信計費數據的載入
電信的二次批價和實時累賬是計費系統中的兩個必備功能。
所謂二次批價是相對於一次批價來說的。
一次批價是按照國家標准資費來進行價格計算,比如: 全球通每分鍾本地通話為0.4元,在一次批價完成後,會根據這個用戶的套餐進行再一次的計算。以北京全球通用戶接聽4分鍾的電話為例,一次批價完成後,這條話單的價格是1.6元,如果這個用戶參加了10元包月接聽套餐,那麼在二次批價後,這次通話的費用就為0元。
一次批價是用於各大運營商之間結算的,而二次批價是針對用戶個人的。
實時累賬是將用戶從每月1號到目前為止的所有費用累加起來,也就是用戶目前可以通過10086查到截止到前一天的實時話費。累賬值可以幫助用戶控制高額話費或是供用戶即時查詢消費信息。
二次批價和實時累賬過程涉及用戶資料、用戶套餐等與用戶相關的信息,電信支撐系統在開始批價時必須載入這些數據。稍大一點的省級運營商的這些數據就會超過1000萬條,計費處理模型也由於套餐的組合、產品的組合以及不同的優惠規則變得相當復雜,載入這部分數據對系統而言是一筆不小的開銷,這就使得現在的計費處理速度比較慢,而且很難做到對數據的實時更新。內存資料庫的引入在一定程度上解決了這個問題。
在計費二次批價過程中數據量最大的是詳單數據,這部分數據不用放在內存資料庫中,每處理完一個話單文件或達到設定的提交記錄數時直接操作磁碟資料庫,不會影響系統性能。最急切的是將用戶資料、套餐、營業套餐和計費套餐對應關系數據、計費套餐模型數據及用戶累計數據放到內存資料庫中,這部分數據查詢操作遠比數據新增和更新操作要頻繁。除了這些數據外,當然還有應用需要的其他數據也都可以載入到內存資料庫。
在採用內存資料庫後,用戶通過營業部或客戶查詢實時話費的時候完全可以做到實時,比目前只能提供查詢到前一天的實時話費在業務上有了質的飛躍。因為系統在處理這部分數據時查詢流程和以前的完全一樣,但系統省去了以往內存中的數據和磁碟資料庫數據同步的環節,所以就能做到了實時查詢。對於信控來說也同樣,以往系統在累完賬後要按照一定周期刷新信控數據,這就存在一個時間差,不能夠完全做到實時。
而採用內存資料庫後,信控可以直接取得內存資料庫中的實時話費累計表中的數據,完全實現實時預警、停機。二次批價和累賬中採用內存資料庫後,對防欺詐、收入保障系統也有相當大的好處,這樣能夠充分保證運營商的切身利益。
另外,在採用內存資料庫後,整體提高了系統批價、累賬的處理速度,大大緩解訪問磁碟資料庫的壓力,提高數據查詢、修改、刪除的效率,也為後付費和預付費的融合提供了可能。
電信計費數據的同步
電信營業數據和計費系統中的數據總是在不斷的變化中,這就涉及內存資料庫中的數據和磁碟資料庫數據的同步問題(為了描述清楚,這里的磁碟資料庫以Oracle DB為例來說明)。數據同步包括兩部分: 從內存資料庫到Oracle DB數據同步和從Oracle DB到內存資料庫的同步。
1. Oracle DB到內存資料庫同步
這部分數據同步採用增量表的方式,營業系統或CRM新增或更新的數據將生成到Oracle的增量表中,計費後台程序先到這些增量表中查詢數據。如果能在這些增量表中查到數據就把這些數據更新到內存資料庫對應表中,如果查不到,就直接從內存資料庫中直接查詢,從而保證了數據的完整性和實時性。由於增量表的數據量一般會很小,所以這部分操作不會影響系統的性能。
2. 內存資料庫到Oracle DB同步
由於Oracle的計費後台批價、累賬數據幾乎都載入到了內存資料庫中,所以Oracle資料庫對應的數據表將主要用於對內存資料庫的數據備份。
用戶最新的實時話費等信息都保存在內存資料庫中,實時話費查詢將直接連接到內存資料庫中查詢,保證用戶得到最新的費用信息。信控也直接從內存資料庫查詢數據,因此對Oracle中的這部分數據已經沒有實時性的要求。這時內存資料庫到Oracle的同步可以由應用程序生成文件,定時地往Oracle資料庫中同步備份,或者採用Oracle 存儲過程在系統相對空閑時間段進行數據導入就可以了。
總體而言,由於市場與技術的快速發展,電信業務在不斷擴充,其運營和管理不斷優化,傳統的一些支撐系統的架構已經逐漸不能滿足日益增長的業務要求和客戶需求,引入一些新的技術來解決我們生產中遇到的問題是必然的。比如採用內存資料庫來代替以前的共享內存技術,使得原來在內存中不標準的東西,包括介面、格式和管理都標准化了。
內存資料庫只是多種新技術中有代表性的一種而已,只要解放思想、選用得當,完全可以在投入不大的情況下克服系統中的瓶頸,以最小的代價獲得最大回報。
通用資料庫大家見的多了,Oracle、Db2、Sqlserver、Sybase、Informix 還有最近比較火的Mysql、和Pqllite,當然還不能忘記開源的PostgreSQL。通常情況下這些資料庫可以承擔重要業務,但是在要求高性能方面還是略有不足。在計費系統中如果用戶信息常常改變的話延遲方面就會產生比較大的影響,甚至能影響到計費系統的正常運行。
我接觸到唯一的內存資料庫就是亞信在中移動計費中心稽核系統中使用的。由於稽核系統需要實施同步用戶狀態信息和訂購信息,然後對產生的話單進行稽核,如果響應速度較慢的話就會產生錯誤的結果。最初沒有稽核系統的時候,計費的標准基本是sp發過來的,然而用戶方面卻經常發現自己沒有實際使用或者已經取消這項業務的時候,自己的帳單中仍然收取了費用,因此中移動決心要對sp的話單進行稽核,以自己的數據為標准,徹底剪斷sp亂收費的手段。
如果要取到用戶狀態信息和訂購信息的話就要從多個系統中同步過來,同時對話單進行稽核,中間的處理時間要求比較嚴格(用戶可能會在短時間內檢查自己的話費信息),對系統響應時間就要盡量短。
通用資料庫在這方面處於劣勢。亞信就以三台rx8420作為資料庫主機,將31個省用戶的信息按照數量的多少分擔到三台主機,每個省至少有一個入庫進程,對於用戶比較多的就採用多個進程進行入庫。數據的採集來源主要是通過BOSS和計費的一級系統。
由於數據是存儲在內存中,所以存儲的數據結構和通用資料庫有所差異,同時為了保證數據的安全,在磁碟上有一個內存數據的鏡像,每隔一定時間將內存中的數據同步到磁碟上,當主機故障時可以通過磁碟恢復數據。當主機故障時,會有備用主機通過HA接管。但是對於數據操作的日誌和回滾就沒有Oracle做的好了,只提供了簡單的恢復機制。
在計費系統中首先要對sp發來的話單進行稽核,主要標準是用戶狀態和訂購信息。例如用戶最近7天一直處於關機狀態,如果sp的話單中出現新的訂購信息就將此條話單作為錯單處理。移動通過這種方式在和sp的博弈中取得主動。稽核系統上線後用戶對於sp的投訴問題明顯減少。
鏈接一:內存資料庫與傳統資料庫的異同
傳統的資料庫系統是關系型資料庫,開發這種資料庫的目的,是處理永久、穩定的數據。關系資料庫強調維護數據的完整性、一致性,但很難顧及有關數據及其處理的定時限制,不能滿足工業生產管理實時應用的需要,因為實時事務要求系統能較准確地預報事務的運行時間。
對磁碟資料庫而言,由於磁碟存取、內外存的數據傳遞、緩沖區管理、排隊等待及鎖的延遲等使得事務實際平均執行時間與估算的最壞情況執行時間相差很大,如果將整個資料庫或其主要的"工作"部分放入內存,使每個事務在執行過程中沒有I/O,則為系統較准確估算和安排事務的運行時間,使之具有較好的動態可預報性提供了有力的支持,同時也為實現事務的定時限制打下了基礎。這就是內存資料庫出現的主要原因。
內存資料庫所處理的數據通常是"短暫"的,即有一定的有效時間,過時則有新的數據產生,而當前的決策推導變成無效。所以,實際應用中採用內存資料庫來處理實時性強的業務邏輯處理數據。而傳統資料庫旨在處理永久、穩定的數據,其性能目標是高的系統吞吐量和低的代價,處理數據的實時性就要考慮的相對少一些。實際應用中利用傳統資料庫這一特性存放相對實時性要求不高的數據。
在實際應用中這兩種資料庫常常結合使用,而不是以內存資料庫替代傳統資料庫。
鏈接二:幾款內存資料庫產品
■ Oracle TimesTen
Oracle TimesTen是Oracle從TimesTen公司收購的一個內存優化的關系資料庫,它為應用程序提供了實時企業和行業(例如電信、資本市場和國防)所需的即時響應性和非常高的吞吐量。Oracle TimesTen可作為高速緩存或嵌入式資料庫被部署在應用程序層中,它利用標準的 SQL 介面對完全位於物理內存中的數據存儲區進行操作。
■ Altibase
Altibase是一個在事務優先的環境中提供高性能和高可用性的軟體解決方案。它提供高性能、容錯能力和事務管理能力,特別適合通信、網上銀行、證券交易、實時應用和嵌入式系統領域。Altibase能夠最大限度地發揮資料庫服務系統的潛力,增強數據伺服器的處理能力。Altibase支持客戶端/伺服器架構或嵌入式架構。其中客戶端/伺服器架構非常適合一般的應用。而嵌入式架構將應用程序嵌入到資料庫伺服器,適合於有高時效要求的實時系統。
■ eXtremeDB
eXtremeDB實時資料庫是McObject公司的一款特別為實時與嵌入式系統數據管理而設計的資料庫,只有 50K到130K的開銷,速度達到微秒級。eXtremeDB完全駐留在主內存中,不使用文件系統(包括內存檔)。eXtremeDB採用了新的磁碟融合技術,將內存拓展到磁碟,將磁碟當做虛擬內存來用,實時性能保持微秒級的同時,數據管理量在32BIT下能達到20G。
⑼ 什麼樣的內存資料庫是好的內存資料庫
查詢速度快,支持結構豐富,比如redis、數蠶內存資料庫
支持SQL,數據類型豐富,比如MySQL memory存儲引擎,數蠶內存資料庫,SQL Server 內存存儲,SAP HANA。
⑽ 內存資料庫主流的有哪些,並給出各自特點!
內存資料庫從范型上可以分為關系型內存資料庫和鍵值型內存資料庫。
在實際應用中內存資料庫主要是配合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客戶端。