Sails.js一对多的表演

时间:2015-04-22 13:25:44

标签: node.js sails.js one-to-many waterline

我使用waterline的ORM将sails.js上的sql查询与其他方法进行了比较。

我做了以下请求:获取来自各大洲的所有国家/地区,我将这两个请求与wireshark进行了比较。

简单的SQL查询:

"SELECT * FROM countries AS cou INNER JOIN continents AS con ON (cou.continent_id=continent.id)"

然后我做了相同的定义国家和大陆之间的一对多关联,并做了以下要求。

Continents.find().populate("countries").exec(function(err, result)) {
  res.send(result)
}

通过这种方式,返回结果需要大约66 ms,考虑到我有15 ms的网络延迟,我可以通过移动node.js服务器来降低到50 ms。

当我使用sql查询时,它需要大约35ms,所以我可以下降到近20ms,这对我有好处。

有没有办法使用这两种方法获得相同的结果?或者SQL查询总是更快?

1 个答案:

答案 0 :(得分:1)

实际上,在这样的人口中生成的查询是
1.选择父母:

  

从大陆选择* ......

  1. 选择所检索大陆的所有国家。
  2.   

    (从continent_id = continent_1的国家/地区选择*)        联盟       (从continent_id = continent_2的国家/地区选择*)        联盟        ...        联盟       (从continent_id = continent_n的国家/地区选择*)

    1. 重组结果(通过外键对每个国家对其大陆的影响。
    2. 此实现可以轻松管理limit和skip子句作为调用:

        

      Continents.find()填充("国家&#34)。极限(2).skip(1).exec(函数(ERR,   结果)){           res.send(结果)        }

      应仅返回每个大洲的第二个和第三个国家/地区,您可以看到这样的实施只生成一个查询,因此DBMS不会过载。