Changefeeds 功能如何在 RethinkDB 内部工作?

How Changefeeds feature works internally in RethinkDB?

我是RethinkDB 的新用户。谁能告诉我是否每次我通过 Changefeeds 功能在 table 上收到更改时,每次都需要重新评估查询?

例如查询return来自指定国家的所有用户。两个 tables:用户和国家。我一直想知道那个国家的所有用户。我问是因为如果我的 table 有很多记录(数百万)可能有点贵...

提前致谢, 温贝托

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

#1 简单查询

如果您有一个简单的过滤器查询来侦听来自特定国家/地区的所有 'users' 的更改,您的查询将不会每次都重新评估。 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 单连接简单查询

如果,当您获得有关用户的更新时,但您还想从 'countries' table 加入国家/地区数据,您可以在 changes 之后使用一个 merge 和一个 get.

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

这个每次更新都会加入数据,但是比之前的贵,因为每次更新都要在'countries'table。

#3 替代#2

如果您不想这样做,但仍想将国家/地区加入 'users' table,您可以在您的应用程序层中进行加入。