這次發(fā)布的是沒(méi)有包含全部特性的預(yù)覽版,提供了一個(gè)配額系統(tǒng),它限制了在預(yù)覽期間應(yīng)用免費(fèi)可用的存儲(chǔ)、CPU和帶寬。一旦預(yù)覽期結(jié)束,配額仍將免費(fèi),但是開(kāi)發(fā)者需要按需購(gòu)買額外資源。額外資源的價(jià)格尚未公布(甚至可能尚未確定)。
預(yù)覽版的配額包括:3個(gè)應(yīng)用/開(kāi)發(fā)者、500MB存儲(chǔ)/應(yīng)用、2000封郵件/天(連續(xù)24小時(shí))、10 GB入站帶寬、10 GB出站帶寬、200M CPU兆周、650k HTTP請(qǐng)求、2.5M Datastore API調(diào)用和160k URL Fetch API調(diào)用。
技術(shù):開(kāi)發(fā)環(huán)境和API
盡管Google說(shuō)‘未來(lái)將支持更多的語(yǔ)言’,但是目前技術(shù)棧是基于Python的,它是Google認(rèn)同的語(yǔ)言之一。出于安全和伸縮性的目的,Google提供了一個(gè)運(yùn)行在安全沙箱中的Python運(yùn)行時(shí)環(huán)境,它提供對(duì)底層操作系統(tǒng)有限制的訪問(wèn)。該環(huán)境包括標(biāo)準(zhǔn)庫(kù),并可通過(guò)模塊進(jìn)行擴(kuò)展,編寫(xiě)模塊的語(yǔ)言目前不支持C語(yǔ)言。
該環(huán)境包括Python標(biāo)準(zhǔn)庫(kù)。當(dāng)然,調(diào)用那些違反沙箱限制的庫(kù)方法(如打開(kāi)socket或?qū)懳募⒉粫?huì)成功。為了方便起見(jiàn),幾個(gè)核心特性不被支持的標(biāo)準(zhǔn)庫(kù)中的模塊被禁用了。那些引入它們的代碼會(huì)出錯(cuò)。
應(yīng)用代碼只能用Python書(shū)寫(xiě)。不支持使用C來(lái)編寫(xiě)擴(kuò)展。
其他安全限制包括:出站通信(outbound communication)只能通過(guò)所提供的郵件和URL fetch API進(jìn)行,通過(guò)HTTP和HTTPS作為傳輸?shù)娜胝就ㄐ牛╥nbound communication)使用標(biāo)準(zhǔn)端口,禁止文件系統(tǒng)寫(xiě)操作和禁止子進(jìn)程或代碼在請(qǐng)求/響應(yīng)循環(huán)外執(zhí)行(例如后臺(tái)操作和批操作)。
此外,Google提供了訪問(wèn)一個(gè)Datastore、Google用戶帳號(hào)、URL fetch和郵件服務(wù)的API。App Engine還包括一個(gè)簡(jiǎn)化的Web應(yīng)用框架和Django 0.96.1,盡管App Engine Datastore不是關(guān)系型的,而且也不能使用全部的Django API。
Datastore API背后由Google的BigTable支持,但是它與一個(gè)簡(jiǎn)單的對(duì)象持久化API(或一個(gè)對(duì)象關(guān)系映射框架,即使Google強(qiáng)調(diào)這個(gè)Datastore不是關(guān)系型的)有很多相同之處:
你們中的大多數(shù),在使用這個(gè)Datastore時(shí)可能會(huì)有點(diǎn)不習(xí)慣:如我所說(shuō),它不是SQL。這是個(gè)巨大的區(qū)別。然而,我們想了一下之后,認(rèn)為這個(gè)Datastore可能會(huì)引起你們的興趣,因?yàn)樗屢恍┦虑樽兒?jiǎn)單了。比如說(shuō),我們的Datastore沒(méi)有模式,這意味著它可以支持任意的新屬性或列,你可以用代碼創(chuàng)建,無(wú)需把所有事情預(yù)先設(shè)計(jì)好并創(chuàng)建一個(gè)模式。這就回到了我們盡可能簡(jiǎn)化Web應(yīng)用編寫(xiě)的目標(biāo):只需開(kāi)始編碼就好了。你的數(shù)據(jù)模型可以隨你應(yīng)用的演變而演變。
即使Datastore違背了SQL,我們?nèi)匀恢С帜阆胍膫鹘y(tǒng)關(guān)系數(shù)據(jù)庫(kù)的許多強(qiáng)大功能。對(duì)于任何你提供的單個(gè)屬性或?qū)傩约?,Datastore都提供了高效查詢。它還支持對(duì)查詢結(jié)果的排序,包括按多屬性進(jìn)行排序。它對(duì)寫(xiě)操作支持事務(wù),通過(guò)事務(wù)分組來(lái)控制。對(duì)于提取或創(chuàng)建大量實(shí)體,它也支持批操作。它給你機(jī)會(huì)讓你來(lái)控制你實(shí)體的主鍵,以獲得更好的查詢效率和更短的URL。
并且,即使Datastore不是SQL,我們也為你提供了類SQL查詢以簡(jiǎn)化查詢的表達(dá),叫做GQL。GQL受到了jQuery和FBQL的啟發(fā):底層的存儲(chǔ)不是SQL,但是幾乎你想要的所有查詢?nèi)匀豢梢酝瓿伞?/P>
你可能已經(jīng)注意到我們的Datastore缺少一個(gè)大特性,那就就是連接(join)。這是因?yàn)檫B接通常是分布式系統(tǒng)效率問(wèn)題的根源,當(dāng)你有不止一臺(tái)機(jī)器時(shí):很難在跨多個(gè)機(jī)器和多個(gè)硬盤的分布式系統(tǒng)上進(jìn)行連接操作。
盡管Datastore API支持事務(wù),但是它們有嚴(yán)格的限制,而且和實(shí)體組關(guān)聯(lián):
每個(gè)實(shí)體都屬于一個(gè)實(shí)體組,在一個(gè)事務(wù)內(nèi)可以操作一個(gè)或多個(gè)實(shí)體。實(shí)體組關(guān)系告訴App Engine在分布式網(wǎng)絡(luò)的同一部分保存幾個(gè)實(shí)體。一個(gè)事務(wù)為一個(gè)實(shí)體組設(shè)置Datastore操作,所有這些操作按組實(shí)施,如果事務(wù)失敗就全部撤銷。
更多詳細(xì)信息,請(qǐng)您微信關(guān)注“計(jì)算網(wǎng)”公眾號(hào):