关于数据库,我需要了解什么才能创建高质量的Django应用程序?

时间:2012-01-11 00:33:04

标签: sql django indexing profiling database-optimization

我正在尝试优化我的网站,发现这个漂亮的小Django doc: Database Access Optimization,建议进行性能分析,然后将索引和选择适当的字段作为数据库优化的起点。

通常情况下,django文档很好地解释了事情,即使是更有经验的程序员可能会认为“显而易见”的事情。在这种情况下不是这样。在没有解释索引后,文档继续说:

  

我们假设您已完成上述明显的事情。

唔。等待!什么是索引?

显然我可以通过谷歌找出索引是什么,我的问题是:为了创建一个可扩展的网站,我需要知道什么才是数据库的东西?我应该具体了解Django框架?还有什么其他“明显的”事情我应该知道吗?我在哪里可以学习它们?

我希望能指出这里的方向。我不需要学习任何关于SQL的知识,我只是想要足够的信息以正确的方式构建我的应用程序。

提前致谢!

3 个答案:

答案 0 :(得分:3)

我鼓励您阅读其他答案所提出的所有内容以及您在该主题上可以找到的任何其他内容,因为这些都是了解情况的好信息,并会让您成为更好的程序员。

也就是说,关于Django和其他类似框架的一个好处是,在大多数情况下,你不必知道数据库中的幕后发生了什么。 Django会自动为需要它们的字段添加索引。鼓励添加更多内容取决于您的应用的使用情况。如果您根据一个特定字段不断进行查询,则应确保将该字段编入索引。它可能已经存在(如果它是外键,主键等),但其他随机字段通常不是。

还有各种特定于数据库客户端的优化。 Django在这里做不了多少,因为它的目标是保持数据库独立。因此,如果您正在使用PostgreSQL,MySQL等等,请阅读有关这些特定客户的优化和最佳实践。

答案 1 :(得分:1)

维基百科数据库设计,数据库规范化http://en.wikipedia.org/wiki/Database_designhttp://en.wikipedia.org/wiki/Database_normalization是两个非常重要的概念,除了索引之外。

除此之外,有必要对您的数据库有基本的了解。能够添加用户,设置权限和创建数据库是您应该知道的关键事项。

学习如何备份数据也是一件至关重要的事情。

列表越来越长,人们也应该知道django为你处理的数据库关系,OneToOne,ManyToMany,ManyToOne。 https://docs.djangoproject.com/en/dev/topics/db/models/

不应忽视JOIN的性能影响。 django中的访问模型属性非常简单,但要理解一些外键关系可能会产生巨大的性能影响,这也是值得考虑的事情。

一旦你对这些事情有了基本的了解,你就应该有一个非常好的起点来创建一个非平凡的django应用程序!

答案 2 :(得分:1)

Wikipedia有一篇关于数据库索引的好文章,它们与书中的索引类似(ish),即让你(计算机)找到更快的东西,因为你只看一下索引(可能非常糟糕)例如: - )

至于性能,你可以做很多事情,大概是因为它本身就是一个非常详细的主题,并且是每个RDBMS特有的东西然后它会分散/不相关他们(django)进入伟大的详情。最好的办法是为您的特定RDBMS提供谷歌性能提示。有一些常规技巧,如索引,限制查询只返回所需的数据等。

我认为其中一个主要的好处就是一个好的设计,尽可能地坚持Normal Form,并且在编程你的模型之前一般会考虑你的数据库(显然你似乎在做)。命名约定也是一个很大的优点,记住显式更好然后隐含: - )

总结:

  • 了解/了解relational model
  • 等基础知识
  • 决定naming convention
  • 可能使用ERM工具设计数据库
  • 首选代理人身份证件
  • 使用最小可能尺寸的正确数据类型
  • 适当使用索引,不要过度索引
  • 避免不必要/过度查询
  • 优先考虑原始性能的安全性和稳定性
  • 启动并运行数据库“调整”数据库分析/分析设置,查询,设计等
  • 定期备份和存档 - cron
  • 挂出here: - )
  • 如果需要进入复制(主/从 - django也支持这一点)
  • 考虑升级硬件
  • 不要太挂了它