我正在启动一个 Django 项目,需要对多个可能包含太多行的表进行分片。我浏览了这里和其他地方的线程,并遵循了 Django 多数据库文档,但我仍然不确定它们是如何缝合在一起的。我的模型具有会被分片破坏的关系,因此似乎可以选择放弃外键或放弃对各个模型进行分片。
为了论证,考虑经典的 Authot、Publisher 和 Book 场景,但加入书籍副本和可以拥有它们的用户。比如说书籍和用户必须被分片。你会如何处理?用户可能拥有不在同一数据库中的一本书的副本。
一般来说,您用于路由和分片本身的最佳实践是什么?您是否使用了 Django 数据库路由器,根据您的分片逻辑在命令中手动选择了一个数据库,或者重写了 ORM 的某些部分来实现这一点?
如果重要的话,我在 Ubuntu 上使用 PostgreSQL。
非常感谢。
最佳答案
过去我使用 Postgresql 做过类似的事情 Table Partitioning ,但是这只是在同一个数据库中拆分了一个表。这有助于减少表搜索时间。这也很好,因为您不需要对 Django 代码进行太多修改。 (确保使用用于约束的字段执行查询)。
但这不是分片。
如果你还没有看过,你应该看看Sharding Postgres with Instagram.
关于python - 分片 Django 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13620867/