| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- const crypto = require('node:crypto')
- const benny = require('benny')
- const { Blob } = require('overleaf-editor-core')
- const mongoBackend = require('../storage/lib/blob_store/mongo')
- const postgresBackend = require('../storage/lib/blob_store/postgres')
- const cleanup = require('../test/acceptance/js/storage/support/cleanup')
- const MONGO_PROJECT_ID = '637386deb4ce3c62acd3848e'
- const POSTGRES_PROJECT_ID = '123'
- async function run() {
- for (const blobCount of [1, 10, 100, 1000, 10000, 100000, 500000]) {
- await cleanup.everything()
- const blobs = createBlobs(blobCount)
- await insertBlobs(blobs)
- const randomHashes = getRandomHashes(blobs, 100)
- await benny.suite(
- `Read a blob in a project with ${blobCount} blobs`,
- benny.add('Mongo backend', async () => {
- await mongoBackend.findBlob(MONGO_PROJECT_ID, randomHashes[0])
- }),
- benny.add('Postgres backend', async () => {
- await postgresBackend.findBlob(POSTGRES_PROJECT_ID, randomHashes[0])
- }),
- benny.cycle(),
- benny.complete()
- )
- await benny.suite(
- `Read 100 blobs in a project with ${blobCount} blobs`,
- benny.add('Mongo backend', async () => {
- await mongoBackend.findBlobs(MONGO_PROJECT_ID, randomHashes)
- }),
- benny.add('Postgres backend', async () => {
- await postgresBackend.findBlobs(POSTGRES_PROJECT_ID, randomHashes)
- }),
- benny.cycle(),
- benny.complete()
- )
- await benny.suite(
- `Insert a blob in a project with ${blobCount} blobs`,
- benny.add('Mongo backend', async () => {
- const [newBlob] = createBlobs(1)
- await mongoBackend.insertBlob(MONGO_PROJECT_ID, newBlob)
- }),
- benny.add('Postgres backend', async () => {
- const [newBlob] = createBlobs(1)
- await postgresBackend.insertBlob(POSTGRES_PROJECT_ID, newBlob)
- }),
- benny.cycle(),
- benny.complete()
- )
- }
- }
- function createBlobs(blobCount) {
- const blobs = []
- for (let i = 0; i < blobCount; i++) {
- const hash = crypto.randomBytes(20).toString('hex')
- blobs.push(new Blob(hash, 42, 42))
- }
- return blobs
- }
- async function insertBlobs(blobs) {
- for (const blob of blobs) {
- await Promise.all([
- mongoBackend.insertBlob(MONGO_PROJECT_ID, blob),
- postgresBackend.insertBlob(POSTGRES_PROJECT_ID, blob),
- ])
- }
- }
- function getRandomHashes(blobs, count) {
- const hashes = []
- for (let i = 0; i < count; i++) {
- const index = Math.floor(Math.random() * blobs.length)
- hashes.push(blobs[index].getHash())
- }
- return hashes
- }
- module.exports = run
|