【问题标题】:Django for enterprise web application用于企业 Web 应用程序的 Django
【发布时间】:2011-04-12 03:59:47
【问题描述】:

我想知道对于大型网络应用程序(社交网络)来说,Django 是不是一个不错的选择?更具体地说,当数据库事务数量增加时,我需要一些关于性能的建议,我想知道 Django 中包含的嵌入式 OR Mapping 是一个不错的选择还是应该实现它们。

谢谢

【问题讨论】:

标签: python django


【解决方案1】:

在数据库事务数量增加时执行。

真的不是 Django 问题。

您可以通过 Apache 和 mod_wsgi 拥有很多并发的 Django 会话。它们都将共享一个公共数据库。

因此,这完全是一个数据库问题。您应该能够配置足够多的 Apache/Django 会话以使您的数据库被淹没。

在 Django 中包含的 OR Mapping 是一个不错的选择,或者我应该实现它们。

是的。真是个不错的选择。

在您证明 ORM 是您的瓶颈之前,请使用它。

随着您的扩展,您将重新设计您的数据库、缓存和其他架构功能。由于 ORM 有一个缓存(就像您的数据库一样),所以您在这里很少遇到性能问题。

你可以。

但您的大部分性能问题将是通过 Apache 下载静态媒体文件。

【讨论】:

  • 那么,您是否建议为静态文件使用另一台服务器,如 nginx 或 lighttpd,或者将其卸载到 CDN?
  • 不是另一个服务器。您现有服务器的另一块。配置您的服务器以通过 mod_wsgi 向 Django 发送 Django 请求。配置要直接处理的静态媒体请求。 Django 文档详细介绍了此配置。
  • 好吧,我将静态内容托管在另一个域下,以防止为每个请求发送 cookie 和其他一些标头。感谢您的回复
  • "防止为每个请求发送 cookie 和其他一些标头"?似乎工作太多而收益太少。你能证明这有帮助吗?
  • 在处理大量请求时肯定会有所帮助。所以你需要尽可能减少请求的大小。
【解决方案2】:

我应该补充一点,企业应用程序在使用 Django ORM 时可能遇到的一个大问题是它的功能(即它可以表达什么查询)有些限制。如果你做两件事,我认为这是可以管理的:

  1. 尽量在 Django ORM 中表达查询(如果没有经验,可能很容易忽略 Django 中不可能的查询)。
  2. 如果在 Django 中查询确实不可能(如果您不确定,也可以询问 IRC #django 频道或 django-users 组),将查询存储在您的 dba 可以管理或查看的 queries.py 文件中在。 (它可以是模型文件引用的平面字典。)

作为第 2 点的示例:您没有理由不能编写以下列方式使用的查询存储管理器:假设您有一个名为 blogs 的应用程序,其模型名为 Entry:

# models.py
class Entry(models.Model):
    objects = project.QueryStorageManager()
    author = models.ForeignKey(User)
    body = models.TextField()
    slug = models.CharField(max_length=512)
    published_date = models.DateField()

    @project.StoredQuery("getEntryMonthHistogram")
    def getEntryMonthHistogram(self, sql, author):
        return objects.runQuery(sql, author)

# queries.py
{
"getEntryMonthHistogram": """SELECT EXTRACT(MONTH FROM published_date),
                                    REPEAT('*', count(*)) histogram
                             FROM   blogs_entry
                             WHERE  author_id = %s""",

}

【讨论】:

    【解决方案3】:

    我的公司刚刚为一个基于 Django 的大型企业构建了这样一个系统,包括所有移动系统。使用 django,开发成本很低,企业服务器堆栈内的可运行性也没有问题。甚至 Django 也设法让我们通过了渗透和安全测试。使用任何其他语言,在极端预算限制下,我们都无法在这个项目上取得成功

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2012-05-02
      相关资源
      最近更新 更多