【发布时间】:2011-04-12 03:59:47
【问题描述】:
我想知道对于大型网络应用程序(社交网络)来说,Django 是不是一个不错的选择?更具体地说,当数据库事务数量增加时,我需要一些关于性能的建议,我想知道 Django 中包含的嵌入式 OR Mapping 是一个不错的选择还是应该实现它们。
谢谢
【问题讨论】:
-
Does Django Scale?的可能重复
我想知道对于大型网络应用程序(社交网络)来说,Django 是不是一个不错的选择?更具体地说,当数据库事务数量增加时,我需要一些关于性能的建议,我想知道 Django 中包含的嵌入式 OR Mapping 是一个不错的选择还是应该实现它们。
谢谢
【问题讨论】:
在数据库事务数量增加时执行。
真的不是 Django 问题。
您可以通过 Apache 和 mod_wsgi 拥有很多并发的 Django 会话。它们都将共享一个公共数据库。
因此,这完全是一个数据库问题。您应该能够配置足够多的 Apache/Django 会话以使您的数据库被淹没。
在 Django 中包含的 OR Mapping 是一个不错的选择,或者我应该实现它们。
是的。真是个不错的选择。
在您证明 ORM 是您的瓶颈之前,请使用它。
随着您的扩展,您将重新设计您的数据库、缓存和其他架构功能。由于 ORM 有一个缓存(就像您的数据库一样),所以您在这里很少遇到性能问题。
你可以。
但您的大部分性能问题将是通过 Apache 下载静态媒体文件。
【讨论】:
我应该补充一点,企业应用程序在使用 Django ORM 时可能遇到的一个大问题是它的功能(即它可以表达什么查询)有些限制。如果你做两件事,我认为这是可以管理的:
作为第 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""",
}
【讨论】:
我的公司刚刚为一个基于 Django 的大型企业构建了这样一个系统,包括所有移动系统。使用 django,开发成本很低,企业服务器堆栈内的可运行性也没有问题。甚至 Django 也设法让我们通过了渗透和安全测试。使用任何其他语言,在极端预算限制下,我们都无法在这个项目上取得成功
【讨论】: