毫無疑問,大數據的索引和查詢是至關具備挑戰性的。大數據的特色以高速、價值、多樣和大量!100KS更新每秒的速度和TBs的數據掃描,讓你不能這樣作實時,除非你有堅實的索引!想象一下這些應用程序:html
這些都是使用狀況的查詢,須要處理高攝取數據,但不能妥協毫秒的響應時間!若是你不能提供旅遊路線、記分牌,或應對實時的詐騙行爲,全部的都會關閉!好吧,這聽起來好像不太可能,而且你會問:「如何索引和查詢這類型的實時數據呢?」數據庫
全局索引和本地索引服務器
分佈式系統提供兩種類型的索引模型:網絡
#SQL would look something like this SELECT customer_name, total_logins.jan_2015 FROM customer_bucket WHERE type=「customer_profile」 ORDER BY total_logins.jan_2015 DESC LIMIT 10; #index for the query would look something like this INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) WHERE type=「customer_profile」;
這裏是在與本地索引羣集上執行查詢的步驟:分佈式
咱們假設這樣作超過100節點,你添加了第101個節點!沒有得到更快的執行此查詢。每一個節點仍然作一樣的工做,包括新節點。事實上,損害了101節點查詢的延遲!大數據
順便說一下,許多NoSQL數據庫像Couchbase服務器或MongoDB作本地索引。關於本地索引詳細信息,可參見Couchbase服務器地圖,點這裏。優化
#index for the query would look something like this INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) WHERE type=「customer_profile」 AND continent="Europe"; INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) WHERE type=「customer_profile」 AND continent="America"; INDEX ON Customer_bucket(customer_name, total_logins.jan_2015) WHERE type=「customer_profile」 AND continent="Asia";
如下是在一個全局索引的羣集上執行查詢的步驟:
1. 如今咱們知道答案全局索引上的一個節點!因此,不須要分散在這裏!咱們只需從索引中檢索頂部登陸數
2. 最後一步是將結果發送回客戶端。
不像前面的例子中的100個節點,你的第101節點如今能夠作真正的工做!查詢延遲快不少!this
全局索引在分佈式數據庫中不多出現(NoSQL或其餘)。MongoDB和Cassandra都沒有全局索引。然而,能夠在Couchbase服務器下的全局二級索引看到全局索引。Couchbase 服務器GSIS也能夠獨立部署到集羣中的一個單獨的區域使用索引服務。這意味着數據服務節點正在作的核心數據操做(插入/更新/刪除)不須要在集羣的其餘部分進行索引。這個部署拓撲稱爲MDS,你能夠在這裏瞭解更多。code
在分佈式數據庫的世界裏,重要的是選擇索引。不然,查詢的延遲多是不可預測的,大數據能夠實時查詢到不可能的東西!你能夠在Couchbase服務器上查看一些添加索引的選項。server