分布式文件系統(tǒng)設(shè)計步驟 hadoop設(shè)計理念和核心技術(shù)?
hadoop設(shè)計理念和核心技術(shù)?狹義的hadoop指的是HDFS和MapReduce。HDFS是hadoop分布式文件系統(tǒng),是由多臺計算機組成的集群上的組件文件系統(tǒng)。MapReduc如何使用Mongo
hadoop設(shè)計理念和核心技術(shù)?
狹義的hadoop指的是HDFS和MapReduce。HDFS是hadoop分布式文件系統(tǒng),是由多臺計算機組成的集群上的組件文件系統(tǒng)。MapReduc
如何使用MongoDb實現(xiàn)分布式Id?
在傳統(tǒng)數(shù)據(jù)庫軟件的開發(fā)中,各大數(shù)據(jù)庫也對這一需求提供了相應(yīng)的支持,比如MySQL的自增。
分布式ID的特點包括:唯一性:保證生成的ID在全網(wǎng)唯一;高可用性:確保ID在任何時候都能正確生成。
github上對分布式ID的描述是:分布式唯一性和時間序列。
主要方案包括
使用reids的incr命令,使用UUIDTwitter的雪花算法,使用zookeeper生成MongoDB的唯一ID。ObjectIdMongoDB被設(shè)計成輕量級的,不同的機器可以是全局唯一的。
其格式:
前4個字節(jié)是標(biāo)準(zhǔn)時代的時間戳,以秒為單位。時間戳與接下來的5個字節(jié)一起提供了第二級的唯一性。因為時間戳排在最前面,這意味著ObjectId將大致按照插入順序排列。這在某些方面是有用的,比如用它作為索引來提高效率。這四個字節(jié)也暗示了文檔創(chuàng)建的時間。大多數(shù)客戶端類庫都會公開一個方法來從ObjectId獲取這些信息。
接下來的3個字節(jié)是主機的唯一標(biāo)識符。通常是機器主機名的哈希值。這可以確保不同的主機生成不同的ObjectId而不會發(fā)生。為了確保同一臺機器上多個并發(fā)進程生成的ObjectId是唯一的,接下來的兩個字節(jié)來自生成ObjectId的進程標(biāo)識符(PID)。
前9個字節(jié)確保不同機器和進程在同一秒內(nèi)生成的ObjectId是唯一的。最后3個字節(jié)是自動遞增的計數(shù)器,保證同一進程在同一秒生成的ObjectId也是不同的。每個進程允許同時擁有2563(16 777 216)個不同的ObjectId。
機器ID是服務(wù)器主機的標(biāo)識,通常是機器主機名的哈希值。
您可以在同一臺機器上運行mongod的多個實例,因此您還需要添加進程標(biāo)識符PID。
前9個字節(jié)保證了同一秒內(nèi)不同機器和進程生成的ObjectId的唯一性。最后三個字節(jié)是一個自動遞增的計數(shù)器(一個mongod進程需要一個全局計數(shù)器),保證了同一秒的ObjectId是唯一的。每個進程最多允許有(256 ^ 3 ^ 167。77216)不同的ObjectId。
綜上所述,時間戳保證以秒為單位的唯一性,機器ID保證設(shè)計分布式避免時鐘同步,PID保證同一個服務(wù)器運行多個mongod實例時的唯一性,最后一個計數(shù)器保證同一秒內(nèi)的唯一性(幾個字節(jié)的選擇既要考慮存儲的經(jīng)濟性,又要考慮并發(fā)性能的上限)。
_id既可以在服務(wù)器端生成,也可以在客戶端生成,可以減輕服務(wù)器端的壓力。
主要參考: