perf(backend): ノート作成時のアンテナ追加パフォーマンスを改善
This commit is contained in:
parent
da83322200
commit
77f91d67b4
3 changed files with 30 additions and 16 deletions
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -12,6 +12,17 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
## 13.x.x (unreleased)
|
||||||
|
|
||||||
|
### General
|
||||||
|
-
|
||||||
|
|
||||||
|
### Client
|
||||||
|
-
|
||||||
|
|
||||||
|
### Server
|
||||||
|
- ノート作成時のアンテナ追加パフォーマンスを改善
|
||||||
|
|
||||||
## 13.11.2
|
## 13.11.2
|
||||||
|
|
||||||
### Note
|
### Note
|
||||||
|
|
|
@ -91,14 +91,24 @@ export class AntennaService implements OnApplicationShutdown {
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async addNoteToAntenna(antenna: Antenna, note: Note, noteUser: { id: User['id']; }): Promise<void> {
|
public async addNoteToAntennas(note: Note, noteUser: { id: User['id']; username: string; host: string | null; }): Promise<void> {
|
||||||
this.redisClient.xadd(
|
const antennas = await this.getAntennas();
|
||||||
`antennaTimeline:${antenna.id}`,
|
const antennasWithMatchResult = await Promise.all(antennas.map(antenna => this.checkHitAntenna(antenna, note, noteUser).then(hit => [antenna, hit] as const)));
|
||||||
'MAXLEN', '~', '200',
|
const matchedAntennas = antennasWithMatchResult.filter(([, hit]) => hit).map(([antenna]) => antenna);
|
||||||
'*',
|
|
||||||
'note', note.id);
|
|
||||||
|
|
||||||
this.globalEventService.publishAntennaStream(antenna.id, 'note', note);
|
const redisPipeline = this.redisClient.pipeline();
|
||||||
|
|
||||||
|
for (const antenna of matchedAntennas) {
|
||||||
|
redisPipeline.xadd(
|
||||||
|
`antennaTimeline:${antenna.id}`,
|
||||||
|
'MAXLEN', '~', '200',
|
||||||
|
'*',
|
||||||
|
'note', note.id);
|
||||||
|
|
||||||
|
this.globalEventService.publishAntennaStream(antenna.id, 'note', note);
|
||||||
|
}
|
||||||
|
|
||||||
|
redisPipeline.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: フォローしているユーザーのノート、リストのユーザーのノート、グループのユーザーのノート指定はパフォーマンス上の理由で無効になっている
|
// NOTE: フォローしているユーザーのノート、リストのユーザーのノート、グループのユーザーのノート指定はパフォーマンス上の理由で無効になっている
|
||||||
|
|
|
@ -493,14 +493,7 @@ export class NoteCreateService implements OnApplicationShutdown {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Antenna
|
this.antennaService.addNoteToAntennas(note, user);
|
||||||
for (const antenna of (await this.antennaService.getAntennas())) {
|
|
||||||
this.antennaService.checkHitAntenna(antenna, note, user).then(hit => {
|
|
||||||
if (hit) {
|
|
||||||
this.antennaService.addNoteToAntenna(antenna, note, user);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.reply) {
|
if (data.reply) {
|
||||||
this.saveReply(data.reply, note);
|
this.saveReply(data.reply, note);
|
||||||
|
|
Loading…
Reference in a new issue