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,您可以在您的应用程序层中进行加入。
我是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,您可以在您的应用程序层中进行加入。