On twitter

@Lydia618 相差不遠了 (茶)

follow me on twitter

Posts Tagged ‘performance’

app engine datastore 效能心得 1

由於這一陣子用 app engine 寫了一些玩具跟 myaudiocast, 所以來記錄一下心得。雖然 app engine 不用錢, 似乎不用怕資料庫 scale 的問題, 可是比起一般使用關聯式資料庫來說, 開始 run 之前得更仔細規劃, 因為有些資料在寫入後就無法更動了。

上面這張圖是 myaudiocast 簡單的示意圖, 接下來就用這張圖來說一下關於 datastore 使用上的心得

單筆資料 ( one-to-one )

像是 User 對 Podcast 在我的規劃上是 one-to-one, 所以如果是 one-to-one 這類的資料就給定 key_name, 直接用 key_name 來抓單筆資料, 而不是先用 filter 之後在用 get 來取得單筆資料。 因為用 appstats 就發現後面這個方法常常是花最多時間的, 然而因為之前的資料都沒給 key_name 現在也來不及了 …

多筆資料 ( one-to-many, many-to-many )

像是 Episode 這類 one-to-many, 會有多筆的資料, 沒事就不用給 key_name 了, 因為通常都是透過 filter 來取出多筆資料, 所以只需要寫入時指定 parent, 讓 user 的 episodes 可以成為一個 entity group, 這樣抓取資料比較快。

盡量使用 memcache

datastore 其實並沒有很快, 甚至 model api 沒有 query cache, 而 memcache 的 quota 其實滿大的, 所以要盡量用 memcache。

避免在 template 透過關連取資料

像是 podcast 跟 episodes 都可以透過關連, 像是 user.podcast 跟 user.episodes 來取得資料, 所以因為寫 django 的經驗, 我可能就直接丟 user 變數進 template, 然後都用 user.podcast, 跟 user.episodes 來取得資料, 可是這在 app engine 則是要避免的, 因為 app engine 的 model 並沒有 query cache, 所以可能會像下面這樣的作法, 就會對 podcast 做兩次 query。

{{ user.podcast.title }}
{{ user.podcast.description }}

所以得一開始就把 user 跟 podcast 丟進 template, 直接取得資料而不是透過物件關連。

不過有時候就是一定得透過關連來做, 那麼就請使用 django 1.0 以上的 template, 透過 with 這個 template tag 來避免多次 query, 或者是在 model 新增一個 property 然後用 memcache 來解決, 像是我的作法

class User(db.Model):
    ...

    @property
    def podcast(self):
        cache_key = 'user-podcast-%s' % self.key()
        p = memcache.get(cache_key)
        if not p:
            p = self.podcasts.ancestor(self).get()
            memcache.add(cache_key, p)

        return p

先前說過, 以前不懂忘記給 key_name, 現在只能這樣 query 了, 頂多加上個 ancestor (默)

結論

datastore 雖然不太需要擔心 scale 的問題, 可是在 run 之前卻得更仔細規劃, 否則效能低落, 花的只是更多錢阿 XD 而 memcache 則是一定得用, 否則跑起來的確是不夠快。

大概是這樣, 希望沒有哪裡有寫錯的, 如果有的話, 也請多多留言指指教, 謝謝 :p

June 10th, 2010 Programming, Web Tags: , ,

[廣告] koumis 最近表演行程 3

koumis

12/25(四) 21:00-22:00 河岸留言音樂藝文咖啡
special guest: 小海 ticket:NT 350

01/15(四) 21:30-23:00 女巫店
ticket:NT 300

我好像沒在我的 blog 上提過 koumis, 我覺得他們的歌很好聽! 有幾首歌聽現場都還讓我起雞皮疙瘩, 特別是在吉他手 stephenlee 有合音的時候。 這兩天我也都會去, 會去亂入, 有空的人來聽聽吧! 我最近都在為了這個 special guest 練吉他, 不會像之前那麼隨便了 XD 畢竟這是 koumis 的場子阿! 要認真 :p

先到 koumis 的官方部落格, 看看 koumis 的表演影片, 聽聽 koumis 的歌, 再決定要不要來嘛! XD

go! go! go!

December 15th, 2008 Music Tags: , ,

PHP Framework 的效能比較 12

今天看到前幾天才出爐的測試, PHP framework comparison benchmarks, 其實應該就是在比 framework 的結構跟設計對於效能的影響?

 

Run 1

Run 2

Run 3

Run 4

Average

Baseline HTML

1327.5

1326.5

1328.6

1329.1

1327.9

Baseline PHP

331.6

332.1

331.4

332.0

331.8

CakePHP

3.6

3.7

3.8

3.5

3.7

CodeIgniter

21.5

21.2

21.7

21.7

21.5

Zend Framework

9.3

9.1

9.2

9.3

9.2

這篇文章中比較了 CakePHP, Zend FrameworkCodeIgniter, 然後還有一般的 html 及 plain php, 另外還有使用/不使用 APC 跟 eAccelerator 來比較這三個 framework 的效能。當然, 基本上一定是 html 最快, 然後是 plain php, 再來才會是 framework。而 Framework 中當然最快的是 CodeIgniter 啦! 接著是 Zend Framework, 最後是效能很糟的 CakePHP ( XD )

Read the rest of this entry »

Partners of Oceanic / 人生海海

jiwosca