2010年7月27日

ListProperty in Google App Engine

今天看到一個實在非常棒的教學
http://code.google.com/intl/zh-TW/events/io/2009/sessions/BuildingScalableComplexApps.html

我在建立應用程式的時候一直覺得List Property是很重要的特色
因為他的讀取和寫入都是平行式處理 一次修改全部的值也不會變得特別慢

但是限制很多
比如說擁有不用很多個的多重值的實體就可以讓實體的index爆掉
因為在big table中儲存的索引數量是「每個屬性值排列」的總數
另一點單一實體不能超過1MB的限制也讓我想服務大量的facebook使用者感到力不從心
還有一個是在影片中提到的serialize&desecrialize的時間也不盡離想
往往我們會用list來做query但是我們關心的是其他屬性的內容
這些serialize和deserialize的時間是沒有必要的花費

所以可以把list屬性獨立出另一個實體為原實體的child
搜尋完之後再用parent()方法找出我們關心的內容
雖然單一list有5000筆的限制 但是可以使用多個child指向同一個parent
這樣一來上面的問題全部都解決了 速度也快了好幾倍