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')
他正在讨论discus如何利用django1.2和更高版本中使用的数据库路由技术,它允许您同时连接到多个数据库。 与Django的早期版本不同,django1.2和更高版本使用字典字典,初始字典的键是授权数据库的令牌,内部字典的键映射到旧版本中熟悉的Django设置。在
很明显,当服务器的服务器被存储在不同的服务器上时,这些服务器的管理显然是不同的,将每个Django实例视为其系统的一个短暂的对象),服务器使用forum_id查找正确的数据库,从中获取论坛的相关成员(在本例中,是帖子)。db_for_read()返回指向数据库的令牌。在
很多论坛有很多帖子,但是每个帖子都有一个论坛。因为论坛没有相互关系,你可以将每个论坛及其帖子存储在一个数据库中,完全独立于其他论坛及其帖子。在
如果你看看第23页的例子,他的例子就很清楚了:
。。。所发生的是论坛的object iu id被用作在某个表中的查找,该表将论坛id与网络上任何其他地方的数据库(不是表,而是数据库)相关联。在
因此,在我看来,ApplicationRouter正在对关系执行类似的操作。看下面的文字:“垂直分区包括创建列数较少的表,并使用其他表来存储剩余的列。”这就是ApplicationRouter所做的:当您使用一个应用程序,并访问另一个表中的相关对象时,ApplicationRouter会查看要填充的请求和实例,使用类似于ForumPartitionRouter的查找表,返回数据库的键,在该数据库中可以找到相关实例的详细信息。在
您可以在此处查找多个数据库:
http://docs.djangoproject.com/en/dev/topics/db/multi-db/
相关问题 更多 >
编程相关推荐