Python 考虑到您只能使用一个数据库,您真的可以使用Django进行扩展吗?(在models.py和settings.py中)
Django只允许您在settings.py中使用一个数据库。Python 考虑到您只能使用一个数据库,您真的可以使用Django进行扩展吗?(在models.py和settings.py中),python,django,web-services,scalability,Python,Django,Web Services,Scalability,Django只允许您在settings.py中使用一个数据库。 这会阻止你扩大规模吗?(数百万用户)Django现在有了。数据库不是你的瓶颈 仔细检查你的浏览器 对于每个HTML页面,您(平均)发送8个其他文件,其中一些文件可能相当大。这些是你的JS、CSS、图形等等 实际的性能瓶颈是浏览器请求这些文件并接受字节。。。Lo、 。。。WLy、 为了扩大规模,那么就这样做 使用多个前端,与wackamole等纯软件解决方案相平衡 使用squid等代理服务器发送“其他”文件。它们基本上是静态的。这是
这会阻止你扩大规模吗?(数百万用户)Django现在有了。数据库不是你的瓶颈 仔细检查你的浏览器 对于每个HTML页面,您(平均)发送8个其他文件,其中一些文件可能相当大。这些是你的JS、CSS、图形等等 实际的性能瓶颈是浏览器请求这些文件并接受字节。。。Lo、 。。。WLy、 为了扩大规模,那么就这样做
最后,购买Schlossnagle的书 如果你发现DB是你应用的瓶颈,而他们现在已经绕过了它(比如使用缓存),那么你也应该扩展你的DB。Django与此无关读取扩展到数百万用户并不是数据库问题,而是通过负载平衡和缓存等修复的,请参见上面的S.Lott
写扩展确实可能是一个数据库问题。“分片”和拥有多个数据库可以是一个解决方案,但这对于SQL来说很难,同时仍然保持数据库的相关性。流行的解决方案有新型的“nosql”数据库。但如果你真的有这些问题,那么你就需要专业人士的帮助,而不仅仅是老兄们的回答 已经有了一些很好的答案(例如,S.洛特),但我认为我应该再补充一些东西: 确保不要将数据库用于逻辑操作 我理解
orderby
或SQL过程的吸引力,但是您只有一个数据库,但有多个django服务器,如果可以的话,让服务器来处理
当然,如果根据某个标准(日期),您只需要最后十行,那么请务必在请求中精确指定它;)只需确保数据库不会因其他地方可以处理的操作而过载
为这个问题投入更多的硬件
MySQL和Oracle可以很好地扩展硬件,如果性能有小问题,可以从添加更多硬件开始
拆分数据库
我知道,对于关系和所有需要一起管理的表,如果遇到负载问题,请尝试对表进行分组,例如,如果您有一组“历史记录”表,那么它可能在没有其他表的情况下工作,并且位于单独的服务器上
请考虑调整,并注意您的请求/索引
在这里,您需要专家的建议,但我可以从经验中看出,即使是一个调整不当的请求也可能造成严重破坏。。。而且很难找到答案。你可以考虑诊断/微调的例子。< /P>
<>不要孤立地决定表结构,但请考虑请求
分层请求和多个连接可能会非常昂贵。您不必建立完全规范化的关系模式,可以考虑一些非规范化,以便更好地适应数据库所面临的请求类型。
只是一些想法:)一些杂项建议:
- 我很惊讶还没有人提到这件事。使用memcached。如果你得到很多重复类型的查询(大多数网络应用都会这样做),这会带来巨大的不同
- 考虑使用Oracle的。它允许您在单个数据库连接上添加对多个数据库的支持
另一件需要考虑的是使用A。这解决了“我们如何在不中断整个世界的情况下更改数据库?”这一问题
这是一个很好的建议,但似乎有点因地制宜。在某一点上,拥有一个数据库会导致可伸缩性问题。当然,这一点的容易程度取决于具体情况。@Jason Baker:我不明白为什么一个数据库必须是一个限制。对于Oracle和DB2等商业产品,您可以拥有一个跨多个处理器(每个处理器都有多个内核)的数据库。为什么单一数据库是一个限制?@S.Lott-singleanything在可伸缩性方面是一个限制。首先,对于单个数据库,您只有一个故障点。其次,限制数据库的不仅仅是CPU时间。还有一些I/O问题需要处理。也就是说,很有可能(甚至可能)你不需要扩大到一个问题的程度。但在某一点上它确实成为了一个问题。@Jason Baker:我很确定,当你说“单一”数据库时,你不是在看集群解决方案