ChangeReeds功能如何在RethinkDB中内部工作?

时间:2015-06-08 17:14:15

标签: rethinkdb

我是RethinkDB的新用户。任何人都可以告诉我,如果每次我在表上收到更改,通过Changefeeds功能,查询是否需要每次重新评估?

例如,返回指定国家/地区的所有用户的查询。两个表:用户和国家。我总是想知道那个国家的所有用户。我问,因为如果我的表有很多记录(数百万)可能有点贵...

提前致谢, 温贝托

1 个答案:

答案 0 :(得分:1)

答案是......这取决于您想要做什么以及您的查询结构如何。

#1简单查询

如果您有一个简单的过滤器查询,正在侦听所有“用户”的更改。来自特定国家/地区,您的查询不会每次都重新评估。 RethinkDB自动处理,并且它不是一项昂贵的操作。在性能方面,这是首选策略。

示例:

r.table('users')
 .filter({ country: "China })
 .changes()

您还可以在同一查询中收听来自多个国家/地区的用户:

var countries = [ 'China', 'India', 'Colombia', 'Mexico', 'United States' ];
r.table('users')
 .filter(function (row) {
    return r.expr(countries).contains(row('country'));
 })
 .changes()

#2单一连接的简单查询

如果您获得用户的更新,但您还想加入来自“国家/地区”的国家/地区数据。表格,您可以在changes之后使用mergeget执行此操作。

r.table('users')
 .filter({ country_name: "China })
 .changes()
 .merge(function (row) {
   return {
     'country': r.table('countries').get(row('country_name'))
   }
 })

这将在每次更新时加入数据,但它比前一个更加昂贵,因为每次有更新时,都必须在&中进行点读取#39;国'表。

#3替代#2

如果您不想这样做,但仍想加入这些国家/地区的用户'表,您可以在应用程序层中执行连接。