Failed atempt for DB Multithread...
This commit is contained in:
parent
36ecb5c6a7
commit
c237c83917
3
index.js
3
index.js
|
@ -10,6 +10,7 @@ import sqlite2mongo from './libs/database/sqlite2mongo.js'
|
||||||
import databaseInit from './libs/database/init.js'
|
import databaseInit from './libs/database/init.js'
|
||||||
import initLog from './libs/utils/log.js'
|
import initLog from './libs/utils/log.js'
|
||||||
import api from './api/api.js'
|
import api from './api/api.js'
|
||||||
|
import multihreadTest from './tests/multihread.test.js'
|
||||||
|
|
||||||
const log = initLog("[ MAIN ]")
|
const log = initLog("[ MAIN ]")
|
||||||
|
|
||||||
|
@ -25,4 +26,6 @@ await databaseInit()
|
||||||
if (process.env.LOAD_DB === "true")
|
if (process.env.LOAD_DB === "true")
|
||||||
await sqlite2mongo()
|
await sqlite2mongo()
|
||||||
|
|
||||||
|
multihreadTest()
|
||||||
|
|
||||||
Server.listen(process.env.PORT, () => log(`Server started and listening on port ${process.env.PORT}.`))
|
Server.listen(process.env.PORT, () => log(`Server started and listening on port ${process.env.PORT}.`))
|
|
@ -14,6 +14,8 @@ export function initWorkers(threads) {
|
||||||
name: `Worker ${parseInt(i) + 1}`
|
name: `Worker ${parseInt(i) + 1}`
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(`Initialised ${threads} workers!`)
|
||||||
}
|
}
|
||||||
|
|
||||||
let spreadIndex = 0
|
let spreadIndex = 0
|
||||||
|
@ -27,7 +29,7 @@ export function spread(script, data) {
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
|
||||||
worker.once('message', result => resolve(result))
|
worker.on('message', result => resolve(result))
|
||||||
|
|
||||||
++spreadIndex
|
++spreadIndex
|
||||||
if(spreadIndex >= workerFarm.length)
|
if(spreadIndex >= workerFarm.length)
|
||||||
|
|
24
libs/utils/multithread/db.test.js
Normal file
24
libs/utils/multithread/db.test.js
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import Finish from '../../../schemas/Finish-copy.js'
|
||||||
|
import initLog from '../log.js'
|
||||||
|
|
||||||
|
const log = initLog('DB TEST')
|
||||||
|
|
||||||
|
export function main(data) {
|
||||||
|
return new Promise(
|
||||||
|
(resolve, reject) => {
|
||||||
|
const {err, finish} = data
|
||||||
|
|
||||||
|
Finish.create({
|
||||||
|
map: finish.Map,
|
||||||
|
time: finish.Time,
|
||||||
|
date: finish.Timestamp === '0000-00-00 00:00:00' ? new Date('January 1, 1970 00:00:00 UTC') : new Date(`${finish.Timestamp}+00:00`),
|
||||||
|
serverLocation: finish.Server ?? '',
|
||||||
|
player: finish.Name
|
||||||
|
}).then(() => {
|
||||||
|
log(`Added finish ~/~ -> At ${finish.Timestamp} «${finish.Name}» completed «${finish.Map}» in ${finish.Time} s`)
|
||||||
|
})
|
||||||
|
|
||||||
|
resolve(true)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
17
schemas/Finish-copy.js
Normal file
17
schemas/Finish-copy.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
import mongoose from 'mongoose'
|
||||||
|
|
||||||
|
const Finish = new mongoose.Schema({
|
||||||
|
map: String,
|
||||||
|
time: Number,
|
||||||
|
date: Date,
|
||||||
|
serverLocation: String,
|
||||||
|
player: String
|
||||||
|
})
|
||||||
|
|
||||||
|
Finish.index({ player: 1, map: 1 })
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This cotains the mongoose 'Finish' model.
|
||||||
|
* @module schemas/Finish
|
||||||
|
*/
|
||||||
|
export default mongoose.model("Finish-Copy", Finish)
|
|
@ -1,21 +1,34 @@
|
||||||
import { initWorkers, spread } from '../libs/utils/multithread.js'
|
import { initWorkers, spread } from '../libs/utils/multithread.js'
|
||||||
|
import { sqlite } from '../libs/database/init.js'
|
||||||
|
import Finish from '../schemas/Finish-copy.js'
|
||||||
|
import initLog from '../libs/utils/log.js'
|
||||||
|
|
||||||
initWorkers(10)
|
const log = initLog("sqlite2mongo")
|
||||||
|
|
||||||
let processes = 20
|
initWorkers(6)
|
||||||
let ran = 0
|
|
||||||
for (let i = 0; i < processes; ++i) {
|
export default async function() {
|
||||||
spread(
|
log("Checking for new finishes...")
|
||||||
'./fibonacci.js',
|
|
||||||
{}
|
await Finish.deleteMany({})
|
||||||
).then(
|
|
||||||
result => {
|
let offset = -1
|
||||||
console.log(i)
|
while (offset < 10000000) {
|
||||||
|
await sqlite.each(
|
||||||
++ran
|
`SELECT * FROM race ORDER BY Timestamp LIMIT 5000 OFFSET ${offset + 1}`,
|
||||||
if (ran === processes) {
|
[],
|
||||||
process.exit(0)
|
(err, finish) => {
|
||||||
|
spread(
|
||||||
|
'./db.test.js',
|
||||||
|
{
|
||||||
|
err,
|
||||||
|
finish,
|
||||||
|
}
|
||||||
|
).then(
|
||||||
|
result => {}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
)
|
||||||
)
|
offset += 5000
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user