perf(server): opmitize updates table

This commit is contained in:
forehalo 2023-10-24 17:33:24 +08:00
parent fd6536ea90
commit ef1228dcb4
No known key found for this signature in database
3 changed files with 19 additions and 7 deletions

View File

@ -0,0 +1,14 @@
/*
Warnings:
- The primary key for the `updates` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `object_id` on the `updates` table. All the data in the column will be lost.
*/
-- DropIndex
DROP INDEX "updates_workspace_id_guid_seq_key";
-- AlterTable
ALTER TABLE "updates" DROP CONSTRAINT "updates_pkey",
DROP COLUMN "object_id",
ADD CONSTRAINT "updates_pkey" PRIMARY KEY ("workspace_id", "guid", "seq");

View File

@ -143,16 +143,14 @@ model Snapshot {
@@map("snapshots")
}
// backup during other update operation queue downtime
model Update {
objectId String @id @default(uuid()) @map("object_id") @db.VarChar
workspaceId String @map("workspace_id") @db.VarChar
id String @map("guid") @db.VarChar
seq Int @db.Integer
blob Bytes @db.ByteA
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
@@unique([workspaceId, id, seq])
@@id([workspaceId, id, seq])
@@map("updates")
}

View File

@ -264,15 +264,15 @@ export class DocManager
* get pending updates
*/
async getUpdates(workspaceId: string, guid: string) {
return this.db.update.findMany({
const updates = await this.db.update.findMany({
where: {
workspaceId,
id: guid,
},
orderBy: {
seq: 'asc',
},
});
// perf(memory): avoid sorting in db
return updates.sort((a, b) => (a.createdAt < b.createdAt ? -1 : 1));
}
/**