DB:由于所做的更改,如何正确处理大量CRUD查询?

时间:2018-01-11 07:37:22

标签: javascript mongodb performance processing-efficiency coding-efficiency

我在MongoDB后端API上使用Node.js。工作真棒。 当用户插入新帖子时,我想更新它的关注者,它的关注者未被正式列为followers集合中的关注者,他们只是潜在的用户,可能就像他的交。

例如,如果一个人在某个城市写了一个帖子,其他人标记为一个关键城市,那么这个帖子应该在他的通知提要中。

为了做到这一点,Node.js后端API必须检查每个用户是否在他的主要城市中有海报发布的城市。

如果那时,它应该发出另一个插入通知的MongoDB查询,这样它就会收听关注者通知提要。

另外,推送移动应用通知。

我知道它必须被切成碎片,因此我制作海报只发布他的帖子,然后向服务器发出一个套接字,告诉你需要处理一些数据。

服务器侦听套接字发出并开始查找并将通知插入数据库中的正确位置。

之后,服务器运行另一个功能,通过Google Firebase Cloud发送推送通知。

但是我想知道,因为现在它的工作非常完美,如果服务器应该为大量行执行该任务,那不仅仅是5k用户......

关于我项目成分的信息: Node.js,MongoDB,AngularJS和Express。

这是效率问题,所以我认为不要用大量的代码来打扰你是明智的。

感谢。

1 个答案:

答案 0 :(得分:1)

这可能不是一个可扩展的解决方案。一个集合中的插入触发对另一个集合的查询,该集合将子文档插入到数组中,一旦获得大量用户,这将是一个非常繁重的操作。

我建议有3个集合来处理这个任务。一个集合用于帖子。一个集合适用于城市。一个集合供用户使用。不是将通知插入用户集合,而是将通知插入cities集合中。每个城市都会收到一系列与该城市相关的通知。用户可以拥有一个数组,用于保存他们感兴趣的城市,用于从城市集合中提取通知。通过这种方式进行设置,您只需在每次上传后更新一个文档,而不是可能是一个大数字。

离。

ngOnInit() {
  const el = this.el.nativeElement as HTMLElement;
  const parent = el.parentElement;
  const componentName = parent.nodeName;
  if (!componentName === 'my-component') { return; } // Stop making your directive
}

注意:此示例可以减少数据冗余以提高效率,但这样做是为了便于阅读。

不更新用户对象的另一个好处是它允许每个用户索引感兴趣的城市。如果需要向所有对洛杉矶感兴趣的用户发送移动推送通知,'索引将使这个快速工作(而不是需要阅读并可能编辑每个对象的密集操作)。