2011-01-31 60 views
3

我打算開發一些應用程序,如與朋友的朋友的朋友連接。它可能看起來像Facebook或Twitter,但最初我打算實施它來了解有關NOSQL數據庫的更多信息。哪個NOSQL數據庫工具更適合我的應用程序?

NOSQL中有許多數據庫工具。我經歷了許多數據庫類型,如文檔存儲,鍵值存儲,列類型,圖形數據庫。最後我想出了兩個數據庫工具,分別是cassandra & Neo4J。是否正確選擇任何一個,如果不正確我&爲我提供一些寶貴的意見。

還有一件事是我選擇的語言綁定是JAVA。

我的問題是, 哪個數據庫工具適合我的應用?

等待您的寶貴意見。感謝您花費寶貴的時間。

+4

這是一個主觀問題。你特意徵求意見。 – TheCloudlessSky 2011-01-31 12:26:21

+0

感謝您的時間。任何人都可以提出自己的看法,但我可以選擇和研究更多關於他們的意見以及它如何適合我。我有機會跟隨和研究他們的意見。這就是要求提出寶貴意見的原因。 – NANI 2011-01-31 12:32:54

回答

1

我不知道我理解所有的Cassandata一致性模型的影響相對於在多個可用區的數據一致。

給定多個區域,並且考慮到Cassandra中的協調節點使用的一致性級別不要求所有區域報告回來,但只有一個法定數量,區域數據狀態差異如何在隨後的讀取中協調一致?

是否所有的防區工作在相同的系統時鐘?還是每個區域都有自己的時鐘?如果他們不在同一個時鐘上工作,它們是如何同步的,以便在差異得到調和時,在「癒合」過程中比較時間戳?

比方說,確實有最新數據的區域現在處於脫機狀態,並且前一次寫入期間處於脫機狀態的區域(因此未更新並且包含陳舊數據)現在已恢復線上。陳舊的數據會被返回嗎?協調員有什麼方法可以知道數據是陳舊的嗎?

4

蒂姆,你真的應該分別張貼你的問題,而不是作爲一個問題的任擇議定書,它不是。

但是,爲了回答,首先,在去閱讀http://www.slideshare.net/benjaminblack/introduction-to-cassandra-replication-and-consistency本黑色的幻燈片。

完成?好了,現在的具體問題:

「怎麼會在[副本]數據狀態的差異可以在隨後的和解讀?」

最高時間戳獲勝。

「所有區域的工作時間是否與系統時鐘相同?」

時間戳由客戶端(即您的應用服務器)提供。它們應該與例如ntpd(這是很好的做法),但高精度不是必需的,因爲如果排序很重要,您應該通過使用唯一列名或通過使用外部鎖來避免衝突。

例如:如果你有一個用戶列表之後,你在Twitter的克隆,你應該給每個跟隨自己的列,並會有沒有辦法丟失數據無論多麼不同步的時鐘是。

如果您對您的網站和兩個管理員上傳新圖標的管理工具「同時,」一個更新要贏,它並沒有真正無論哪個。在這裏,你確實希望你的時鐘同步,但「幾ms內」已經足夠接近。

如果要管理用戶註冊,並要允許創建帳戶「jbellis」只有當它不存在,你需要一個鎖管理器,不管你怎麼時鐘密切synchronzied是。

「陳舊的數據會返回嗎?」

節點(比「區域」更好的思考單位)在其停機時間內不會丟失數據,直到通過讀取修復,暗示切換或反熵修復發送該數據爲止。同時,它將回復讀取陳舊數據的請求;如果使用足夠高的一致性級別,讀取請求將等待足夠的其他回覆,以確保始終能夠看到最新版本,這可能意味着如果有足夠的其他副本停機,則無法完成請求。否則,低一致性級別(例如ONE)隱含地意味着「我明白,我用較低的一致性級別獲得的較高的可用性和較低的延遲意味着我可以在停機後臨時看到陳舊的數據。」

1

如果您不需要擴展在短期內我會用Neo4j的去,因爲它被設計成儲存像你描述的一個網絡。 (如果你最終需要擴展,也許你可以在它的前面或扔東西肫。祝你好運!)

0

你看着Riak數據庫?它具有與Cassandra相同的背景,但您不需要關心時間戳同步(它們涉及解決數據狀態的不同方法)。

我的第一個應用程序建立在Cassandra數據庫上。但我現在試圖Riak,因爲它更合適。它不僅僅是按鍵(鍵 - 值/超列 - 鍵 - 值)的區別,而且還有文檔存儲功能。

它創建一個使用MapReduce的複雜查詢的方法。 Cassandra確實有使用Hadoop的選項,但聽起來很困難。

進一步它使用HTTP /一個衆所周知的定義的接入協議是那麼它很容易,當你有大量的流量管理的服務器。

唯一不好的一點是比Cassandra慢。但通常你會讀取的記錄多於寫入(並且Cassandra在寫入時優化,而不是讀取),所以最終結果應該是確定的。

相關問題