如何处理加载大型馆藏的所有记录并监听mongodb atlas上的新数据?



我有一个角度应用程序,当它加载时,从具有大约 12K 条记录的 mongodb atlas 集合中获取所有数据,它每天都在增加,因此数据集很大。此数据从 primeng 加载到表中。我们希望所有数据在表中始终可用,以便我们可以查询查看和查询内存中的整个数据集。我有两个主要问题:

  1. 由于数据集很大,现在加载大约需要 10 秒,并且显然会随着我们获得更多数据而增加。所以我想加快速度

  2. 数据正在从外部来源转储到mondogb地图集中。一旦我在网站中加载数据,我希望能够侦听新数据并更新我的 UI,而无需因为上面提到的第 1) 点而重新加载页面。我该怎么做?

我在网上研究了不同的主题,比如 redis with mongodb,也看到了这个关于观察 mongodb 集合变化的答案:如何监听 MongoDB 集合的变化?

我很难解决的是如何一起实现它,因为我是角度和有效处理大型数据集的主题的新手。

下面是在页面加载时将数据加载到表中的代码片段。

ngOnInit() {
this.selectedColumns = this.cols;
this.loading = true;
this.handleEventData();
this.setCustomFilters();
}
handleEventData = async function() {
this.eventService.getEvents().subscribe((data: any[]) => {
this.events = this.flattenEventData(data);
this.makeEventDataUserFriendly(this.events);
this.setDistinctOptions(this.events);
this.loading = false;
})
}
<p-table [value]="events" #dt [columns]="selectedColumns" [paginator]="true" [rows]="250" [loading]="loading"
[autoLayout]=true [reorderableColumns]="true" [rowsPerPageOptions]="['250','500','1000']" dataKey="_id"
rowExpandMode="single" selectionMode="single">

下面是执行this.eventService.getEvents()时调用的代码。fieldsToIgnore有一个我不想包含在结果中的字段列表。我正在使用monk作为我的数据库驱动程序:

exports.GetEvents = function() {
return db.events
.find({}, {
sort: {
createdAt: -1
},
fields: fieldsToIgnore
})
.then(docs => docs)
.catch();
};

你对p表的暗示

<p-table [value]="events" #dt [columns]="selectedColumns" [paginator]="true" [rows]="250" [loading]="loading"
[autoLayout]=true [reorderableColumns]="true" [rowsPerPageOptions]="['250','500','1000']" dataKey="_id"
rowExpandMode="single" selectionMode="single">

neet请求所有数据,这是没有效率的,会影响你们所有人的性能或会使浏览器崩溃。

primeng表支持 惰性模式可以方便地处理大型数据集,而不是加载整个数据,而是在每次分页、排序和过滤发生时通过调用 onLazyLoad 回调来加载小块数据。

👉 表懒惰模式

如果您确实想一次性查看任何 Resone 当前版本的 primeng 支持虚拟滚动的所有数据,因此您看起来像显示所有数据,但它会从数据库中获取数据,但在滚动过程中有块,因此它将提供更好的用户体验

检查加载 250k 数据的示例 👉

最新更新