简化分片 Django
我有一个项目 Django, 成立于多服务器上 PostgreSQL.
我希望用户分为这些数据库服务器,
http://instagram-engineering.t ... agram
:
用户 ID => 逻辑部分 ID => 物理碎片化 ID => 服务器数据库 => 方案 => user 桌子
逻辑段 ID 直接从用户计算 ID /13 位内置于用户ID中/.
从逻辑显示到物理段 ID 硬编码 /在某些配置文件或静态表中/.
与物理段进行比较 ID 数据库服务器也刚性编码。 Instagram 用途
http://pgfoundry.org/projects/pgbouncer/
在此阶段,要获取与数据库池的连接到相应的数据库服务器。
每个逻辑分部都自己生存
http://www.postgresql.org/docs ... .html
PostgreSQL /对于那些不熟悉的人 PostgreSQL, 这是
不是
表格方案,而是命名空间,就像
http://dev.mysql.com/doc/refma ... .html
/. 该方案简称为类似的东西 "shardNNNN", 其中nnnn逻辑段 ID.
最后,在相应的方案中请求用户表。
如何尽可能简单地实现 Django ?
理想情况下,我希望能够编写代码 Django, 例如:
提取实例
提取相关对象
创建一个实例
按名称搜索用户
我使用的东西更加复杂
http://wiki.postgresql.org/wik ... ation
将每个数据库服务器的数据复制到多个下级服务器中。 业主应该用来录制和奴隶阅读。
Django 提供支持
https://docs.djangoproject.com ... uting
数据,这可能足以满足上述大多数情况,但我被困在一起
, 因为路由器无法访问查询参数,所以它不知道用户是什么 ID, 他只是知道代码正在尝试阅读用户模型。
我很讨人令人难以使用作为最后一个手段的优化,因为它有局限性,并且真的使事情变得非常复杂。 大多数人疤痕不需要:优化的架构 master/slave 它可以通过很长的路。 但是让我们假设我
真的
需要一个片段。
简而言之:
我如何产卵 Django, 简单吗?
非常感谢您的帮助。
笔记
https://coderoad.ru/4481435/
, 这非常相似,但它太一般,不包含准确的例子。 我想缩小到碎片的具体技术的问题范围,这对我来说感到兴趣 /道路 Instagram/.
我希望用户分为这些数据库服务器,
http://instagram-engineering.t ... agram
:
用户 ID => 逻辑部分 ID => 物理碎片化 ID => 服务器数据库 => 方案 => user 桌子
逻辑段 ID 直接从用户计算 ID /13 位内置于用户ID中/.
从逻辑显示到物理段 ID 硬编码 /在某些配置文件或静态表中/.
与物理段进行比较 ID 数据库服务器也刚性编码。 Instagram 用途
http://pgfoundry.org/projects/pgbouncer/
在此阶段,要获取与数据库池的连接到相应的数据库服务器。
每个逻辑分部都自己生存
http://www.postgresql.org/docs ... .html
PostgreSQL /对于那些不熟悉的人 PostgreSQL, 这是
不是
表格方案,而是命名空间,就像
http://dev.mysql.com/doc/refma ... .html
/. 该方案简称为类似的东西 "shardNNNN", 其中nnnn逻辑段 ID.
最后,在相应的方案中请求用户表。
如何尽可能简单地实现 Django ?
理想情况下,我希望能够编写代码 Django, 例如:
提取实例
# this gets the user object on the appropriate server, in the appropriate schema:
user = User.objects.get/pk = user_id/
提取相关对象
# this gets the user's posted articles, located in the same logical shard:
articles = user.articles
创建一个实例
# this selects a random logical shard and creates the user there:
user = User.create/name = "Arthur", title = "King"/
# or:
user = User/name = "Arthur", title = "King"/
user.save//
按名称搜索用户
# fetches all relevant users /kings/ from all relevant logical shards
# - either by querying *all* database servers /not good/
# - or by querying a "name_to_user" table then querying just the
# relevant database servers.
users = User.objects.filter/title = "King"/
我使用的东西更加复杂
http://wiki.postgresql.org/wik ... ation
将每个数据库服务器的数据复制到多个下级服务器中。 业主应该用来录制和奴隶阅读。
Django 提供支持
https://docs.djangoproject.com ... uting
数据,这可能足以满足上述大多数情况,但我被困在一起
User.objects.get/pk = user_id/
, 因为路由器无法访问查询参数,所以它不知道用户是什么 ID, 他只是知道代码正在尝试阅读用户模型。
我很讨人令人难以使用作为最后一个手段的优化,因为它有局限性,并且真的使事情变得非常复杂。 大多数人疤痕不需要:优化的架构 master/slave 它可以通过很长的路。 但是让我们假设我
真的
需要一个片段。
简而言之:
我如何产卵 Django, 简单吗?
非常感谢您的帮助。
笔记
https://coderoad.ru/4481435/
, 这非常相似,但它太一般,不包含准确的例子。 我想缩小到碎片的具体技术的问题范围,这对我来说感到兴趣 /道路 Instagram/.
没有找到相关结果
已邀请:
2 个回复
喜特乐
赞同来自:
http://mike-clarke.com/2013/03 ... -orm/
关于他们如何做到。
分段数据库时 Postgres 您可以使用多种策略。 在 Disqus 我们根据表名选择段。 如果生成的表的源名称 Django, 也许 comments_post, 然后我们的分段工具将重写 SQL 对于表的要求 comments_post_X, 其中x是段 ID, 基于相干散列方案计算。 所有这些表在数据库的一个实例上都存在于同一图中。
此外,他们释放了
https://github.com/disqus/sharding-example
, 展示它们是碎片的方式。
窦买办
赞同来自:
如果您分段为您的数据库,它对您的应用程序不会看不见,并且可能最终需要更改方案。
你可能会发现
http://pgfoundry.org/projects/skytools/
有用 - 读n。 pl/proxy., 作为 Skype 他们的数据库碎片。