2013-07-18 53 views
-1

使用clojure地圖與真實(例如mysql)數據庫的優缺點是什麼?顯然它取決於記錄的數量和表的寬度,但我認爲在某個時刻,假設真實DB的效率/性能超過了調用外部系統的延遲。對於現代PC(例如幾GHz和GB RAM),數據庫大小的限制在哪裏?如果我正在做的基本查詢不涉及很多連接,那麼clojure映射可以和真正的db一樣好嗎?Clojure地圖與「真實」數據庫

什麼是真正的數據庫下做clojure地圖不是?爲什麼我不能擁有包含1000萬條目的clojure地圖,或者我可以嗎?性能或多線程等等呢?假設在db中有散列映射和O(1)或O(log N)算法,類似於如何實現clojure映射和其他內容。

感謝

+2

這是一個問題在一個。 – toniedzwiedz

回答

1

你那種比較蘋果和桔子這裏 - Clojure的地圖是低層次的數據結構,一個RDBMS如MySQL是一個全面的軟件應用程序,它提供的功能一大堆。老實說,我認爲兩者在低級性能特徵方面的比較有點誤導。請考慮各自提供的高級功能:

Clojure映射是內存中的數據結構。您可以將[鍵,值]對粘貼到地圖中,並且可以通過鍵查看值。它們明顯受到系統可用物理內存的限制,當系統關閉時會丟失它們。如果你想爲一個合理大小的數據集創建一個短暫的鍵值存儲,它們是非常棒的。

一個RDBMS通常住在它自己的進程中,你使用網絡協議進行通信(儘管有些可以嵌入進程中)。它提供了許多低級數據結構不具備的功能,如訪問控制,複製等,但最重要的可能是:

  • 磁盤上的數據持久性。
  • 查詢和更新數據存儲內容的高級語言。

由於RDBMS具有的事務性和持久性功能,它將比內存映射慢得多。您的設置,配置和維護也將付出更多的努力。

要選擇使用哪一個,真正取決於您的應用程序所需的功能。如果您關心持久性或高級查詢語言,那麼您將需要查看RDBMS或一些更新的數據庫技術,如Mongo,Couch或Datomic。

+0

我可能應該澄清一下我想到的具體應用。在電子設計工具(如EDA,CAD等)中,PCB上有1k個組件,庫中可能有10k個組件,大型網表等。每個組件都有許多屬性,足跡,供應商等。有時它需要在內存中並快速訪問;其他時候當你關閉或通過電子郵件發送給需要持久存儲的人。在設計過程中,您經常選擇或過濾組件。所以它聞起來像一個數據庫,但它可以在地圖上執行。 – Sonicsmooth

+0

聽起來像一個鍵/值存儲區上的緩存層(例如MongoDB)。 – Alex