內存數據庫有哪些?

零一月


內存數據庫是相對於磁盤數據庫來說的。我們都知道我們經常使用的關係型數據庫,比如MySQL,它的數據文件最終是存儲到磁盤上的。而內存數據庫則是將所有的數據存儲在內存中,磁盤和內存在訪問速率上不是一個量級的,完全沒有可比性。

隨著內存容量不斷加大、價格不斷下降,互聯網的流量越來越大的情況下,內存數據庫逐步被廣泛應用起來。

應用場景

  1. 緩存數據:將高頻訪問的數據通過一定的機制加載到內存中,減少應用與數據庫的連接,極大的提高了應用的性能;

  2. 內存計算:如果你的數據在內存中,那麼你可以充分利用CPU的資源去做數據的計算、聚合、查詢,而不用擔心數據庫是否能承受你的SQL查詢。

主流的內存數據庫

  1. 關係型內存數據庫:H2、Apache Ignite、SQLite

    • H2:支持嵌入式,服務器和集群模式,支持內存數據庫,純Java開發
    • Apache Ignite:高性能、集成化、分佈式的內存平臺,他可以實時地在大數據集中執行事務和計算,可以像操作數據庫一樣,操作內存緩存
    • SQLite:小而精美,iOS和Android開發本地數據庫的不二之選
  2. Key-Value內存數據庫:redis、Memcached

    • redis:支持String、Set、Hash、Sorted Set、List
    • Memcached:是一個簡潔的、高性能的、分佈式的內存對象緩存系統
  3. 傳統數據庫的內存數據庫引擎:

    • MySQL Memory Engine
    • SQL Server 2016 In-Memory OLTP
    • 傳統數據庫提供的內存數據庫,將磁盤數據加載到內存中,利用查詢引擎操作內存數據

總結

以上是個人整理的一些內存數據庫,都是我們平常業務開發時候多少都有用到的內存數據庫。瞭解每一種內存數據庫的特性,結合它們的優缺點並應用於不同的業務場景,才是正確的編碼之道。


內存數據庫不是銀彈,他也不能代替傳統數據庫,只有內存數據庫與傳統數據庫(磁盤數據庫)強強聯手、互相補充才能發揮出數據存儲技術的強大威力!


java架構設計


關係型 Mongodb、Hana、H2;

  • MongoDB 是一個基於分佈式文件存儲的數據庫,介於關係型和非關係型之間,數據以文檔的形式存在,文檔以BSON格式存放。

  • Hana是德國SAP公司的產品,非開源、價格比較昂貴並且對服務器硬件配置要求比較高,國內用的比較少。

  • H2開源產品,優點小而快、查詢語法簡單,嵌入式和單獨部署皆可。

KV型 Redis、Memcache、 Ignite、Guavacache;

  • Redis常被用做分佈式緩存組件,支持的數據結構比較豐富,集群架構部署性能更強悍。

  • Memcache僅僅是作為第三方緩存組件使用,不能稱之為數據庫,支持的數據結構單一,支持集群部署。

  • Apache Ignite從名字就能看的出來,Apache的開源分佈式產品,支持內嵌也支持單獨部署,功能挺強大,有興趣的可以看下官網,JVM堆外內存。

  • Guavacache僅僅是作為項目內部緩存使用,不能稱之為數據庫,內嵌式,佔用JVM堆內存。

以上就是服務器端常用的內存數據庫,大多數對持久化都支持的挺好;

但是一般關係型的用來存儲數據並且持久化,KV型的用來做緩存,兩者搭配來用。

以上僅個人觀點,歡迎大家評論區留言指正。


程序猿阿浪


1,SQLITE是一個小型的C程序庫,實現了獨立的,可嵌入的,零配置的SQL數據庫引擎。

2,ORACLE內存數據庫系列BERKELEY DB和TIMES TEN,前者只支持嵌入式內存數據,後者是獨立的內存優化數據庫。

3,EXTREMEDB內存式實時數據庫是為實時系統及嵌入式系統而特別設計的數據庫。

4,H2 DATABASE 是THOMAS MUELLER提供的一個開源的,純JAVA實現的關係數據庫。


KOALA


內存數據庫從範型上可以分為關係型內存數據庫和鍵值型內存數據庫。

在實際應用中內存數據庫主要是配合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客戶端。


無塵的劍


內存數據庫從範型上可以分為關係型內存數據庫和鍵值型內存數據庫。

在實際應用中內存數據庫主要是配合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客戶端。


分享到:


相關文章: