数据库加入在Web服务器上完成

时间:2011-12-02 21:48:01

标签: database performance join webserver theory

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

  

Facebook使用MySQL,但主要是作为键值持久存储,   自优化以来,将连接和逻辑移动到Web服务器上   更容易在那里执行(在Memcached层的“另一面”)。

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

如果可能的话,有人可以解释一下(一个例子会有很大的帮助),或者指出一篇好文章(或两篇),了解你想要做到这一点的方式和原因的好处(以及可能的例子)? p>

1 个答案:

答案 0 :(得分:3)

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

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

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

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

RDBMS(在我们的例子中是Sql Server)必须处理文件中的数据。这些文件非常大,只有大量的文件可以加载到内存中,即使是在我们的重型SQL服务器上也是如此,因此存在磁盘I / O的损失。

当我们将其中的一小部分加载到数据集中时,连接完全发生在内存中,因此我们将失去转到磁盘的I / O代价。

尽管我无法完全解释性能提升的原因(我希望有更多知识渊博的人告诉我,如果我的猜测是对的)我可以告诉你,在某些情况下,当有非常大量的数据,但您的应用只需要拉一小部分数据,按照所描述的模型,性能有明显的启动。我们已经看到它将应用程序转变为闪电般快速的应用程序。

但是,如果做得不正确,则会受到惩罚 - 如果您使机器RAM过载但不适当地或在任何情况下都这样做,那么您也会遇到崩溃或性能问题。