PERFORMANCE REPORT · DATABASE MIGRATION
Engineering benchmark · Executive explanation

From seconds to milliseconds

A detailed, URL-by-URL comparison of the old MongoDB platform and the new PostgreSQL platform—what improved, where it improved, how stable it is under the test matrix, and what we should measure next.

Test date: 17 October 202610 user columns per URLMatched URL analysis

The big picture

The same page addresses were tested in both systems. On the matched set, the new PostgreSQL system returns responses much faster on average and shows less variation from one virtual-user column to another.

How I would explain this to leadership: “Before the migration, the average URL response took around two seconds, and some requests hit the 15-second timeout ceiling. After the migration, the average is around four-tenths of a second. That is about five times faster on average. The biggest win is not only speed—it is that the slowest experiences are far less severe and the response pattern is more predictable.”

Think of the old system as a delivery truck that has to collect many boxes from different warehouses, sometimes getting stuck in traffic. The new system is closer to a well-organized express railway: the information is structured, indexed, and retrieved through a more direct route. The analogy describes the observed outcome; the CSV alone cannot prove which internal mechanism caused each slowdown.

What improved

  • Average URL latency reduced substantially.
  • The median URL is now measured in hundreds of milliseconds.
  • The 95th and 99th percentiles are much lower.
  • The 10 user columns are much flatter in PostgreSQL.
  • Previously timed-out URLs are now completing far faster.

What this does not prove yet

  • A specific increase in Google ranking.
  • A guaranteed conversion-rate lift.
  • Five or ten times more requests per second.
  • A specific percentage reduction in cloud spend.
  • That MongoDB alone caused every old-system bottleneck.

Full performance scorecard

These headline metrics use the Average_Time_ms value for each matched URL. Percentiles describe the distribution across URL averages, not all individual HTTP request samples. This keeps the old and new comparisons like-for-like.

MetricMongoDBPostgreSQLChangePlain-English meaning
Important definition: “Latency jitter” in this report means the standard deviation of the ten user-column averages. It is a compact stability indicator for this matrix, not the standard deviation of every individual HTTP request. The full request-cell distributions are shown separately below.

What the latency distribution tells us

Average latency alone can hide slow pages. Percentiles show how the experience changes across the full set of URLs: p50 is the middle URL, p95 means 95% of URL averages are at or below that value, and p99 focuses on the slowest one percent.

Average and percentile comparison

Lower bars are better. Values are milliseconds.

How much latency was removed?

Percentage reduction calculated from old versus new URL-average distributions.

Why the tail matters

The median explains the ordinary experience. The p95 and p99 matter because users do not all visit equally simple pages. A student opening a complex exam syllabus or a college admissions page can experience the slow tail even when the site-wide average looks acceptable. Reducing the tail protects the quality of the experience for those high-friction visits.

Every content category, side by side

This section groups matched URLs by the page type provided in the CSV. It compares the average, median, p95, p99, and maximum URL-average latency so that we can see both typical performance and the outliers within each section.

Average latency by page type

Page typeMatched URLsMongo meanPostgres meanSpeedupReductionMongo p50Postgres p50Mongo p95Postgres p95Mongo maxPostgres max

How to read category results

Speedup is the ratio of old mean latency to new mean latency. A 5× speedup means the old mean took five times as long as the new mean. Percentage reduction measures the fraction of old latency removed. Categories with a small number of URLs—especially News—should be interpreted with caution because a few pages can strongly influence their averages.

What happens across the ten user columns?

The CSV has ten response-time columns per URL. We calculate the mean for User 1 across all matched URLs, then User 2, and so on. If the line rises sharply, later columns are slower in aggregate. A flatter line suggests more consistent latency across this matrix.

Mean latency by virtual-user column

User columnMongo mean (ms)Postgres mean (ms)Difference (ms)Mongo vs U1Postgres vs U1

Old system: the traffic-jam pattern

New system: flatter response pattern

Category-level concurrency

We also compare the User 1 to User 10 drift within each page type. This reveals whether a category remains stable across the ten columns or has a more pronounced rise.

Page typeMongo U1Mongo U10Mongo driftPostgres U1Postgres U10Postgres drift

Timeouts and extreme responses

Some MongoDB user-cell values reach exactly 15,000 ms, which is consistent with a timeout ceiling in the test configuration. We count those cells directly instead of assuming that every slow row timed out.

Interpretation: When a 15-second response becomes a response measured in a few hundred milliseconds, the difference is not a small polish improvement. It changes whether a user can continue browsing naturally or is likely to wait, retry, or abandon the page.

URLs with at least one 15,000 ms MongoDB user-cell value

Page typeURL pathMongo URL avgPostgres URL avgMongo max user cellPostgres max user cellSpeedup

A timeout count refers to individual user cells at or above 15,000 ms, not the number of unique URLs. One URL can contain more than one such cell.

The biggest individual URL wins

The following table ranks URL pairs by old-to-new average latency ratio. It is useful for identifying the most dramatic before-and-after examples and prioritizing regression monitoring.

RankPage typeURL pathMongo avgPostgres avgSpeedupMilliseconds savedReduction

How to use this list

Keep these URLs as regression checks. The highest-speedup pages are not necessarily the most visited pages; combine this list with analytics traffic and business value to decide which routes deserve the strongest performance alerts.

The slowest pages after migration

Good analysis also checks the remaining slow tail. These are the URLs with the highest new-system URL-average latency. They are candidates for targeted query-plan inspection, payload review, cache-hit analysis, or application profiling.

Page typeURL pathMongo avgPostgres avgSpeedupPostgres max user cell
Do not confuse “much faster” with “finished.” A large improvement can still leave an individual page worth optimizing. The next investigation should focus on the highest remaining latency, actual production traffic, and business importance—not simply the biggest speedup ratio.

What likely changed technically

Before: MongoDB data access

On complex pages, the application may have needed to retrieve large documents or combine related records through multiple lookups or aggregation stages. If queries read more data than the page needs, or if the application performs many round trips and transformations, total response time can rise.

  • Large or deeply nested payloads can increase processing work.
  • Multiple lookups can add query complexity.
  • Expensive query plans can use more CPU and memory.
  • High request latency can keep application and database connections occupied longer.

After: PostgreSQL relational queries

A relational design can store related entities in normalized tables, use indexes to locate the relevant rows, and join related data in a planned query. Fetching only the columns and rows the page needs can reduce unnecessary work.

  • Indexes help find matching records efficiently.
  • SQL joins can retrieve relationships in fewer application round trips.
  • Foreign keys help protect data integrity.
  • Query plans and database statistics provide concrete tuning signals.

Where Redis caching fits

Redis can serve repeated cacheable reads quickly and reduce repeated database work. The result depends on cache hit rate, TTL, invalidation correctness, key design, and the amount of data cached. These CSVs do not separate cache hits from misses, so Redis-specific response times or its share of the improvement cannot be calculated from this matrix.

What to verify before assigning root cause

Executive-safe wording: “The migration and the accompanying data-access changes correlate with a major reduction in latency. The next round of profiling will identify how much came from schema design, indexes, query shape, caching, and application changes.”

What this means for users and the business

Search and Core Web Vitals

Lower server response time can help improve Time to First Byte (TTFB), which can support a better Largest Contentful Paint (LCP) when server waiting is a meaningful part of the page load. A 392 ms average benchmark latency is encouraging, but it is not itself a TTFB or LCP measurement. Google’s “good” TTFB guidance is generally 800 ms or less; ranking effects depend on real-user Core Web Vitals, content relevance, competition, and other signals.

Browsing and conversions

Pages that respond in hundreds of milliseconds feel more immediate than pages that take multiple seconds. This can reduce friction as students move between college profiles, courses, fees, exams, and admission details. The exact effect on bounce rate or leads must be measured in the real funnel; this benchmark cannot establish a conversion uplift on its own.

Peak admission seasons

Shorter request durations may reduce how long resources are occupied and give the platform more headroom. But capacity is a throughput question. Run a ramp test and measure requests per second at the target p95 latency, error rate, CPU, memory, database connections, and cache hit ratio before claiming 5×–10× more concurrent students.

Infrastructure costs

Better query efficiency can postpone scaling or allow smaller resource footprints for the same workload, but the CSVs contain no server cost, CPU, memory, or throughput telemetry. Cost savings should be quantified from cloud bills and resource metrics before and after the change.

Recommended measurements after rollout

AreaMeasureWhy it matters
Real-user experienceTTFB, LCP, INP, p75 by template/deviceConfirms whether test gains reach real visitors.
Business funnelLanding-to-detail clicks, lead starts, completed leads, enquiriesConnects performance to business outcomes.
CapacityRequests/second, p95/p99, errors, saturationShows safe traffic headroom.
DatabaseQuery duration, plans, rows scanned, pool waitFinds remaining slow routes and regressions.
CacheHit ratio, miss latency, invalidation correctnessEnsures speed does not come at the cost of stale data.

More ways to read the results

These extra views are calculated from the matched URL records embedded in this report. They help explain not just the average improvement, but how consistently the migration helped across pages.

—
Matched URLs improved
Share of matched routes with lower new-system latency
—
Median URL-level speedup
Typical route speedup, not the ratio of global averages
—
Total measured time saved
Sum of per-URL average latency differences; not a traffic-weighted estimate

How many pages improved?

Share of matched URLs that became faster, stayed similar, or became slower.

Distribution of route speedups

Counts of URLs by speedup band. This shows whether gains were broad or concentrated in a few outliers.

Where the biggest gains sit

Total milliseconds saved across all matched URLs, grouped by page type.

New-system latency bands

Number of matched URLs whose new average response falls within each range.

Interpretation note: the ten virtual users are concurrent samples from this test matrix, not a production traffic forecast. A faster response is a measured result; extra revenue, SEO ranking changes, and safe capacity multipliers require production evidence.

Complete matched URL matrix

This is the detailed appendix: one row per matched URL, with the old and new average latency, speedup, milliseconds saved, percentage reduction, and all ten user-cell values from both systems. Use the search and filters to investigate any page.

URL pathTypeMongo avgPostgres avgSpeedupSaved msReduced %MongoDB User 1–10 (ms)PostgreSQL User 1–10 (ms)

All user values are preserved from the source CSVs where present. Empty cells represent missing/non-numeric values in the source data; they are not converted to zero.

How this analysis was calculated

Scope and limitations: These are benchmark-matrix results, not a guarantee of production experience. Results can be influenced by cache state, network, test sequencing, warm-up, machine load, and URL selection. The test matrix does not by itself prove causality, Google ranking impact, conversion lift, maximum throughput, or cloud cost savings. Those should be measured separately.

Source file reconciliation

CheckValue