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

View File

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