()
| 304 | } |
| 305 | |
| 306 | async function runBenchmark() { |
| 307 | const numWorkers = Math.max(1, Math.floor(cpus().length / 2)); |
| 308 | const totalRows = stats.microdollar_usage.total_rows; |
| 309 | const dedup = stats.deduplication_tables; |
| 310 | |
| 311 | console.log( |
| 312 | `Starting benchmark with ${numWorkers} worker threads, ${TOTAL_RECORDS} total records` |
| 313 | ); |
| 314 | console.log(`Each worker will insert ~${Math.floor(TOTAL_RECORDS / numWorkers)} records`); |
| 315 | |
| 316 | // Truncate tables before benchmark |
| 317 | await truncateTables(); |
| 318 | |
| 319 | // Calculate scaled user count |
| 320 | const scaledUserCount = scaleUniqueCount(stats.microdollar_usage.unique_user_count, totalRows); |
| 321 | console.log( |
| 322 | `Scaled user count: ${scaledUserCount} (from ${stats.microdollar_usage.unique_user_count} unique users in ${totalRows} rows)` |
| 323 | ); |
| 324 | |
| 325 | // Create test users |
| 326 | const userIds = await createTestUsers(scaledUserCount); |
| 327 | |
| 328 | // Generate unique pools |
| 329 | console.log('Generating unique value pools...'); |
| 330 | const uniquePools: UniquePools = { |
| 331 | userAgents: generateStringPool( |
| 332 | dedup.http_user_agent_count, |
| 333 | dedup.http_user_agent_avg_len, |
| 334 | dedup.http_user_agent_min_len, |
| 335 | dedup.http_user_agent_max_len, |
| 336 | totalRows |
| 337 | ), |
| 338 | ips: generateStringPool( |
| 339 | dedup.http_ip_count, |
| 340 | dedup.http_ip_avg_len, |
| 341 | dedup.http_ip_min_len, |
| 342 | dedup.http_ip_max_len, |
| 343 | totalRows |
| 344 | ), |
| 345 | countries: generateStringPool( |
| 346 | dedup.vercel_ip_country_count, |
| 347 | dedup.vercel_ip_country_avg_len, |
| 348 | dedup.vercel_ip_country_min_len, |
| 349 | dedup.vercel_ip_country_max_len, |
| 350 | totalRows |
| 351 | ), |
| 352 | cities: generateStringPool( |
| 353 | dedup.vercel_ip_city_count, |
| 354 | dedup.vercel_ip_city_avg_len, |
| 355 | dedup.vercel_ip_city_min_len, |
| 356 | dedup.vercel_ip_city_max_len, |
| 357 | totalRows |
| 358 | ), |
| 359 | ja4Digests: generateStringPool( |
| 360 | dedup.ja4_digest_count, |
| 361 | dedup.ja4_digest_avg_len, |
| 362 | dedup.ja4_digest_min_len, |
| 363 | dedup.ja4_digest_max_len, |
no test coverage detected