【发布时间】:2019-01-29 06:11:39
【问题描述】:
想象一下,我想检索一组客户的所有订单。
以下示例中的arrayList 将包含一组客户 ID。
该数组将被传递到下面的get 方法中,并异步处理以检索数组中每个客户 ID 的订单。
这就是我迷路的地方。如何对数据库结果集进行分页,一次只从数据库中提取一小部分记录,而不必通过网络拉取所有记录。
让我感到困惑的是异步性质以及我们不知道每个客户有多少订单?那么如何有效地一次返回设置的页面大小呢?
service.js
function callToAnotherService(id) {
return new Promise((resolve, reject) => {
//calls service passing id
}
}
exports.get = arrayList => Promise.all(arrayList.map(callToAnotherService))
.then((result) => result);
【问题讨论】:
-
只要不提取所有将在您的 DBMS 上的记录。 MySQL 可以在结果集上使用
LIMIT来做到这一点。您确实需要一个查询来返回所有这些客户的所有记录,而不是单独获取每个客户的订单。 -
您还可以保留所需表的卷影副本,同时让其母服务处理数据,并从服务的数据库中查询数据。虽然,当您需要创建关系或经常提取数据时,您会这样做。要跨不同服务同步数据,您可以设置队列。
标签: javascript mysql node.js amazon-web-services microservices