使用Django、水平和垂直分区助手方法时,请解释

2024-06-02 09:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

有人能解释一下这是怎么回事吗?在

现在这是水平分区:

^{pr2}$

我有点理解他们在做什么,但不知道其中一些台词是什么样子的:

instance = hints.get('instance')

Tags: instanceapphttpgetnetreturnwwwlabel
1条回答
网友
1楼 · 发布于 2024-06-02 09:14:33

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

很明显,当服务器的服务器被存储在不同的服务器上时,这些服务器的管理显然是不同的,将每个Django实例视为其系统的一个短暂的对象),服务器使用forum_id查找正确的数据库,从中获取论坛的相关成员(在本例中,是帖子)。db_for_read()返回指向数据库的令牌。在

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

如果你看看第23页的例子,他的例子就很清楚了:

forum.post_set.all()

。。。所发生的是论坛的object iu id被用作在某个表中的查找,该表将论坛id与网络上任何其他地方的数据库(不是表,而是数据库)相关联。在

因此,在我看来,ApplicationRouter正在对关系执行类似的操作。看下面的文字:“垂直分区包括创建列数较少的表,并使用其他表来存储剩余的列。”这就是ApplicationRouter所做的:当您使用一个应用程序,并访问另一个表中的相关对象时,ApplicationRouter会查看要填充的请求和实例,使用类似于ForumPartitionRouter的查找表,返回数据库的键,在该数据库中可以找到相关实例的详细信息。在

您可以在此处查找多个数据库:

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

相关问题 更多 >