SDB出現(xiàn)的一系列問題是由于它的“簡(jiǎn)單”特性造成的,SDB主要有以下兩個(gè)方面的問題? 一方面是支持的操作類型不夠,像連接、對(duì)結(jié)果的排序這樣的重要操作目前SDB都不支持,這些工作用戶必須自己通過程序來完成,當(dāng)然也不排除Amazon會(huì)在日后向SDB中添加這樣的功能。另一方面的問題是由它的簡(jiǎn)單存儲(chǔ)方式造成的,所有的數(shù)據(jù)在SDB中都以字符串形式存儲(chǔ),因此在做查詢操作時(shí)采取的是詞典順序(Lexicographical Order),有些時(shí)候直接釆用這種比較方法會(huì)出現(xiàn)一些意想不到的問題。對(duì)于這類問題,Amazon也提供了以下一些解決方式。
(1)整數(shù)補(bǔ)零(Zero Padding)。一般情況下對(duì)數(shù)字20和100的比較很簡(jiǎn)單,20顯然排在100之前,但是用字符串方式存儲(chǔ)并按詞典順序比較則結(jié)果相反,因?yàn)?排在2之前。對(duì)于這種情況。Amazon建議在整數(shù)之前補(bǔ)零。也就是用00020和00100進(jìn)行比較,顯然這可以得到和按數(shù)字順序比較一樣的結(jié)果。
(2)對(duì)負(fù)整數(shù)集添加正向偏移量(Negative Numbers Offsets)。這種方法就是對(duì)有負(fù)數(shù)在的數(shù)據(jù)集中的每個(gè)數(shù)加上一個(gè)較大的整數(shù),使負(fù)數(shù)全部變成整數(shù),相當(dāng)于對(duì)所有數(shù)做正偏移,如此就能保證比較結(jié)果的準(zhǔn)確性。
(3)采用ISO 8601格式對(duì)日期進(jìn)行轉(zhuǎn)換(Convert Dates to Strings Following ISO 8601 Format)。ISO 8601格式的具體要求大家可以查閱相關(guān)標(biāo)準(zhǔn)。
Simple DB和其他AWS的結(jié)合使用
SDB對(duì)于值的大小限制是由于Amazon希望用戶能充分地綜合應(yīng)用AWS的各個(gè)服務(wù)器租用組件,實(shí)際上如果用戶可以恰當(dāng)?shù)剡x擇AWS組件并加以運(yùn)用,將會(huì)收到很好的效果。
圖3-23是典型的AWS服務(wù)綜合使用方式。用戶將需要處理和存儲(chǔ)的數(shù)據(jù)上傳至S3,需要時(shí)可以隨時(shí)下載。當(dāng)上傳成功后可以通過SQS對(duì)SDB執(zhí)行一系列操作,將S3中需要處理的文件位置(指針)存儲(chǔ)在SDB中。利用這些指針,配合SQS,向EC2發(fā)出命令,讓EC2的某個(gè)實(shí)例從S3中提取相關(guān)文件進(jìn)行處理,成功處理后將文件再回存至S3并把處理結(jié)果返回給用戶。當(dāng)然用戶也可以直接向EC2發(fā)出指令從S3中直接取文件,但這樣的讀取速度肯定沒有利用文件指針的速度快,特別是在取大量的分散文件時(shí)這種速度差異會(huì)更明顯。所以合理地搭配使用AWS的備個(gè)組件可以快速、有效地完成用戶的任務(wù)。
