內存中數據庫問答

5 月 14

ODBMS.org 在Raima Database Manager和內存數據庫中採訪了我們的一位工程師Jeff Parsons。

 

被畫成電路板的大腦

內存數據庫的優點和缺點是什麼?

內存數據庫根據定義,可以處理它們正在主內存中處理的數據。無需處理二級存儲,二級存儲的速度可能比訪問主存儲器中保存的數據慢幾個數量級。消除了訪問較慢的輔助存儲的需求,從而允許在內存數據庫中使用基於磁盤的數據庫不可行的算法。例如,基於磁盤的數據庫通常使用基於b樹的索引來限制定位行所需的磁盤訪問次數。內存數據庫可以使用 AVL樹 代替 樹 這減少了(或消除了)重複數據的需求,但增加了遍歷過程中訪問的行數。

無需二級存儲,可以在沒有任何二級存儲的系統中使用內存數據庫。
這使得在許多情況下都可以使用數據庫引擎。 嵌入式系統 無法支持傳統的基於磁盤的引擎。
通常,內存數據庫系統使用的內存類型不是持久性的。當應用程序關閉時,無論是乾淨還是意外關閉,存儲在內存數據庫中的數據都將丟失。某些應用程序域在運行之間不需要數據持久性,但其他應用程序域則可能需要。那些需要高度持久性的應用程序可能不適合使用內存數據庫。

內存數據庫將所有數據存儲在主存儲器中,這可能會嚴重限制可以存儲的數據量。大多數數據庫系統可以臨時分配用於存儲數據庫對象的內存,也可以分配大量內存用作存儲。無論哪種方式,可以存儲在內存數據庫中的數據量往往比基於磁盤的系統中存儲的數據量要小得多。

 

內存數據庫與將數據簡單存儲在共享內存段之間有什麼區別?

The biggest difference between in-memory databases and storing data in shared memory segments deals with a structured approach to data access. In-memory databases maintain components of the “ACID” attributes of data storage engines. The ACID properties include Atomicity, Consistency, Isolation, and Durability. While in-memory databases may relax the durability property based on non-persistent storage, they commonly support the other properties:

• 原子性 –將所有更改作為全有或全無操作提交給數據庫
• 一致性 –為所有用戶維護結構規則和關係
• 隔離 –其他用戶只有在提交更改後,其他用戶才能看到它們

在共享內存段之上實現此功能可能既耗時又容易出錯。
除了內存數據庫的事務屬性外,還有許多其他
開箱即用的優勢包括:
使用通用的定義明確的數據定義語言(SQL DDL語句)使用通用的定義明確的數據查詢語言(SQL DML語句)通過網絡通信協議遠程訪問數據
能夠以與平台無關的格式存儲數據
可用於通過CSV,XML,JSON等導入/導出的工具。能夠將內存中的數據持久保存到磁盤

 

如果某些內存停止工作,則內存數據庫可能會丟失數據:您該如何處理?

應用程序開發人員需要了解,使用內存數據庫時可能會發生數據丟失。有多種方法(例如持久性和復制)可用於緩解數據丟失的情況,但是仍然可能發生數據丟失。

堅持不懈
來馬 支持在內存中打開數據庫的兩種模式。
• 易揮發的 –首次打開時數據庫為空,關閉數據庫時將丟棄所有內容
• 執著的 –在打開時,數據庫將從輔助存儲中的內容填充,在關閉時將更改後的數據(插入,更新,刪除)寫出到輔助存儲中

如果使用持久內存模式打開數據庫,則關閉數據庫後,更改後的內容將自動寫入輔助存儲。此外,開發人員可以根據需要將更改持久保存到輔助存儲。使用
持久性可以將數據丟失限制為自上次持久性操作以來發生的情況。

複寫
許多數據庫系統支持將更改複製到另一個數據庫實例(或另一個數據庫系統)。使用複制允許從內存副本中丟失的數據從復制副本中恢復。

 

所有嵌入式數據庫也是內存數據庫嗎?

一個 嵌入式數據庫 可以定義為在應用程序中運行並且不需要安裝,配置或訪問其他進程的數據庫引擎。引擎管理的數據的存儲介質取決於實現。
最初,大多數數據庫引擎使用硬盤進行數據存儲,因為可用的內存量不會為有用的數據集提供足夠的數據量。隨著內存大小的增加,許多供應商開始增加內存功能。如今,許多嵌入式或傳統的數據庫引擎都對內存提供了一些支持。

 

Raima如何在RDM中實現內存數據庫系統?

Raima RDM數據庫引擎分為兩個組件:運行時引擎和存儲引擎。
運行時負責事務管理,規則執行,查詢處理以及維護對數據庫的本地未提交更改。只要運行時引擎需要數據庫對象,它就會從存儲引擎請求該對象。另外,在提交運行時中的本地更改後,會將它們提供給存儲引擎,以存儲在數據庫的所有用戶之間共享的位置中。運行時引擎不知道或不在乎存儲引擎是在使用主內存還是輔助存儲。

可以將存儲引擎視為 鍵/值對存儲庫。鍵是數據庫對象標識符,而值是數據庫對象的位置。對於基於磁盤的數據庫,該值將是文件標識符,文件偏移量和大小,對於內存數據庫,該值將是數據庫對象的存儲位置。
對象本身可以被編碼,壓縮和加密,但是運行時引擎將知道如何解釋內容。

通過維持這種抽象,應用程序開發人員無需執行其他任何操作,只需指定打開前配置參數即可使用內存中的RDM數據庫。應用程序,運行時和存儲引擎都可以在同一內存空間中運行,從而提供非常低的延遲訪問。如果開發人員知道數據庫將主要用於內存中,那麼他們可以使用諸如 AVL索引 優化內存訪問。

Get notified about new RDM updates

Be the first to know about new Raima Database Manager updates when they go live, use cases, industry trends and more.