Improve performance, log database statements

@Mogge first of all, you can wait for multiple promises in parallel
by using Promise.all([...]). Second if you run:
```sh
DEBUG='human-connection:neo4j:cypher' yarn run dev
```
in order to log out all database statements. I added log statements to
the new search resolver.
This commit is contained in:
roschaefer 2019-12-20 17:55:48 +01:00
parent 34a3f81dd3
commit b3521d8ce5

View File

@ -1,3 +1,5 @@
import log from './helpers/databaseLogger'
export default { export default {
Query: { Query: {
findResources: async (_parent, args, context, _resolveInfo) => { findResources: async (_parent, args, context, _resolveInfo) => {
@ -16,21 +18,6 @@ export default {
RETURN resource {.*, __typename: labels(resource)[0]} RETURN resource {.*, __typename: labels(resource)[0]}
LIMIT $limit LIMIT $limit
` `
const session = context.driver.session()
let postResults, userResults
const readPostTxResultPromise = session.readTransaction(async transaction => {
const postTransactionResponse = transaction.run(postCypher, {
query: myQuery,
limit,
thisUserId,
})
return postTransactionResponse
})
try {
postResults = await readPostTxResultPromise
} finally {
session.close()
}
const userCypher = ` const userCypher = `
CALL db.index.fulltext.queryNodes('user_fulltext_search', $query) CALL db.index.fulltext.queryNodes('user_fulltext_search', $query)
@ -42,22 +29,30 @@ export default {
RETURN resource {.*, __typename: labels(resource)[0]} RETURN resource {.*, __typename: labels(resource)[0]}
LIMIT $limit LIMIT $limit
` `
const readUserTxResultPromise = session.readTransaction(async transaction => {
const session = context.driver.session()
const searchResultPromise = session.readTransaction(async transaction => {
const postTransactionResponse = transaction.run(postCypher, {
query: myQuery,
limit,
thisUserId,
})
const userTransactionResponse = transaction.run(userCypher, { const userTransactionResponse = transaction.run(userCypher, {
query: myQuery, query: myQuery,
limit, limit,
thisUserId, thisUserId,
}) })
return userTransactionResponse return Promise.all([postTransactionResponse, userTransactionResponse])
}) })
try { try {
userResults = await readUserTxResultPromise const [postResults, userResults] = await searchResultPromise
log(postResults)
log(userResults)
return [...postResults.records, ...userResults.records].map(r => r.get('resource'))
} finally { } finally {
session.close() session.close()
} }
let searchResults = [...postResults.records, ...userResults.records]
searchResults = searchResults.map(record => record.get('resource'))
return searchResults
}, },
}, },
} }