我有一个带有 express 的后端 api。我已经使用winston
and实现了日志记录morgan
。
我的下一个要求是将用户的活动:时间戳、用户以及他获取或更改的内容记录到数据库 MySQL 中。我在网上搜索并找到了这个。但是由于还没有答案,所以我来到了这里。
我的想法:在我响应客户端之前,我可以在我的路由处理程序
中添加另一个查询,其中INSERT
包含上述所有信息。但我很好奇是否有另一种方法可以完美地实现它。
我有一个带有 express 的后端 api。我已经使用winston
and实现了日志记录morgan
。
我的下一个要求是将用户的活动:时间戳、用户以及他获取或更改的内容记录到数据库 MySQL 中。我在网上搜索并找到了这个。但是由于还没有答案,所以我来到了这里。
我的想法:在我响应客户端之前,我可以在我的路由处理程序
中添加另一个查询,其中INSERT
包含上述所有信息。但我很好奇是否有另一种方法可以完美地实现它。
从以下案例中选择最适合您的系统的方法。
根据用例决定您的活动日志应该是持久的还是在内存中。让我们假设持久化并且 Db 是 mySQL。
如果您的数据已经是数据库,则没有必要再次存储所有数据,您可以只存储主要用于识别的键/ID,用于您执行 CRUD 的行。如果执行的操作在活动表中始终是固定的或序列化的 JSON,您可以将其存储为外键。例如,结构可以如下所示,其中activity_data
是序列化的 JSON 值。
ID | activity_name | activity_data | start_date | end_date |
如果在再次收集数据时遇到巨大的困难,在发送响应之前存储活动结束时,您可以考虑将活动函数应用于为 mySQL 创建的数据库抽象层或包装模块(假设)。例如 :
try {
await query(`SELECT * FROM products`);
//performActivity(insertion)
}catch{
//performErrorActivity(insertion)
}
在这里,我们需要考虑在性能方面做一个小的权衡,因为我们在每一步都执行插入操作。
如果我们想一次完成所有操作,我们需要维护一个集合,该集合将所有活动的引用相加,request.activityPayload
或者可能是缓存,最后执行插入。
如果您正在考虑专门为活动添加新的数据源,强烈建议使用非关系数据库来存储/转储此类数据(MongoDB 自以为是)。这是因为与关系数据库相比,它并不关注模式结构,而且与 mySQL 相比,您可以获得性能优势,特别是在活动存储的情况下。