Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 考虑到您只能使用一个数据库,您真的可以使用Django进行扩展吗?(在models.py和settings.py中)_Python_Django_Web Services_Scalability - Fatal编程技术网

Python 考虑到您只能使用一个数据库,您真的可以使用Django进行扩展吗?(在models.py和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只允许您在settings.py中使用一个数据库。
这会阻止你扩大规模吗?(数百万用户)

Django现在有了。

数据库不是你的瓶颈

仔细检查你的浏览器

对于每个HTML页面,您(平均)发送8个其他文件,其中一些文件可能相当大。这些是你的JS、CSS、图形等等

实际的性能瓶颈是浏览器请求这些文件并接受字节。。。Lo、 。。。WLy、

为了扩大规模,那么就这样做

  • 使用多个前端,与wackamole等纯软件解决方案相平衡

  • 使用squid等代理服务器发送“其他”文件。它们基本上是静态的。这是完成7/8工作下载到客户端的地方。不要吝啬于把这些做好

  • 使用多个并发mod_wsgi/Django来创建基于DB查询的动态HTML,这是很少见的。确保mod_wsgi处于守护程序模式,这样您就可以有多个Django服务器可用于Apache。根据需要构建尽可能多的这些。它们都是相同的,都是平行的,都是怪人所共有的

  • 使用一个单一的、快速的数据库,比如MySQL,来完成必须来自数据库的一些事情。MySQL将在其服务器上使用多个内核,因此它可以很好地扩展,而无需购买内存。把这个放在一个单独的盒子里,所有的东西都是单独的,专门为这个而调整的

  • 你会发现这个比例很好。您会发现,squid、apache、Django守护进程和实际数据库之间很好地共享了负载。您还将发现负载的每一部分(从枯燥的静态部分到有趣的数据库查询)都是分别并发发生的


    最后,购买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:我很确定,当你说“单一”数据库时,你不是在看集群解决方案