我需要某種基本上靜態的信息。這些信息並不多,但很多對象都會使用這些信息。因爲這裏沒有很多信息(很少有字典和一些列表),所以我認爲我有兩個選擇 - 創建模型來保存數據庫中的信息,或者將它們作爲字典/列表寫入某些設置文件。我的問題是 - 哪個更快,從數據庫或設置文件讀取這些信息?無論哪種情況,我都需要能夠在很多地方訪問這些信息,這意味着很多數據庫讀取調用。那麼哪個會更快?數據庫速度與靜態字典速度的模型
1
A
回答
3
如果他們真的永遠,永遠不會改變,然後隨意放在你的settings.py
文件,你將宣佈一個普通的Python字典。
但是,如果您希望通過正常的Django方法修改信息,請使用數據庫進行持久性存儲,然後充分利用Django's cache framework。
保存數據到數據庫正常,那麼第一次訪問,緩存起來:
from django.core.cache import cache
def some_view_that_accesses_date(request):
my_data = cache.get('some_key')
if my_data is None:
my_data = MyObject.objects.all()
cache.set('some_key', my_data)
... snip ... normal view code
確保永遠保存None
在高速緩存中,如:
我們建議不要在文件緩存中存儲值
None
的文字 ,因爲 將無法區分您的存儲的None
值 和緩存 未命中符號b y返回值爲None
。
確保你殺死object deletion或change緩存:
from django.core.cache import cache
from django.db.models.signals import post_save
from myapp.models import MyModel
def kill_object_cache(sender, **kwargs):
cache.delete('some_key')
post_save.connect(kill_object_cache, sender=MyModel)
post_delete.connect(kill_object_cache, sender=MyModel)
我有類似這樣的東西在我的應用程序之一,它的偉大工程。顯然,如果您繼續使用數據庫後端,則不會看到任何性能改進,但與直接使用memcached相比,這是一種更像Django(Djangonic?)的方法。
很明顯,可能值得在某處定義緩存密鑰some_key
,而不是亂丟你的代碼,上面的例子只是爲了易於理解,而不一定是全面的緩存實現。
0
如果您需要從多個進程快速訪問,那麼數據庫是您的最佳選擇。
但是,如果您只是想將數據保存在內存中並在同一進程中從多個位置訪問它,那麼Python字典將比訪問數據庫更快。
1
如果數據是靜態的,則不需要繼續回到數據庫。只需要第一次閱讀並緩存結果即可。
如果出於某種原因無法將結果緩存到應用程序中,則始終可以使用memcached來避免觸擊數據庫。
使用memcached的好處是,如果數據確實發生了變化,您可以簡單地更新memcached中的值。
僞代碼使用memcached的
if 'foo' in memcached
data = memcached.get('foo')
else
data = database.get('foo')
memcached.put('foo', data)
相關問題
- 1. 使速度模板對象靜態
- 2. 靜態函數訪問的速度
- 3. 字典迭代速度
- 4. 數據庫查詢速度
- 5. Python字典與如果語句速度
- 6. 加速度計在恆定加速度和靜止狀態下
- 7. 數據庫更新字典/列表速度
- 8. 速度的數據輸入數據庫
- 9. 加速度數據
- 10. 速度模板字符集
- 11. 流數據的飛行速度模板
- 12. 靜脈模擬運行速度很慢
- 13. Liferay 6.1速度動態數據列表
- 14. 迭代3個字典(關注速度)
- 15. python字典結構,速度問題
- 16. 速度數據類型和轉換
- 17. 數據類型和查詢速度
- 18. 加快數據庫寫入速度
- 19. MySQL數據庫查詢 - 速度
- 20. 平面文件vs數據庫 - 速度?
- 21. mysqli速度vs php速度?
- 22. 更改速度數據網絡模式
- 23. 度數轉換數據加速度計
- 24. 用於測量請求速度和數據庫速度的工具
- 25. XML速度模板
- 26. 速度模板DateFormate
- 27. 搖動與典型手部運動的加速度閾值?
- 28. 性能與速度
- 29. 速度與時間
- 30. 速度:XML與NSUserDefaults