[英]How do in-memory databases provide durability?
如果您希望持久化寫入持久存儲的操作是唯一的選擇(您可能不想在獨立的數據中心中構建具有獨立電源的許多集群,而仍然祈禱它們永遠不會同時發生故障)。 另一方面,這取決於您的數據的價值。 如果有必要,那么具有足夠復制能力的純內存數據庫可能是合適的。 順便說一句,即使將硬盤存儲在硬盤上,硬盤也可能會失敗,因此這不是理想的解決方案。 您可以查看http://www.julianbrowne.com/article/viewer/brewers-cap-theorem選擇復制權衡。
Prevayler http://prevayler.org/是使用持久性存儲備份的內存系統示例(代碼非常簡單,順便說一句)。 持久性是通過保存在適當設備(例如HDD或SSD)上的事務日志提供的。 修改數據的每個事務都會寫入日志,該日志用於在斷電或數據庫/系統重新啟動后恢復數據庫狀態。 除了Prevayler,我還看到了用於持久化消息隊列的類似方案。 實際上,這與“經典” RDBMS的工作方式類似,不同之處在於日志僅是寫入底層存儲的數據。 日志還可以用於復制,因此您可以將日志的一個副本發送到活動副本,將另一個副本發送到HDD。 當然,各種組合都是可能的。
所有數據庫都需要非易失性存儲以確保持久性。 內存映像不提供耐用的存儲介質。 釋放電源后不久,您的內存映像將失效。 同樣,一旦數據庫進程終止,操作系統將釋放包含內存映像的內存。 無論哪種情況,都將丟失數據庫內容。
在將任何更改寫入非易失性存儲器之前,它們並不是真正的持久性。 這可以包括將所有數據更改寫入磁盤,也可以寫入所做更改的日志。
在空間或大小至關重要的情況下,非易失性存儲器(例如閃存)可以代替HDD。 但是,據報告閃存存在可寫入的寫入周期數問題。
在回顧了您以前的文章之后,只要您可以使最后一台服務器保持運行狀態,多服務器復制就可以工作。 一旦出現問題,您就可以放松隊列。 但是,可以考慮使用許多替代Oracle的方法。
PDA通常使用電池備份的內存來存儲其數據庫。 電池耗盡后,這些數據庫將無法使用。 備份很重要。
內存中是指所有數據都存儲在內存中以便訪問。 讀取數據后,可以從磁盤或內存中讀取數據。 對於內存數據庫,總是從內存中檢索它。 但是,如果服務器突然關閉,數據將丟失。 因此,據說內存數據庫缺乏對ACID持久性部分的支持。 但是,許多數據庫采用不同的技術來實現持久性。 下面列出了此技術。
內存數據庫中的classic不能提供經典的持久性,但是根據您的要求,您可以:
您為什么不想使用永久性存儲?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.