gpt4 book ai didi

python - 数据库速度与静态字典速度的模型

转载 作者:太空宇宙 更新时间:2023-11-04 11:04:34 24 4
gpt4 key购买 nike

我需要某种本质上是静态的信息。这些信息不多,但是很多对象会用到这些信息。

由于没有太多的信息(很少有字典和一些列表),我认为我有 2 个选择 - 创建模型以在数据库中保存该信息或将它们作为字典/列表写入某些设置文件。我的问题是 - 从数据库或设置文件中读取信息哪个更快?在任何一种情况下,我都需要能够在很多地方访问该信息,这意味着很多数据库读取调用。那么哪个会更快?

最佳答案

如果它们真的永远不会改变,那么请随意将它们放入您的 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 保存在缓存中,如:

We advise against storing the literal value None in the cache, because you won't be able to distinguish between your stored None value and a cache miss signified by a return value of 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 可能是值得的,而不是在你的代码中到处乱扔,上面的例子只是为了易于理解,而不一定是完整的实现缓存。

关于python - 数据库速度与静态字典速度的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2391788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com