SQL 当结果太大时,使用 knex 的服务器查询会导致 Nuxt 应用程序崩溃
SQL Server query using knex crashes Nuxt app when results size is too large
在 Nuxt 应用程序中使用 knex 查询托管在 Azure 上的 SQL 服务器数据库。当查询具有 ~150k 行的特定 table 时,应用程序崩溃但确实打印了 returned 结果的长度。当查询较小的 table ~2k 行时,没有问题。
我可以从单个查询中 return 获取多少数据有限制吗?我需要能够 return 跨多个 table 的大约 100 万行数据,以便我可以聚合和显示使用原始 table 数据完成的一些计算。
我认为数据量占用太多内存是可以理解的,但我想知道是否有解决return大量行w/o问题的方法。
api/routes/tickets.js
const { Router } = require('express');
const router = Router();
const knex_db = require('knex')({
client: 'mssql',
connection: {
host: 'mydb.database.windows.net',
user: 'user',
password: 'secret',
port: 1433,
options: {
database: 'mydatabase',
encrypt: true
}
}
});
router.get('/tickets/all', async function(req, res) {
const results = await knex_db('dbo.tickets');
console.log('results.length: ' + results.length);
res.json({data: results});
})
module.exports = router;
api/index.js
const express = require('express');
const app = express();
const tickets = require('./routes/tickets');
app.use(tickets);
module.exports = {
path: '/api',
handler: app
}
pages/setup/index.vue
<script>
export default {
async asyncData ({ $axios }) {
const data = (await $axios.$get('/api/tickets/all')).data;
// console.log(data);
return { tickets: data }
}
}
</script>
我能够通过更改我的代码来解决这个问题
res.json(...)
至
res.status(200).json(...)
出于某种原因 res.json 一定是造成了内存泄漏或类似的问题。
在 Nuxt 应用程序中使用 knex 查询托管在 Azure 上的 SQL 服务器数据库。当查询具有 ~150k 行的特定 table 时,应用程序崩溃但确实打印了 returned 结果的长度。当查询较小的 table ~2k 行时,没有问题。
我可以从单个查询中 return 获取多少数据有限制吗?我需要能够 return 跨多个 table 的大约 100 万行数据,以便我可以聚合和显示使用原始 table 数据完成的一些计算。
我认为数据量占用太多内存是可以理解的,但我想知道是否有解决return大量行w/o问题的方法。
api/routes/tickets.js
const { Router } = require('express');
const router = Router();
const knex_db = require('knex')({
client: 'mssql',
connection: {
host: 'mydb.database.windows.net',
user: 'user',
password: 'secret',
port: 1433,
options: {
database: 'mydatabase',
encrypt: true
}
}
});
router.get('/tickets/all', async function(req, res) {
const results = await knex_db('dbo.tickets');
console.log('results.length: ' + results.length);
res.json({data: results});
})
module.exports = router;
api/index.js
const express = require('express');
const app = express();
const tickets = require('./routes/tickets');
app.use(tickets);
module.exports = {
path: '/api',
handler: app
}
pages/setup/index.vue
<script>
export default {
async asyncData ({ $axios }) {
const data = (await $axios.$get('/api/tickets/all')).data;
// console.log(data);
return { tickets: data }
}
}
</script>
我能够通过更改我的代码来解决这个问题
res.json(...)
至
res.status(200).json(...)
出于某种原因 res.json 一定是造成了内存泄漏或类似的问题。