RethinkDB Web サイトの concatMap api ページでは、eqJoin が concatMap + getAll で実装されていると述べており、これは他の結合よりも優れたパフォーマンスを提供するはずです。
私の場合、複数のテーブルを結合したいと思います。ここに例を示します。3 つのテーブルがあると仮定users
しdepartments
ますcompanies
。すべてのuser
ドキュメントに と が含まれdepartment id
ますcompany id
。例えば:
var user = {
name: 'Peter',
company: '12345',
department: '8888',
otherDetails: 'abc 123'
}
結合クエリの後に取得したい結果は、concatMap/eqJoin の結果と非常に似ていますが、3 つのテーブルすべてがあります。
[{
user: {...},
company: {...},
department: {...}
}, ...]
結果を得ることができる私が書いたクエリは次のとおりです。
r.table('users')
.concatMap(function(user) {
return r.table("companies").getAll(
user("company")
).map(function(company) {
return { user: user, company: company }
})
})
.concatMap(function(row) {
return r.table("departments").getAll(
row("user")("department")
).map(function(department) {
return { user: row("user"), company: row("company"), department: department }
})
})
私の質問:
- これを行うより良い方法はありますか?
- 上記のクエリのパフォーマンスは、2 つのテーブルに対する通常の eqJoin と同じくらい良好ですか?
- これらの場合、merge を使用した場合のパフォーマンスは、eqJoin (concatMap) を使用した場合よりもはるかに悪いのでしょうか?
どうもありがとう。