我是RethinkDB的新用户。任何人都可以告诉我,如果每次我在表上收到更改,通过Changefeeds功能,查询是否需要每次重新评估?
例如,返回指定国家/地区的所有用户的查询。两个表:用户和国家。我总是想知道那个国家的所有用户。我问,因为如果我的表有很多记录(数百万)可能有点贵...
提前致谢, 温贝托
答案 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
之后使用merge
和get
执行此操作。
r.table('users')
.filter({ country_name: "China })
.changes()
.merge(function (row) {
return {
'country': r.table('countries').get(row('country_name'))
}
})
这将在每次更新时加入数据,但它比前一个更加昂贵,因为每次有更新时,都必须在&中进行点读取#39;国'表。
#3替代#2
如果您不想这样做,但仍想加入这些国家/地区的用户'表,您可以在应用程序层中执行连接。