gpt4 book ai didi

在 Web 服务器上完成的数据库连接

转载 作者:太空狗 更新时间:2023-10-30 01:56:42 25 4
gpt4 key购买 nike

今天我找到了an article online讨论 Facebook 的架构(虽然有点过时)。在阅读它时,我注意到在帮助 Facebook 扩展的软件 部分下,第三个要点指出:

Facebook uses MySQL, but primarily as a key-value persistent storage, moving joins and logic onto the web servers since optimizations are easier to perform there (on the “other side” of the Memcached layer).

为什么要将复杂的连接移动到网络服务器上?数据库不是为执行连接逻辑而优化的吗?这种方法似乎与我到目前为止所学的相反,所以也许解释只是在躲避我。

如果可能的话,有人可以解释一下(一个例子会非常有帮助)或者给我指点一篇(或两篇)好文章以了解你如何以及为什么要这样做的好处(可能还有例子)?

最佳答案

我不确定 Facebook,但我们有几个应用程序都遵循类似的模型。基础相当简单。

数据库包含大量数据。在数据库级别执行连接确实会减慢我们对数据进行的任何查询,即使我们只返回一小部分。 (比如父数据100行,子数据1000行,父子关系)

但是,使用 .NET DataSet 对象,我们在我们需要的行中进行选择,然后在 DataSet 中创建 DataRelation 对象,我们看到了性能的显着提升。

我无法回答为什么会这样,因为我对两者的内部工作原理都不了解,但我可以大胆猜测...

RDBMS(在我们的例子中是 Sql Server)必须处理文件中的数据。这些文件非常大,即使在我们的重型 SQL Server 上也只能将其中的一部分加载到内存中,因此磁盘 I/O 会受到影响。

当我们将它的一小部分加载到数据集中时,连接完全在内存中发生,因此我们不会因为转到磁盘而受到 I/O 损失。

尽管我不能完全解释性能提升的原因(如果我的猜测是正确的,我很乐意让更有知识的人告诉我)我可以告诉你,在某些情况下,当有一个非常大量数据,但您的应用程序只需要提取其中的一小部分,按照描述的模型可以显着提高性能。我们已经看到它将刚刚爬行的应用程序变成了闪电般快速的应用程序。

但如果操作不当,就会受到惩罚 - 如果您使机器的 RAM 过载但操作不当或在任何情况下都操作不当,那么您也会遇到崩溃或性能问题。

关于在 Web 服务器上完成的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com