微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可从 Django 中的任何地方访问的数据结构,作为全局变量,在所有视图和所有会话中,无需使用缓存或会话变量

如何解决可从 Django 中的任何地方访问的数据结构,作为全局变量,在所有视图和所有会话中,无需使用缓存或会话变量

首先,我知道这个问题在stackoverflow上已经被问过很多次了。我把它们都读了……好几次。 但不知何故,它们都不是特定于我的场景。

我有一个数据结构,我希望它像一个变量,可以从所有视图、所有用户、所有会话访问。 具体来说,我需要的数据结构是一棵树,一个 Trie,我用它来自动完成搜索栏。所以很明显,这个视图会在每次按键时被频繁调用,并且需要很快,不到一秒。

我已经尝试了以下

from django.core.cache import cache
cache.get('key_of_the_trie_inside_cache')

这行得通,但是这个“cache.get()”需要 4 秒 - 甚至更多,随着内部数据结构的增加。对于搜索栏中的自动补全,每次按键都执行的速度慢得令人无法接受。

stackoverflow 答案中的另一个建议是使用

request.session('key_of_the_trie_inside_session')

但是,在会话中,我只能存储 JSON 可序列化的内容。我也检查了这些论坛,了解如何做到这一点 - 结果,我可以将 Trie 中的数据转换为 JSON,但我不再能够调用 Trie 的函数,例如

trie.get_autocompletion_for_this_string(somestring)

那么……我怎样才能拥有一个可以从任何地方访问的数据结构,使其成为一个全局变量?就像 Django 不支持全局变量,但在这种情况下它真的很有用。我不知道我还能如何访问此 Trie 以进行自动完成。 我的计划是在“manage.py runserver”期间生成并用值填充这个 Trie。 我从 views.py 调用一个脚本——我从这些论坛中了解到,views.py 在开始时只调用一次。 到目前为止,调用脚本并生成和填充 trie 工作正常。

但是既然我已经生成了它,那么能够从任何地方、任何时间调用它,而不必花费很多秒的 cache.get('key') 难道没有意义吗?

数据库中存储自动完成值也是不可能的 - 查询会很慢,而且我需要以 Trie 形式组织的数据,以便快速搜索树。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。