<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hasan</title>
    <description>The latest articles on DEV Community by Hasan (@hasan_c4570ac043fb5681a4b).</description>
    <link>https://dev.to/hasan_c4570ac043fb5681a4b</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3074834%2F9d1241ae-8818-41e0-9110-e6babac9a2c7.jpg</url>
      <title>DEV Community: Hasan</title>
      <link>https://dev.to/hasan_c4570ac043fb5681a4b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hasan_c4570ac043fb5681a4b"/>
    <language>en</language>
    <item>
      <title>How to Self-Host MinIO on Coolify in 2026 (With the Full Admin UI Back)</title>
      <dc:creator>Hasan</dc:creator>
      <pubDate>Fri, 26 Jun 2026 12:07:33 +0000</pubDate>
      <link>https://dev.to/hasan_c4570ac043fb5681a4b/how-to-self-host-minio-on-coolify-in-2026-with-the-full-admin-ui-back-4o3b</link>
      <guid>https://dev.to/hasan_c4570ac043fb5681a4b/how-to-self-host-minio-on-coolify-in-2026-with-the-full-admin-ui-back-4o3b</guid>
      <description>&lt;h2&gt;
  
  
  What happened to MinIO
&lt;/h2&gt;

&lt;p&gt;You only need this because it explains a couple of odd choices below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The community console was stripped to an object browser only. The last release with the full console was RELEASE.2025-04-22.&lt;/li&gt;
&lt;li&gt;MinIO went source-only and stopped publishing Docker images around October 2025. The last published image, RELEASE.2025-09-07, carries an unpatched high-severity security hole (a CVE, the public ID for a known vulnerability). The fix shipped in RELEASE.2025-10-15, which was never published as an official image.&lt;/li&gt;
&lt;li&gt;The minio/minio repo was archived in April 2026, and Coolify dropped it from the catalog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point: &lt;strong&gt;the MinIO server still works perfectly&lt;/strong&gt;. It's the project that's frozen, no patches, no images. So we'll use a patched image someone rebuilt from source, plus a community fork for the UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you'll build
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsoamz6pspt5tzjgln8le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsoamz6pspt5tzjgln8le.png" alt="Coolify Minio Deployment 2026" width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MinIO server is the actual product. Run only this and you have working storage; your apps point at its domain.&lt;/li&gt;
&lt;li&gt;OpenMaxIO console is the admin UI. One thing to know: the console was always a separate program from the server. Think of it as a detachable remote control. Old MinIO just shipped it taped to the box. When MinIO stripped the bundled console, the community forked the last full version as OpenMaxIO. So when the UI looks exactly like the MinIO console you remember, that's because it is that console. Just the complete version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjl1614pa6nsgv8wlqm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjl1614pa6nsgv8wlqm9.png" alt="The payoff at a glance: what MinIO strips (left, object browser only) versus what OpenMaxIO hands back (right), the complete Administrator nav with Identity, Policies, and Access Keys.&lt;br&gt;
" width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's Start: Create it on Coolify
&lt;/h2&gt;

&lt;p&gt;This assumes Coolify is already running. If it isn't, install Coolify first, then come back here.&lt;/p&gt;

&lt;p&gt;In Coolify: open your project, click + New, choose Docker Compose Empty, paste the compose below, and Save. Read the comments. Every odd-looking line is solving a real problem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  minio:
    image: hasanaboulhasan/minio:RELEASE.2025-10-15T17-29-55Z   # mirror of coollabsio's patched build (see note below)
    command: server /data --console-address ":9001"
    environment:
      - SERVICE_FQDN_MINIO_9000
      - MINIO_ROOT_USER=${SERVICE_USER_MINIO}
      - MINIO_ROOT_PASSWORD=${SERVICE_PASSWORD_MINIO}
      # Do NOT set MINIO_BROWSER=off. It hides the Object Browser inside the OpenMaxIO console.
      # Two more env vars are REQUIRED, but add them in Coolify's env UI (see "Add two URL env vars" below), not here.
    volumes:
      - minio-data:/data
    healthcheck:
      test: ["CMD", "mc", "ready", "local"]
      interval: 10s
      timeout: 5s
      retries: 5

  console:
    image: hasanaboulhasan/openmaxio-console:v1.7.6   # prebuilt; swap for your own if you build one
    environment:
      - SERVICE_FQDN_CONSOLE_9090
      - CONSOLE_MINIO_SERVER=http://minio:9000   # internal hop; plain http on the private net is fine
      - CONSOLE_PBKDF_PASSPHRASE=${SERVICE_PASSWORD_PBKDFPASS}
      - CONSOLE_PBKDF_SALT=${SERVICE_PASSWORD_PBKDFSALT}
    # distroless image has no shell, so a healthcheck can't run and would falsely show "unhealthy". Disable it.
    healthcheck:
      disable: true
    depends_on:
      minio:
        condition: service_healthy

volumes:
  minio-data:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quick read of what you just pasted. Two services. minio is the server. console is the OpenMaxIO admin UI, an image I built, since OpenMaxIO ships code but no ready-made image. Both live on my Docker Hub on purpose: if an upstream image disappears, this guide still works. Given this whole saga, that's a real risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set a domain on each service
&lt;/h2&gt;

&lt;p&gt;Point a DNS A-record for each subdomain at your server. Then open each service in Coolify and paste its domain into the Domains field. No port needed. The SERVICE_FQDN_MINIO_9000 and SERVICE_FQDN_CONSOLE_9090 lines in the compose already tell Coolify which port each domain maps to.&lt;/p&gt;

&lt;p&gt;Paste this into the minio service's Domains field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://s3.example.com

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this into the console service's Domains field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://console.example.com

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftzb4bj6y79c72aw4iwk0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftzb4bj6y79c72aw4iwk0.png" alt="Coolify Minio Domains" width="800" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Add two URL env vars (this is the big trap)
&lt;/h2&gt;

&lt;p&gt;tell MinIO its public URL. In Coolify, open your resource, go to Environment Variables, and add these two as literal values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MINIO_SERVER_URL=https://s3.example.com
MINIO_BROWSER_REDIRECT_URL=https://console.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MINIO_SERVER_URL makes signatures validate. It fixes presigned URLs too, same cause. MINIO_BROWSER_REDIRECT_URL is its required companion. Add both in the env UI, not the compose. A Coolify Service Stack doesn't reliably inject literal URL values from the compose file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffqywp7j3pajc5db62kmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffqywp7j3pajc5db62kmu.png" alt="Coolify Minio Envs" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy and log in
&lt;/h2&gt;

&lt;p&gt;Hit Deploy. When it's up, open your console domain. Coolify generated your login and shows it right on the service page, an Admin User and an Admin Password. Copy those in.&lt;/p&gt;

&lt;p&gt;You should now see the full console: buckets, Identity → Users, Policies, Access Keys, Configuration. Everything MinIO removed, back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz76wvdq2ljl0jks8rinj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz76wvdq2ljl0jks8rinj.png" alt="The full console is back: Object Browser plus the complete Administrator nav, Identity, Policies, and Access Keys included.&lt;br&gt;
" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Done!&lt;/p&gt;

&lt;p&gt;That's one service. Real setups run several on one VPS, sharing RAM, SSL, and backups without stepping on each other. That orchestration is the spine of &lt;a href="https://learnwithhasan.com/courses/self-hosting/" rel="noopener noreferrer"&gt;Self Hosting 2.0&lt;/a&gt;. This guide is one self-contained piece of it.&lt;/p&gt;

</description>
      <category>coolify</category>
      <category>s3</category>
      <category>opensource</category>
      <category>selfhosting</category>
    </item>
    <item>
      <title>Who Writes Faster: Mongo or Postgres? I Ran a 1M Record Experiment to Find Out</title>
      <dc:creator>Hasan</dc:creator>
      <pubDate>Tue, 22 Apr 2025 10:25:21 +0000</pubDate>
      <link>https://dev.to/hasan_c4570ac043fb5681a4b/who-writes-faster-mongo-or-postgres-i-ran-a-1m-record-experiment-to-find-out-2f1k</link>
      <guid>https://dev.to/hasan_c4570ac043fb5681a4b/who-writes-faster-mongo-or-postgres-i-ran-a-1m-record-experiment-to-find-out-2f1k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;🚀 I wanted to know: &lt;strong&gt;Which database inserts 1M records faster—MongoDB or PostgreSQL?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
So I built a benchmark pipeline from scratch—and the results surprised me.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💡 Why I Built This
&lt;/h2&gt;

&lt;p&gt;I've always loved both Mongo and Postgres. But when it comes to high-volume writes...&lt;/p&gt;

&lt;p&gt;💭 Which one &lt;em&gt;actually&lt;/em&gt; performs better?&lt;/p&gt;

&lt;p&gt;To find out, I created a controlled benchmark:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installed both on &lt;strong&gt;Docker locally&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Used &lt;strong&gt;realistic e-commerce data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Ran &lt;strong&gt;single&lt;/strong&gt;, &lt;strong&gt;batch&lt;/strong&gt;, and &lt;strong&gt;concurrent&lt;/strong&gt; insert tests&lt;/li&gt;
&lt;li&gt;Collected performance data: insert speed, CPU, memory&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Step 1: Generate Realistic Data
&lt;/h2&gt;

&lt;p&gt;I used Python + Faker to simulate real-world e-commerce activity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50,000 &lt;strong&gt;customers&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;50,000 &lt;strong&gt;products&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;900,000 &lt;strong&gt;orders&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each record includes nested objects, timestamps, and varied fields. Think: preferences, inventory, shipping, JSON blobs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python data_generator.py &lt;span class="nt"&gt;--customers&lt;/span&gt; 50000 &lt;span class="nt"&gt;--products&lt;/span&gt; 50000 &lt;span class="nt"&gt;--orders&lt;/span&gt; 900000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🛠️ Step 2: Run the Benchmark
&lt;/h2&gt;

&lt;p&gt;I tested 3 insertion styles for both Mongo and Postgres:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Single inserts&lt;/strong&gt; – one record at a time
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch inserts&lt;/strong&gt; – 100 to 10,000 records per operation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrent inserts&lt;/strong&gt; – up to 8 threads with batching&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Metrics collected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🕐 Elapsed time&lt;/li&gt;
&lt;li&gt;🔁 Records per second&lt;/li&gt;
&lt;li&gt;🧠 CPU usage&lt;/li&gt;
&lt;li&gt;📦 Memory usage&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚔️ What I Found
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚀 Overall Performance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Avg Throughput (records/sec)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;td&gt;46,012&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;8,900&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MongoDB was &lt;strong&gt;5.17x faster&lt;/strong&gt; on average.&lt;/p&gt;




&lt;h3&gt;
  
  
  📦 Batch Inserts (Customers)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55iz27vojo95br236yap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55iz27vojo95br236yap.png" alt="mongo vs postgresql Batch Inserts" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MongoDB peaked at &lt;strong&gt;78K/sec&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;PostgreSQL topped at &lt;strong&gt;29K/sec&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Batching unlocks massive gains for both—but Mongo scales faster.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧵 Concurrent Inserts (Orders)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffz7p2jqxkjtbpopkbq6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffz7p2jqxkjtbpopkbq6k.png" alt="mongo vs postgresql Concurrent Inserts" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MongoDB: 38K → &lt;strong&gt;110K/sec&lt;/strong&gt; (with 8 threads)&lt;/li&gt;
&lt;li&gt;PostgreSQL: 14.6K/sec (plateaus early)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mongo loves parallelism. Postgres has limits here.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 Single Inserts
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz7qtxui8d0ix4l52pn7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz7qtxui8d0ix4l52pn7.png" alt="mongo vs postgresql Single Inserts" width="800" height="123"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL wins&lt;/strong&gt; in single insert performance
&lt;/li&gt;
&lt;li&gt;Its row-level optimization outperforms Mongo’s write path&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚙️ Resource Usage
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcn6fahpnul4b8nrxqkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcn6fahpnul4b8nrxqkc.png" alt="mongo vs postgresql Resource Usage" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Postgres used less CPU &amp;amp; memory overall&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Mongo burned hotter under concurrency&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 TL;DR: Who Wins?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🏎️ Overall Speed&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎯 Single Inserts&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📦 Batch Scaling&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧵 Concurrency Scaling&lt;/td&gt;
&lt;td&gt;MongoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💡 Resource Efficiency&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🔧 If you need &lt;em&gt;blazing speed&lt;/em&gt;, go MongoDB.&lt;br&gt;&lt;br&gt;
🛡️ If you need &lt;em&gt;strict schema &amp;amp; efficiency&lt;/em&gt;, go PostgreSQL.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧪 Try It Yourself (GitHub Repo)
&lt;/h2&gt;

&lt;p&gt;Want to run your own tests?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the project&lt;/span&gt;
git clone https://github.com/hassancs91/mongo-vs-postgres
&lt;span class="nb"&gt;cd &lt;/span&gt;mongo-vs-postgres-benchmark

&lt;span class="c"&gt;# Start databases&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; mongo &lt;span class="nt"&gt;-p&lt;/span&gt; 27017:27017 mongo
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; postgres &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postgres &lt;span class="nt"&gt;-p&lt;/span&gt; 5432:5432 postgres

&lt;span class="c"&gt;# Generate data&lt;/span&gt;
python data_generator.py &lt;span class="nt"&gt;--customers&lt;/span&gt; 50000 &lt;span class="nt"&gt;--products&lt;/span&gt; 50000 &lt;span class="nt"&gt;--orders&lt;/span&gt; 900000

&lt;span class="c"&gt;# Run benchmarks&lt;/span&gt;
python benchmark.py &lt;span class="nt"&gt;--data-dir&lt;/span&gt; data &lt;span class="nt"&gt;--output-dir&lt;/span&gt; results &lt;span class="nt"&gt;--postgres-host&lt;/span&gt; localhost ...

&lt;span class="c"&gt;# Generate report&lt;/span&gt;
python report_generator.py &lt;span class="nt"&gt;--results-dir&lt;/span&gt; results &lt;span class="nt"&gt;--output-file&lt;/span&gt; results/case_study_report.md &lt;span class="nt"&gt;--charts-dir&lt;/span&gt; results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📁 You’ll get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON results&lt;/li&gt;
&lt;li&gt;PNG charts&lt;/li&gt;
&lt;li&gt;Full Markdown report&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔭 What I'm Testing Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Complex query performance (joins, aggregations)&lt;/li&gt;
&lt;li&gt;Updates and deletes&lt;/li&gt;
&lt;li&gt;Mixed workloads (read + write)&lt;/li&gt;
&lt;li&gt;10M+ record datasets&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Let’s Talk
&lt;/h2&gt;

&lt;p&gt;Which database has performed better for you in real-world write-heavy apps?&lt;br&gt;&lt;br&gt;
Have you ever hit a scaling wall with one of them?&lt;/p&gt;

&lt;p&gt;I'd love to hear your stories 👇&lt;/p&gt;




&lt;p&gt;📥 Full report + visuals + code:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/hassancs91/mongo-vs-postgres" rel="noopener noreferrer"&gt;https://github.com/hassancs91/mongo-vs-postgres&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;🧑‍💻 Happy benchmarking!&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>postgres</category>
      <category>testing</category>
      <category>python</category>
    </item>
  </channel>
</rss>
