成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Cassandra內(nèi)部機制之讀操作

數(shù)據(jù)庫 其他數(shù)據(jù)庫
這里我們將介紹的是NoSQL中的Cassandra數(shù)據(jù)庫的讀操作,

讀操作與一致性

Brewer的CAP定理是分布式系統(tǒng)中的一個基本定理:分布式系統(tǒng)可以有一致性(Consistency)、可用性(Availability)以及分區(qū)容錯性(Partition-tolerance)這三種屬性,但是只能同時確保其中的兩個屬性.在Cassandra中,他們保證AP并弱化一致性為眾所周知的最終一致性(Eventual Consistency). 考慮下面這種情況,讀操作與寫操作在時間上非常接近.假設你擁有一個Key “A”,它的值在你的集群中為“123”.現(xiàn)在,你將“A”更新為“456”.寫操作被發(fā)送到N個不同的節(jié)點,每個節(jié)點都耗費部分時間來寫這個值.現(xiàn)在,你發(fā)送一個讀取Key “A”的請求.這些節(jié)點中的某些節(jié)點中這個Key對應的值可能仍然為“123”,而同時節(jié)點中的其他節(jié)點此Key的值為“456”.他們最終都會返回“456”,但并不能保證什么時候可以做到(在實踐中,通常是幾個毫秒的時間).接下來你就會發(fā)現(xiàn)為什么這一點很重要.

在你的客戶端,讀操作與寫操作類似,客戶端發(fā)送一個讀請求到Cassandra集群中的任一隨機節(jié)點(也就是存儲代理,Storage Proxy).這個代理確定持有需要被讀取數(shù)據(jù)的N份拷貝所在的環(huán)上的節(jié)點(根據(jù)復制放置策略),并對每一個節(jié)點發(fā)出一個讀請求.由于最終一致性的限制,Cassadra允許客戶端選擇讀一致性的強度:

◆單一讀 – 代理返回它獲得的第一份響應. 這樣很可能返回過期的數(shù)據(jù).

◆仲裁數(shù)讀取 – 代理等待一個簡單多數(shù)返回同樣的數(shù)據(jù).這樣讀取過期數(shù)據(jù)(除非有節(jié)點宕機)會變得更加困難,但也更慢了.

在后臺,代理還會對任何不一致的響應執(zhí)行讀修復(read repair).代理會往任何返回較早的值的節(jié)點發(fā)送一個寫請求,以確保這些節(jié)點在將來可以返回最新的值.下面是部分邊緣狀況,我不清楚Cassandra是如何進行處理的:

◆如果有偶數(shù)個節(jié)點有回應,其中一半返回值“X”而另一半返回值“Y”?由于每個列的值都有時間戳,我推測它可能會使用時間戳來做最后的裁判.

◆如果有兩個包含舊時間戳的節(jié)點返回“X”而一個有新時間戳的節(jié)點返回“Y”,Cassandra該如何處理? 多數(shù)會覆蓋時鐘嗎?

◆如果集群的節(jié)點的始終不同步,Cassandra會如何操作?

掃描范圍

作為鍵值存儲(Key/value store),Cassandra運轉良好:給定一個鍵(Key),它就會為你返回這個鍵(Key)對應的值(Value).但這通常還不足以回答關鍵的問題:如果我想要讀取所有姓(last name)從Z開始用戶?或者讀取所有在2010年2月1日到2010年3月1日之間下的訂單?要回答這些問題,Cassandra必須知道如何來確定持有這些相關值的節(jié)點.這個工作是由分割器(Partitioner)來完成的.默認情況下,Cassandra會使用RandomPartitioner(隨機分割器),它可以確保將負載均勻地分布在集群上,但是無法使用它來做范圍掃描.作為替代,一個列族(Column Family)可以配置使用OrderPreservingPartitioner(保留順序的分割器),它知道如何將一個范圍的鍵(Key)映射(map)到一個或多個節(jié)點上.實際上,它知道哪個(些)節(jié)點持有你的按字母排序的用戶的數(shù)據(jù)以及哪個(些)節(jié)點持有二月份的訂單.

單一節(jié)點上的讀取操作

因此,將分布式系統(tǒng)的所有胡說八道都放在一邊,當執(zhí)行讀操作時每個節(jié)點在做什么? 回想一下, Cassandra有兩個級別的存儲:Memtable與SSTable. 從Memtable中讀取相對無痛 – 我們是在內(nèi)存中進行操作,數(shù)據(jù)量也相對較小,在這些內(nèi)容中循環(huán)查找盡可能很快.掃描SSTable時,Cassandra使用一個更低級別的列索引與布隆過濾器(bloom filter)來查找磁盤上的必要的數(shù)據(jù)塊,對數(shù)據(jù)進行反序列化(deserialize),并確定需要返回的真實數(shù)據(jù). 這里會發(fā)生大量的磁盤IO,因此最終造成的讀延時會比類似的DBMS還要高. Cassandra提供了部分行緩存(row caching),它確實解決大部分的延時.

這篇文章時一個Cassandra的讀取路徑的旋風之旅. 要想知道更多關于此主題的內(nèi)容,請參考存儲配置(StorageConfiguration)的維基文章. 我將在下篇文章中介紹Cassandra中的部分技巧(訣竅), Cassandra用它們來解決分布式系統(tǒng)內(nèi)置的無數(shù)邊緣狀況

cassandra

原文鏈接:http://www.dbthink.com/?p=432

【編輯推薦】
  1. 詳解NoSQL數(shù)據(jù)庫Apache Cassandra的配置
  2. 漫談Cassandra客戶端的使用
  3. 詳解Cassandra數(shù)據(jù)模型
  4. 詳解Cassandra數(shù)據(jù)庫的寫操作
  5. 新興數(shù)據(jù)庫打破整個舊規(guī)則
  6. 探尋關系數(shù)據(jù)庫和ORM的最佳替代者
責任編輯:彭凡 來源: www.dbthink.com
相關推薦

2010-06-01 16:43:07

Cassandra內(nèi)部

2010-05-31 17:18:39

Cassandra數(shù)據(jù)

2025-01-07 08:00:00

有序集合數(shù)據(jù)結構

2017-09-05 08:08:37

asyncio程序多線程

2023-06-07 15:25:19

Kafka版本日志

2011-06-22 16:50:09

Qt 進程 通信機制

2018-12-26 16:30:09

SQL Server內(nèi)部運行機制數(shù)據(jù)庫

2017-04-01 16:30:15

cassandrajava數(shù)據(jù)庫

2010-09-26 16:14:22

JVM實現(xiàn)機制JVM

2010-05-26 14:37:56

Cassandra數(shù)據(jù)

2017-09-05 10:20:30

PyTorchTensorPython

2015-06-16 10:44:42

2010-10-26 17:17:37

創(chuàng)建ORACLE索引

2012-09-06 10:07:26

jQuery

2021-07-22 09:43:09

Golang語言并發(fā)機制

2023-11-22 12:25:05

C++RTTI

2011-05-25 14:35:47

Oracle緩沖區(qū)調(diào)整性能

2015-07-21 17:23:32

用友IUAP

2009-07-22 16:13:40

iBATIS用法SqlMapTempl

2018-07-27 10:39:13

對象存儲Git
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品亚洲一区二区 | 成人精品 | 亚洲视频区 | 亚洲综合久久久 | 亚洲香蕉在线视频 | av先锋资源| 免费观看羞羞视频网站 | 久草在线影 | 欧美日韩综合 | 欧洲一区二区三区 | 久久免费福利 | a黄视频 | 亚洲国产高清在线 | 一区二区免费 | 毛片视频网站 | 国产精品一区二区福利视频 | 久久69精品久久久久久久电影好 | 亚洲综合一区二区三区 | 日韩精品在线免费观看 | 中文字幕欧美一区 | 国产91一区二区三区 | 韩日视频在线观看 | 4h影视| 亚洲精品国产第一综合99久久 | 久久久久久一区 | 日韩免费av网站 | 天天射中文| 在线永久看片免费的视频 | 91精品国产一区二区三区香蕉 | 91精品国产91久久综合桃花 | 精品视频一区二区三区在线观看 | 911影院| 7777在线 | 91久久精品日日躁夜夜躁国产 | 亚洲成av| 欧美一级高潮片免费的 | 成人国产精品免费观看视频 | 97色在线观看免费视频 | 久久精品一区二区三区四区 | 在线免费观看黄色 | 久久精品在线免费视频 |