From fd6d23327ccef6105e3cd0d5d532e2d179e1442c Mon Sep 17 00:00:00 2001 From: "nise.moe" Date: Thu, 22 Feb 2024 20:48:19 +0100 Subject: [PATCH] Avoid recalculating the same replay similarity if the replay set hasn't changed --- .../com/nisemoe/generated/tables/Beatmaps.kt | 15 ++++++---- .../tables/records/BeatmapsRecord.kt | 30 ++++++++++++++----- .../nisemoe/nise/scheduler/ImportScores.kt | 15 +++++++++- .../migration/V0.0.1.022__alter_beatmaps.sql | 2 ++ 4 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 nise-backend/src/main/resources/db/migration/V0.0.1.022__alter_beatmaps.sql diff --git a/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/Beatmaps.kt b/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/Beatmaps.kt index 20fd807..86679b8 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/Beatmaps.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/Beatmaps.kt @@ -16,7 +16,7 @@ import org.jooq.ForeignKey import org.jooq.Name import org.jooq.Record import org.jooq.Records -import org.jooq.Row9 +import org.jooq.Row10 import org.jooq.Schema import org.jooq.SelectField import org.jooq.Table @@ -107,6 +107,11 @@ open class Beatmaps( */ val SYS_LAST_UPDATE: TableField = createField(DSL.name("sys_last_update"), SQLDataType.TIMESTAMPWITHTIMEZONE(6).defaultValue(DSL.field(DSL.raw("CURRENT_TIMESTAMP"), SQLDataType.TIMESTAMPWITHTIMEZONE)), this, "") + /** + * The column public.beatmaps.last_replay_check. + */ + val LAST_REPLAY_CHECK: TableField = createField(DSL.name("last_replay_check"), SQLDataType.CLOB, this, "") + private constructor(alias: Name, aliased: Table?): this(alias, null, null, aliased, null) private constructor(alias: Name, aliased: Table?, parameters: Array?>?): this(alias, null, null, aliased, parameters) @@ -148,18 +153,18 @@ open class Beatmaps( override fun rename(name: Table<*>): Beatmaps = Beatmaps(name.getQualifiedName(), null) // ------------------------------------------------------------------------- - // Row9 type methods + // Row10 type methods // ------------------------------------------------------------------------- - override fun fieldsRow(): Row9 = super.fieldsRow() as Row9 + override fun fieldsRow(): Row10 = super.fieldsRow() as Row10 /** * Convenience mapping calling {@link SelectField#convertFrom(Function)}. */ - fun mapping(from: (Int?, String?, Int?, String?, String?, Double?, String?, String?, OffsetDateTime?) -> U): SelectField = convertFrom(Records.mapping(from)) + fun mapping(from: (Int?, String?, Int?, String?, String?, Double?, String?, String?, OffsetDateTime?, String?) -> U): SelectField = convertFrom(Records.mapping(from)) /** * Convenience mapping calling {@link SelectField#convertFrom(Class, * Function)}. */ - fun mapping(toType: Class, from: (Int?, String?, Int?, String?, String?, Double?, String?, String?, OffsetDateTime?) -> U): SelectField = convertFrom(toType, Records.mapping(from)) + fun mapping(toType: Class, from: (Int?, String?, Int?, String?, String?, Double?, String?, String?, OffsetDateTime?, String?) -> U): SelectField = convertFrom(toType, Records.mapping(from)) } diff --git a/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/records/BeatmapsRecord.kt b/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/records/BeatmapsRecord.kt index eba9d25..cdca753 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/records/BeatmapsRecord.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/generated/tables/records/BeatmapsRecord.kt @@ -10,8 +10,8 @@ import java.time.OffsetDateTime import org.jooq.Field import org.jooq.Record1 -import org.jooq.Record9 -import org.jooq.Row9 +import org.jooq.Record10 +import org.jooq.Row10 import org.jooq.impl.UpdatableRecordImpl @@ -19,7 +19,7 @@ import org.jooq.impl.UpdatableRecordImpl * This class is generated by jOOQ. */ @Suppress("UNCHECKED_CAST") -open class BeatmapsRecord private constructor() : UpdatableRecordImpl(Beatmaps.BEATMAPS), Record9 { +open class BeatmapsRecord private constructor() : UpdatableRecordImpl(Beatmaps.BEATMAPS), Record10 { open var beatmapId: Int? set(value): Unit = set(0, value) @@ -57,6 +57,10 @@ open class BeatmapsRecord private constructor() : UpdatableRecordImpl = super.key() as Record1 // ------------------------------------------------------------------------- - // Record9 type implementation + // Record10 type implementation // ------------------------------------------------------------------------- - override fun fieldsRow(): Row9 = super.fieldsRow() as Row9 - override fun valuesRow(): Row9 = super.valuesRow() as Row9 + override fun fieldsRow(): Row10 = super.fieldsRow() as Row10 + override fun valuesRow(): Row10 = super.valuesRow() as Row10 override fun field1(): Field = Beatmaps.BEATMAPS.BEATMAP_ID override fun field2(): Field = Beatmaps.BEATMAPS.ARTIST override fun field3(): Field = Beatmaps.BEATMAPS.BEATMAPSET_ID @@ -78,6 +82,7 @@ open class BeatmapsRecord private constructor() : UpdatableRecordImpl = Beatmaps.BEATMAPS.TITLE override fun field8(): Field = Beatmaps.BEATMAPS.VERSION override fun field9(): Field = Beatmaps.BEATMAPS.SYS_LAST_UPDATE + override fun field10(): Field = Beatmaps.BEATMAPS.LAST_REPLAY_CHECK override fun component1(): Int? = beatmapId override fun component2(): String? = artist override fun component3(): Int? = beatmapsetId @@ -87,6 +92,7 @@ open class BeatmapsRecord private constructor() : UpdatableRecordImpl = try { @@ -548,6 +555,12 @@ class ImportScores( } dslContext.batch(queries).execute() + + // Save the replay set so that it doesnt' get calculated again + dslContext.update(BEATMAPS) + .set(BEATMAPS.LAST_REPLAY_CHECK, replaySetId) + .where(BEATMAPS.BEATMAP_ID.eq(beatmapId)) + .execute() } private fun insertAndProcessNewScore(beatmapId: Int, score: OsuApiModels.Score, isUserQueue: Boolean = false) { diff --git a/nise-backend/src/main/resources/db/migration/V0.0.1.022__alter_beatmaps.sql b/nise-backend/src/main/resources/db/migration/V0.0.1.022__alter_beatmaps.sql new file mode 100644 index 0000000..d76b580 --- /dev/null +++ b/nise-backend/src/main/resources/db/migration/V0.0.1.022__alter_beatmaps.sql @@ -0,0 +1,2 @@ +ALTER TABLE public.beatmaps + ADD COLUMN last_replay_check text; \ No newline at end of file