2013-05-18 21 views
3

我發現一個網站的優化工作正在進行中,最終酸洗QuerySets成爲緩存的瓶頸,無論代碼有多聰明,都會在1時間內取消相對較大的QS -2秒會殺死所有的努力。
有沒有人遇到過這個?Django緩存 - Pickle很慢

回答

3

如果您目前正在使用泡菜,我可能會推薦cPickle,據稱其速度可達1000倍。

+0

悲傷的是,我已經用它:) –

+0

在這種情況下,你可能會考慮[馬歇爾(http://docs.python.org/2/library/marshal.html),因爲它是多速度更快,但是,正如文檔所說,不能抵禦錯誤或惡意數據。 – Tadgh

+0

@GillBates:如果你使用cPickle,並且仍然觀察這些1-2秒的unpickling,那麼這些查詢集似乎必須相當龐大。他們多大?你真的需要緩存所有的數據嗎? – liori

0

ultrajson來救援!

In [1]: from string import letters 

In [3]: import ujson 

In [5]: import cPickle as pickle 

In [7]: import random 

In [8]: def random_string(n=10): return ''.join([random.choice(letters) for _ in xrange(n)]) 

In [9]: DATA = {random_string(): list(range(1000)) for _ in xrange(1000)} 

In [12]: %timeit -r 3 -n 100 ujson.dumps(DATA) 
100 loops, best of 3: 89.2 

In [13]: %timeit -r 3 -n 100 pickle.dumps(DATA) 
100 loops, best of 3: 285 ms per loop