我需要某种基本上静态的信息。这些信息并不多,但很多对象都会使用这些信息。因为这里没有很多信息(很少有字典和一些列表),所以我认为我有两个选择 - 创建模型来保存数据库中的信息,或者将它们作为字典/列表写入某些设置文件。我的问题是 - 哪个更快,从数据库或设置文件读取这些信息?无论哪种情况,我都需要能够在很多地方访问这些信息,这意味着很多数据库读取调用。那么哪个会更快?数据库速度与静态字典速度的模型
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. Python字典与如果语句速度
- 5. 数据库更新字典/列表速度
- 6. 速度的数据输入数据库
- 7. 静脉模拟运行速度很慢
- 8. Liferay 6.1速度动态数据列表
- 9. python字典结构,速度问题
- 10. 数据类型和查询速度
- 11. MySQL数据库查询 - 速度
- 12. mysqli速度vs php速度?
- 13. 更改速度数据网络模式
- 14. 用于测量请求速度和数据库速度的工具
- 15. XML速度模板
- 16. 摇动与典型手部运动的加速度阈值?
- 17. 速度:XML与NSUserDefaults
- 18. MySQL空间数据速度
- 19. Firebase节点库与REST的速度
- 20. Solr所需的大型数据库索引速度测试
- 21. Rails资产管道与静态资产负载速度差异
- 22. 在Android上使用H2数据库与OrmLite的速度问题
- 23. 速度模板语言动态变量
- 24. 像素速度与车辆速度与立体相机
- 25. BOX2D XNA的加速度/速度
- 26. 来自加速度计的速度
- 27. AS3:影响速度的鼠标速度
- 28. 查找速度:状态还是数据库?
- 29. 静态构造函数中的代码运行速度较慢
- 30. 在Mysql数据库中搜索字符串的速度更快