(change): localdb performance improvement

This commit is contained in:
2025-10-24 23:24:37 -04:00
parent b06994354f
commit c3195521aa
9 changed files with 27 additions and 21 deletions

View File

@@ -10,7 +10,7 @@ services:
MARIADB_USER: tam3
MARIADB_PASSWORD: tam3
volumes:
- "tam3-db:/var/lib/mysql"
- "tam3-db:/var/lib/mysql:rw,z"
ports:
- 127.0.0.1:3306:3306
adminer:

View File

@@ -0,0 +1,7 @@
export function chunkArray(arr, chunkSize) {
const chunks = [];
for (let i = 0; i < arr.length; i += chunkSize) {
chunks.push(arr.slice(i, i + chunkSize));
}
return chunks;
}

View File

@@ -2,14 +2,7 @@ import { env } from "$env/dynamic/private";
import { db } from "$lib/server/db";
import { prefixes, tickets, baskets } from "$lib/server/db/schema";
import { sql } from "drizzle-orm";
function chunkArray(arr, chunkSize) {
const chunks = [];
for (let i = 0; i < arr.length; i += chunkSize) {
chunks.push(arr.slice(i, i + chunkSize));
}
return chunks;
}
import { chunkArray } from "$lib/server/chunkArray";
export async function GET() {
if (env.TAM3_REMOTE) {

View File

@@ -1,6 +1,8 @@
import { env } from "$env/dynamic/private";
import { db } from "$lib/server/db";
import { sql } from "drizzle-orm";
import { baskets } from "$lib/server/db/schema";
import { chunkArray } from "$lib/server/chunkArray";
export async function GET() {
if (env.TAM3_REMOTE) {
@@ -26,9 +28,9 @@ export async function GET() {
export async function POST({ request }) {
const i_baskets = await request.json();
for (let basket of i_baskets) {
await db.insert(baskets).values({prefix: basket.prefix, b_id: basket.b_id, description: basket.description, donors: basket.donors, winning_ticket: basket.winning_ticket})
.onConflictDoUpdate({target: [baskets.prefix, baskets.b_id], set: {description: basket.description, donors: basket.donors, winning_ticket: basket.winning_ticket}})
for (let basketChunk of chunkArray(i_baskets, 300)) {
await db.insert(baskets).values(basketChunk)
.onConflictDoUpdate({target: [baskets.prefix, baskets.b_id], set: {description: sql`excluded.description`, donors: sql`excluded.donors`, winning_ticket: sql`excluded.winning_ticket`}})
};
if (env.TAM3_REMOTE) {
const res = await fetch(`${env.TAM3_REMOTE}/api/baskets/?api_key=${env.TAM3_REMOTE_KEY}`, {

View File

@@ -1,6 +1,8 @@
import { env } from "$env/dynamic/private";
import { db } from "$lib/server/db";
import { sql } from "drizzle-orm";
import { baskets, combined } from "$lib/server/db/schema";
import { chunkArray } from "$lib/server/chunkArray";
export async function GET() {
if (env.TAM3_REMOTE) {
@@ -21,9 +23,9 @@ export async function GET() {
export async function POST({ request }) {
const r_data = await request.json()
for (let winner of r_data) {
await db.insert(baskets).values({prefix: winner.prefix, b_id: winner.b_id, winning_ticket: winner.winning_ticket})
.onConflictDoUpdate({target: [baskets.prefix, baskets.b_id], set: {winning_ticket: winner.winning_ticket}})
for (let winnerChunk of chunkArray(r_data, 300)) {
await db.insert(baskets).values(winnerChunk)
.onConflictDoUpdate({target: [baskets.prefix, baskets.b_id], set: {winning_ticket: sql`excluded.winning_ticket`}})
}
if (env.TAM3_REMOTE) {
const res = await fetch(`${env.TAM3_REMOTE}/api/combined/?api_key=${env.TAM3_REMOTE_KEY}`, {

View File

@@ -1,6 +1,8 @@
import { db } from "$lib/server/db";
import { sql } from "drizzle-orm";
import { tickets } from "$lib/server/db/schema";
import { env } from "$env/dynamic/private";
import { chunkArray } from "$lib/server/chunkArray";
export async function GET() {
if (env.TAM3_REMOTE) {
@@ -30,9 +32,9 @@ export async function GET() {
export async function POST({ request }) {
const i_tickets = await request.json();
for (let ticket of i_tickets) {
await db.insert(tickets).values({prefix: ticket.prefix, t_id: ticket.t_id, first_name: ticket.first_name, last_name: ticket.last_name, phone_number: ticket.phone_number, preference: ticket.preference})
.onConflictDoUpdate({target: [tickets.prefix, tickets.t_id], set: {first_name: ticket.first_name, last_name: ticket.last_name, phone_number: ticket.phone_number, preference: ticket.preference}});
for (let ticketChunk of chunkArray(i_tickets, 300)) {
await db.insert(tickets).values(ticketChunk)
.onConflictDoUpdate({target: [tickets.prefix, tickets.t_id], set: {first_name: sql`excluded.first_name`, last_name: sql`excluded.last_name`, phone_number: sql`excluded.phone_number`, preference: sql`excluded.preference`}});
};
if (env.TAM3_REMOTE) {
const res = await fetch(`${env.TAM3_REMOTE}/api/tickets/?api_key=${env.TAM3_REMOTE_KEY}`, {

View File

@@ -20,7 +20,7 @@
const functions = {
refreshPage: async () => {
if (current_baskets.length > 0) {
if (current_baskets.filter(basket => basket.changed === true).length > 0) {
functions.saveAll()
}
const res = await fetch(`/api/baskets/${prefix.name}/${pagerForm.id_from}/${pagerForm.id_to}`);

View File

@@ -19,7 +19,7 @@
const functions = {
refreshPage: async () => {
if (current_drawings.length > 0) {
if (current_drawings.filter(drawing => drawing.changed === true).length > 0) {
functions.saveAll()
}
const res = await fetch(`/api/combined/${prefix.name}/${pagerForm.id_from}/${pagerForm.id_to}`);

View File

@@ -19,7 +19,7 @@
const functions = {
refreshPage: async () => {
if (current_tickets.length > 0) {
if (current_tickets.filter(ticket => ticket.changed === true).length > 0) {
functions.saveAll();
};
const res = await fetch(`/api/tickets/${prefix.name}/${pagerForm.id_from}/${pagerForm.id_to}`);