gpt4 book ai didi

python - 使用 Django 缩放 disqus,水平和垂直分区辅助方法,请解释

转载 作者:行者123 更新时间:2023-12-01 06:14:29 25 4
gpt4 key购买 nike

http://www.slideshare.net/zeeg/djangocon-2010-scaling-disqus

垂直分区助手:

class ApplicationRouter(object)

def db_for_read(self, model, **hints):

instance = hints.get('instance')

if not instance:
return None

app_label = instance._meta.app_label

return get_application_alias(app_label)

有人能解释一下这是在做什么吗?

现在这是用于水平分区:

class ForumPartitionRouter(object):

def db_for_read(self, model, **hints):

instance = hints.get('instance')

if not instance:
return None

forum_id = getattr(instance, 'forum_id', None)

if not forum_id:
return None

return get_forum_alias(forum_id)

我有点明白这些在做什么,但不确定其中一些行在做什么:

instance = hints.get('instance')

最佳答案

他正在讨论 Disqus 如何利用 Django 1.2 及更高版本中使用的数据库路由技术,该技术允许您同时连接多个数据库。与 Django 的早期版本不同,Django 1.2 及更高版本使用字典的字典,初始字典的键是授权数据库的 token ,内部字典的键映射到旧版本中熟悉的 Django 设置。

ForumPartitionRouter 更明显:不同的论坛存储在不同的数据库中(这很有趣,因为很明显他们有一些很棒的管理工具,允许他们将这些分区定义到他们的 django 服务器当服务器启动时,将每个 Django 实例视为其系统的 transient 和短暂对象)并且服务器使用forum_id去查找正确的数据库,从中获取论坛的相关成员(在本例中,帖子)。 db_for_read() 返回指向数据库的 token 。

许多论坛有很多帖子,但每个帖子都有一个论坛。由于论坛没有相互关系,因此您可以将每个论坛及其帖子存储在一个数据库中,完全独立于其他论坛及其帖子。

如果您查看第 23 页的示例,从他的示例中可以清楚地看出:

forum.post_set.all()

...发生的情况是论坛的 object_id 被用作某个表中的查找,该表将论坛 ID 与数据库(不是表,而是数据库)相关联,该数据库可能位于网站上的其他任何位置网络。

因此,在我看来,ApplicationRouter 正在对关系做类似的事情。请看文本:“垂直分区涉及创建列数较少的表,并使用额外的表来存储剩余的列。”这就是 ApplicationRouter 的作用:当您使用应用程序时,当您访问不同表中的相关对象时,ApplicationRouter 会查看请求和要填写的实例,并使用类似于 ForumPartitionRouter 的查找表返回数据库的 key ,在该数据库中可以找到相关实例的详细信息。

您可以在这里查找多数据库:

http://docs.djangoproject.com/en/dev/topics/db/multi-db/

关于python - 使用 Django 缩放 disqus,水平和垂直分区辅助方法,请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4055213/

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