2009-10-19 182 views
3

我们有一个新的django驱动的项目,它具有潜在的高流量特征(意味着重度数据库交互)。所以我们需要提前考虑数据库的可伸缩性。随着一些研究,以下问题仍没有清楚地告诉我们:Django数据库可扩展性

  1. 粗粒:如何指定一个数据库表(一个Django模型)到一个特定的DB(也许在另一台服务器)?
  2. 细粒度:如何指定一组表行到特定的数据库(所谓的分片,也可以在另一个数据库服务器)?
  3. 如何指定的写入和读出不同的DB(这将是未来的MySQL主/从复制有用)

我们正在寻找解决方案:

  1. 是透明的应用程序(意思是我们不需要在views.py中有额外的代码)
  2. 应该在ORM级别(意味着只需要在models.py中指定)
  3. 与当前(或未来)django版本兼容保持最小的改变r未来的升级django)

我还在做研究。如果我有一些成果,我会在稍后分享这篇文章。

希望有经验的人都能回答。谢谢。

回答

2

不要忘记缓存。使用memcached缓解数据库负载是构建高性能站点的关键。

正如alex所说,django-core不支持你对这些功能的特定请求,尽管它们肯定是在待办事项列表中。

如果您不在应用程序层中执行此操作,则基本上要求性能问题。对于这类任务,没有任何真正优秀的开源自动化层,因为它往往会破坏SQL公理。如果你真的关心它,你应该为它编写整个应用程序,而不是简单地希望你的ORM会照顾它。

+0

谢谢保罗。我们不希望在应用程序编程中做到这一点。但是你的回答很有参考价值。 – 2009-10-20 14:22:57

0

由于某些原因,我们使用django和sqlalchemy。也许django和sqlalchemy的组合也可以满足您的需求。

+0

谢谢阿布。但是我想知道sqlalchemy是否可以解决我上面提到的所有3个问题? – 2009-10-19 07:30:09

1
  1. Alex Gaynor有一个GSoC项目,将来可以在一个Django项目中使用多个数据库。但是现在没有跨RDBMS的工作解决方案。

  2. 现在还没有解决方案。

  3. 再次 - 没有交叉RDBMS解决方案。但是如果你使用的是MySQL,你可以尝试优秀的第三方Django应用程序 - mysql_replicated。它允许轻松设置主从复制场景。

+0

谢谢亚历克斯。我正在阅读有关mysql_replicated。看起来很棒! – 2009-10-19 07:57:41