nosql 支持什麼“規模”的應用程序?
最近我遇到了 Nosql 數據庫概念,雖然我了解了它的方法和原因,但我沒有得到正確的答案,它支持什麼規模的項目?
它是否支持通常具有大量統計用途的大型應用程序,例如穀歌分析(範例)?他們的可靠數據或應用程序是否已經在諸如 couchbase 等此類數據庫上執行?
這個問題實在是太模糊了,無法有效回答。那裡有幾十個“NoSQL”數據儲存,它們有各種案例。這是一個 10,000 英尺的遠景。
在我看來,常用的 NoSQL 數據儲存基本上有 3 大類,鍵/值儲存、文件數據庫和大數據(hadoop)。這是一個有點人為的名稱,其中許多產品可以說可以跨越多個領域。還有一些其他類別,例如圖形數據庫,它們更專門針對特定問題,我不打算在這裡討論它們,因為我對它們沒有專業知識。
大多數 NoSQL 數據庫都是簡單的鍵/值儲存,在檢索命名鍵時速度非常快。如果您需要掃描或聚合多組數據,它們的效率尤其低下。k/v 儲存的範例包括memcached、Riak、Redis、CouchBase、 Voldemort和Amazon DynamoDB。使用HandlerSocket外掛(內置於Percona Server),甚至 MySQL 也可以用作非常快速的 k/v 儲存。這些 k/v 商店中的每一個都有不同的功能集,旨在解決不同的問題。它們中很少有適合作為應用程序的權威/主要數據儲存,因為執行集合操作是多麼困難和低效。這些主要用作記憶體層或儲存不需要關係操作的非常專業的數據。
另一類 NoSQL 數據庫是文件儲存。範例包括MongoDB和Cassandra。這些類型的數據儲存儲存比 k/v 儲存更多的結構化數據,並且通常具有更強大的查詢語言。它們具有靈活的“模式”,可以將完全不同的數據集從一行保留到下一行。
最後,您將了解真正的“大數據”儲存,其中Hadoop及其相關查詢語言、pig、hive(hadoop 的 SQL 介面)和hbase(hadoop/HDFS 之上的實時數據儲存)才是王道. 除了 hbase 之外,基於 Hadoop 的數據儲存往往是為在數百台機器上離線處理真正龐大的數據集而建構的。
作為一個旁注,讓我對“NoSQL”絕對不滿意的是它與 SQL 語言幾乎**沒有任何關係。**NoSQL 是關於重新發明數據儲存層並使其更“可擴展”(另一個模糊、被誤解的術語)和高度可用的。在大多數情況下,查詢語言是無關緊要的,其中一些數據儲存產生了非常醜陋的方式來執行即使是最簡單的操作。如果開發人員做出選擇,SQL 可以用作大多數這些數據儲存的訪問語言 - 看看VoltDB、MySQL Cluster或 Hive,以獲取具有“NoSQL”特性的分佈式 SQL 數據庫的範例。當被視為鍵/值儲存時,
SELECT value FROM table WHERE key = ?
) 並且創建一個客戶端庫相對容易,該庫創建一個一致的雜湊方案來建構一個分佈式 MySQL 集群,就像使用 Riak、Redis 或 memcached 一樣。底線是,如果您想要更多細節,則必須更明確地說明您的需求。以下只是您需要回答的一小部分問題,以限制該領域:
- 您的訪問模式是實時的 (OLTP) 還是將在批處理操作 (OLAP) 中執行?
- 您是否需要對數據執行聚合或基於集合的計算,還是只是按名稱訪問鍵?
- 你有多少數據,它的結構是怎樣的?
- 您是否確定傳統的 SQL 數據庫無法滿足您的需求?
- 您的CAP優先事項是什麼?
- 您需要ACID功能嗎?
- 您需要對數據執行什麼樣的操作?
我希望這對您的研究有所幫助。