2

我正在尝试优化我的网站,并找到了这个不错的 Django 小文档: Database Access Optimization,它建议进行分析,然后进行索引,并选择适当的字段作为数据库优化的起点。

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

我们将假设您已经完成了上述显而易见的事情。

呃。等待!索引是什么鬼?

显然,我可以通过谷歌弄清楚索引是什么,我的问题是:为了创建一个可扩展的网站,我需要知道什么是数据库内容?关于 Django 框架,我应该特别注意什么?我还应该知道哪些其他“显而易见”的事情?我在哪里可以学习它们?

我希望在这里找到一个方向。我不需要学习任何有关 SQL 的知识,我只想了解足够多的信息来以正确的方式构建我的应用程序。

提前致谢!

4

3 回答 3

3

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

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

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

于 2012-01-11T15:31:01.510 回答
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 应用程序!

于 2012-01-11T00:45:44.837 回答
1

维基百科有一篇关于数据库索引的好文章,它们类似于(ish)书中的索引,即让您(计算机)更快地找到东西,因为您只需查看索引(可能是一个非常糟糕的例子:-)

至于性能,您可以做很多事情,大概是因为它本身就是一个非常详细的主题,并且是每个 RDBMS 特有的东西,那么对于他们(django)来说,深入细节会分散注意力/无关紧要。最好的事情是为您的特定 RDBMS 搜索性能提示。有一些通用提示,例如索引、限制查询以仅返回所需的数据等。

我认为主要的事情之一是一个好的设计,尽可能地坚持范式,并且通常在编程模型等之前实际上考虑到你的数据库(显然你似乎正在这样做)。命名约定也是一大优势,记住显式比隐式更好:-)

总结一下:

  • 学习/理解关系模型等基础知识
  • 确定命名约定
  • 可能使用 ERM 工具设计您的数据库
  • 首选代理 ID
  • 使用最小可能大小的正确数据类型
  • 适当使用索引,不要过度索引
  • 避免不必要/过度查询
  • 将安全性和稳定性优先于原始性能
  • 一旦你有一个启动并运行的数据库“调整”数据库分析/分析设置、查询、设计等
  • 定期备份和归档 - cron
  • 在这里闲逛:-)
  • 如果需要提前复制(主/从 - django 也很好地支持这一点)
  • 考虑升级您的硬件
  • 不要太挂断它
于 2012-01-11T00:48:29.123 回答