<?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>Forem: Vishad Patel</title>
    <description>The latest articles on Forem by Vishad Patel (@vishad_patel_f54e007e16e5).</description>
    <link>https://forem.com/vishad_patel_f54e007e16e5</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1632195%2F2e0619f6-c880-4364-8da1-87e0a9e412a5.png</url>
      <title>Forem: Vishad Patel</title>
      <link>https://forem.com/vishad_patel_f54e007e16e5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vishad_patel_f54e007e16e5"/>
    <language>en</language>
    <item>
      <title>Hibernate Performance: Boost High-Volume Queries with Read-Only Sessions</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sat, 06 Sep 2025 12:00:14 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/hibernate-performance-boost-high-volume-queries-with-read-only-sessions-2jpn</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/hibernate-performance-boost-high-volume-queries-with-read-only-sessions-2jpn</guid>
      <description>&lt;p&gt;Most developers working with Hibernate rely on the &lt;strong&gt;default&lt;/strong&gt; Session, which comes with a built-in persistence context (a first-level cache). This persistence context is great for &lt;strong&gt;tracking loaded entities, detecting changes, and managing dirty checking&lt;/strong&gt;—all essential for read-write operations.&lt;/p&gt;

&lt;p&gt;But here’s the catch: for &lt;strong&gt;read-intensive workloads&lt;/strong&gt; like reporting dashboards, analytics queries, or large-scale data exports, this persistence context becomes a performance bottleneck. Hibernate ends up doing a lot of unnecessary bookkeeping even though we’re not modifying any data.&lt;/p&gt;

&lt;p&gt;That’s where read-only sessions come into play.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 How Read-Only Sessions Work
&lt;/h3&gt;

&lt;p&gt;By enabling read-only mode (session.setDefaultReadOnly(true)), Hibernate can skip several expensive operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No snapshot tracking&lt;/strong&gt; → Hibernate won’t keep a copy of the original entity state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No dirty checking&lt;/strong&gt; → The session doesn’t scan for modifications before committing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced memory footprint&lt;/strong&gt; → Entities aren’t held in the persistence context long-term.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, Hibernate treats your session as a fire-and-forget data reader, rather than preparing for updates that will never happen.&lt;/p&gt;

&lt;p&gt;Here’s the optimal way to implement it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Session session = sessionFactory
        .withOptions()
        .flushMode(FlushMode.MANUAL)  // Gives you full control
        .readOnly(true)
        .openSession();

try {
    List&amp;lt;Employee&amp;gt; employees = session
            .createQuery("FROM Employee e WHERE e.department = :dept", Employee.class)
            .setParameter("dept", "SALES")
            .setHint("org.hibernate.readOnly", true)  // Explicit for clarity
            .setTimeout(30)  // Safety: prevent long-running queries
            .list();

    return employees;
} finally {
    session.close();  // Always clean up resources
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📊 Real-World Production Impact
&lt;/h3&gt;

&lt;p&gt;To see why this matters, let’s look at a fintech system processing 50,000+ transactions per hour.&lt;/p&gt;

&lt;p&gt;After implementing read-only sessions for reporting endpoints, the team observed:&lt;/p&gt;

&lt;p&gt;✅ 40% lower heap memory usage – no persistence context overhead.&lt;/p&gt;

&lt;p&gt;✅ Response time dropped from 1.5s → 300ms – dirty checking bypassed.&lt;/p&gt;

&lt;p&gt;✅ 25% fewer GC pauses – fewer objects retained in memory.&lt;/p&gt;

&lt;p&gt;That’s not just a micro-optimization; it’s a production-grade improvement that directly impacts customer experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠 When to Use Read-Only Sessions
&lt;/h3&gt;

&lt;p&gt;Read-only sessions aren’t meant for every use case. They shine when you’re only fetching data, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reporting and analytics dashboards&lt;/li&gt;
&lt;li&gt;Data export functionality (Excel, CSV, PDFs)&lt;/li&gt;
&lt;li&gt;Loading reference data (countries, currencies, user roles, etc.)&lt;/li&gt;
&lt;li&gt;Any operation where no entity modifications are required&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚡ Final Thoughts
&lt;/h3&gt;

&lt;p&gt;If you’re building reporting-heavy applications or handling large-scale read queries, relying on Hibernate’s default session can silently eat up memory and CPU.&lt;/p&gt;

&lt;p&gt;By switching to read-only sessions, you not only cut down on unnecessary overhead but also unlock significant performance gains that your end-users will notice immediately.&lt;/p&gt;

&lt;p&gt;This small configuration tweak can be the difference between laggy dashboards and snappy real-time insights.&lt;/p&gt;

&lt;p&gt;👉 If you found this helpful, consider following me for more Hibernate and backend performance optimization tips. You can also check out my original article here: &lt;a href="https://medium.com/javarevisited/hibernate-performance-optimization-part-2-production-grade-tricks-you-probably-missed-ec2b4bfc1116" rel="noopener noreferrer"&gt;7 Hibernate Performance Techniques That Saved Our Production Apps&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hibernate</category>
      <category>performance</category>
      <category>java</category>
      <category>sql</category>
    </item>
    <item>
      <title>MySQL &amp; PostgreSQL Performance: The Hidden Cost of Using Functions on Indexed Columns</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Fri, 05 Sep 2025 17:07:05 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/mysql-postgresql-performance-the-hidden-cost-of-using-functions-on-indexed-columns-5h5b</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/mysql-postgresql-performance-the-hidden-cost-of-using-functions-on-indexed-columns-5h5b</guid>
      <description>&lt;h3&gt;
  
  
  🚨 Problem:
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;common mistake in SQL queries&lt;/strong&gt; is applying functions like LOWER(), UPPER(), TRIM(), or DATE() directly on indexed columns. When you do this, &lt;strong&gt;the database engine cannot use the index efficiently&lt;/strong&gt;, because the expression inside the WHERE clause no longer matches the indexed column. This leads to full table scans, increased CPU usage, and slow response times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example of an inefficient query:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM users 
WHERE LOWER(email) = 'admin@example.com';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if there's a standard index on the email column, this query bypasses the index because the function wraps the column, changing how it's evaluated.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Optimized Solution: Use Functional Indexes or Preprocessed Columns
&lt;/h3&gt;

&lt;p&gt;To retain the benefit of indexing while still performing function-based lookups, you should create an index on the expression itself (called a &lt;strong&gt;functional or expression-based index&lt;/strong&gt;, depending on the RDBMS):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- PostgreSQL or Oracle-style functional index
CREATE INDEX idx_lower_email ON users(LOWER(email));

-- Optimized query

SELECT * FROM users 
WHERE LOWER(email) = 'admin@example.com';

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

&lt;/div&gt;



&lt;p&gt;Now, the database uses the index because it matches the expression exactly.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;em&gt;🔍 Note: MySQL (prior to 8.0) does not support functional indexes directly. In those cases, you can store a preprocessed column (email_lower) and index that instead.&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ Technical Insight:
&lt;/h3&gt;

&lt;p&gt;When a function like LOWER(email) is used in a query:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The database must apply the function to every row in the table&lt;/li&gt;
&lt;li&gt;This prevents index seek and forces an index scan or table scan&lt;/li&gt;
&lt;li&gt;On large tables (e.g., millions of users), this can be 10x slower than using a proper functional index&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;With a functional index&lt;/strong&gt;, the expression is precomputed and indexed, so the database can use a fast B-tree lookup instead of evaluating the function at runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  📈 Real-Life Use Case:
&lt;/h3&gt;

&lt;p&gt;Imagine a high-traffic login system where user emails are matched case-insensitively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM users 
WHERE LOWER(email) = LOWER($1);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Without functional indexing, this becomes a bottleneck:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slower logins under high concurrency&lt;/li&gt;
&lt;li&gt;Backend latency spikes&lt;/li&gt;
&lt;li&gt;Increased DB load during peak hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;With a LOWER(email) index:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instant case-insensitive lookups&lt;/li&gt;
&lt;li&gt;Fast auto-suggestions for email fields&lt;/li&gt;
&lt;li&gt;Secure and consistent login UX&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 Advanced Tip:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;In PostgreSQL:&lt;/strong&gt;&lt;br&gt;
Use citext (case-insensitive text) if many columns require case-insensitive comparisons&lt;br&gt;
Or combine expression indexes with UNIQUE constraints for login validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE UNIQUE INDEX idx_lower_email_unique ON users(LOWER(email));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Bonus Thought:
&lt;/h3&gt;

&lt;p&gt;Functional indexes aren't just for text. They're powerful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Date truncation: DATE(created_at)&lt;/li&gt;
&lt;li&gt;Numeric rounding: ROUND(price, 2)&lt;/li&gt;
&lt;li&gt;Normalized values: TRIM(LOWER(name))&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Always profile your queries using EXPLAIN to confirm index usage and avoid silent performance hits.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you found these SQL join optimization techniques helpful, please give this post a like! For a deeper dive into each technique, including real-world query fixes and more examples, I invite you to read the full article on Medium: &lt;a href="https://medium.com/@pat.vishad/10-sql-join-optimization-techniques-every-backend-developer-should-know-with-real-query-fixes-87c2506ad5bf" rel="noopener noreferrer"&gt;10 SQL Join Optimization Techniques Every Backend Developer Should Know&lt;/a&gt;. Don't forget to subscribe to my Medium for more backend development insights!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you enjoyed this article, don’t forget to &lt;strong&gt;like ❤️, share 🔄, and subscribe 🔔&lt;/strong&gt; so you never miss future updates!&lt;/p&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>mysql</category>
      <category>performance</category>
    </item>
    <item>
      <title>Unlock Faster Queries: A Guide to Composite Indexes in MySQL &amp; PostgreSQL</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Fri, 05 Sep 2025 16:10:39 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/use-composite-indexes-matching-query-patterns-12mp</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/use-composite-indexes-matching-query-patterns-12mp</guid>
      <description>&lt;h2&gt;
  
  
  🚨 Problem:
&lt;/h2&gt;

&lt;p&gt;When your SQL queries involve filtering and sorting using multiple columns, relying on individual (single-column) indexes often causes the database to ignore those indexes — or worse, perform a full table scan. This results in slower performance, especially on large datasets.&lt;/p&gt;

&lt;p&gt;Let’s say you’re running this query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM users 
WHERE country = 'US' AND age &amp;gt; 30 
ORDER BY age;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you only have individual indexes on country and age, the query planner may not efficiently combine them—leading to high disk I/O and CPU usage as the engine scans more rows than necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Solution: Use a Composite Index That Mirrors the Query Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To optimize this type of query, create a &lt;strong&gt;composite (multi-column) index&lt;/strong&gt; that aligns exactly with the filtering (WHERE) and sorting (ORDER BY) clauses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE INDEX idx_users_country_age 
ON users(country, age);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This index tells the database engine to store records sorted by country and age, which allows it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter by country&lt;/li&gt;
&lt;li&gt;Use the index to quickly find rows where age &amp;gt; 30&lt;/li&gt;
&lt;li&gt;Return results already sorted by age, eliminating the need for an additional sort step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Technical Explanation (For Advanced Users):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In most relational databases like PostgreSQL, MySQL, or Oracle, &lt;strong&gt;composite indexes work left-to-right, meaning the index is only used efficiently when queries filter on the first column (and optionally the subsequent columns)&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WHERE country = 'US' AND age &amp;gt; 30 uses the index fully&lt;/li&gt;
&lt;li&gt;WHERE age &amp;gt; 30 alone won’t use this index efficiently, because age is the second column&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, the optimizer can use the &lt;strong&gt;index scan + index-only scan combination&lt;/strong&gt; if all requested columns are part of the index — further improving performance by avoiding table lookups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📈 Real-Life Use Case:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine a SaaS admin dashboard where product managers often filter users based on region (country) and age group to target demographics or generate usage reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without composite indexes:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Loading such filtered lists becomes sluggish&lt;/li&gt;
&lt;li&gt;Backend API response time increases&lt;/li&gt;
&lt;li&gt;Pagination and sorting add extra load&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;With the proper composite index:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Filtering and sorting happen within the index tree&lt;/li&gt;
&lt;li&gt;Query latency drops significantly&lt;/li&gt;
&lt;li&gt;APIs remain responsive even under high traffic&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;💡 Bonus Tip:&lt;/strong&gt;&lt;br&gt;
Always analyze your most frequent query patterns before adding composite indexes. &lt;strong&gt;Too many unused indexes can slow down writes and increase storage usage.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use tools like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EXPLAIN in PostgreSQL&lt;/li&gt;
&lt;li&gt;EXPLAIN ANALYZE in MySQL&lt;/li&gt;
&lt;li&gt;Query Analyzer in SQL Server
To verify if your indexes are actually used by the optimizer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;If you found these SQL join optimization techniques helpful, please give this post a like! For a deeper dive into each technique, including real-world query fixes and more examples, I invite you to read the full article on Medium: &lt;a href="https://medium.com/@pat.vishad/10-sql-join-optimization-techniques-every-backend-developer-should-know-with-real-query-fixes-87c2506ad5bf" rel="noopener noreferrer"&gt;10 SQL Join Optimization Techniques Every Backend Developer Should Know&lt;/a&gt;. Don't forget to subscribe to my Medium for more backend development insights!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you enjoyed this article, don’t forget to &lt;strong&gt;like ❤️, share 🔄, and subscribe 🔔&lt;/strong&gt; so you never miss future updates!&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>postgres</category>
      <category>mysql</category>
    </item>
    <item>
      <title>Unlock High-Performance Node.js: 10 Advanced Techniques for Senior Engineers</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Fri, 04 Jul 2025 16:46:07 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/unlock-high-performance-nodejs-10-advanced-techniques-for-senior-engineers-41fo</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/unlock-high-performance-nodejs-10-advanced-techniques-for-senior-engineers-41fo</guid>
      <description>&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%2Foyls18g2ri1xz3leh358.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%2Foyls18g2ri1xz3leh358.png" alt="Node.js: 10 Advanced Techniques for Senior Engineers" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Struggling with Node.js memory leaks or JavaScript performance bottlenecks? Discover 10 battle-tested techniques senior engineers use to optimize mission-critical systems. From stream backpressure handling and worker thread optimization to protocol buffer integration and graceful Kubernetes shutdowns, these production-proven patterns reduced memory usage by 83% and API response times by 5x at Fortune 500 companies. Whether you’re processing 10GB files or hardening security, these under-documented strategies solve real-world challenges that most tutorials ignore.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@pat.vishad/unlock-high-performance-node-js-10-advanced-techniques-for-senior-engineers-cdbd65ddf216" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>programming</category>
      <category>learning</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Master Your Database: Top 10 Advanced Techniques for Efficient Data Storage in PostgreSQL/RDBMS</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Fri, 04 Jul 2025 16:40:56 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/master-your-database-top-10-advanced-techniques-for-efficient-data-storage-in-postgresqlrdbms-567l</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/master-your-database-top-10-advanced-techniques-for-efficient-data-storage-in-postgresqlrdbms-567l</guid>
      <description>&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%2Fwirhbpfqemlygzwuk7dz.jpg" 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%2Fwirhbpfqemlygzwuk7dz.jpg" alt="Top 10 Advanced Techniques for Efficient Data Storage in PostgreSQL/RDBMS" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
In today’s data-driven landscape, efficiently storing information in PostgreSQL or any RDBMS isn’t just about basic indexing or normalization — it’s about mastering nuanced techniques that transform performance bottlenecks into seamless workflows. While generic tips flood social media, true efficiency lies in strategies often overlooked by developers and DBAs. This article dives deep into 10 advanced, battle-tested methods to optimize data storage, reduce latency, and slash costs. Whether you’re scaling high-traffic fintech systems or managing IoT sensor networks, these insights — rooted in real-world scenarios — will elevate your database game beyond conventional wisdom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@pat.vishad/master-your-database-top-10-advanced-techniques-for-efficient-data-storage-in-postgresql-rdbms-ab971c153716" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>postgres</category>
      <category>performance</category>
      <category>programming</category>
    </item>
    <item>
      <title>10 Unconventional Express.js Secrets Senior Engineers Swear By (That Most Blogs Ignore)</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Fri, 04 Jul 2025 16:37:43 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/10-unconventional-expressjs-secrets-senior-engineers-swear-by-that-most-blogs-ignore-5cok</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/10-unconventional-expressjs-secrets-senior-engineers-swear-by-that-most-blogs-ignore-5cok</guid>
      <description>&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%2Fffk50ttelwjxq5sxzmev.jpg" 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%2Fffk50ttelwjxq5sxzmev.jpg" alt="Expressjs nodejs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While most Express.js tutorials teach you to app.get() and app.post(), critical performance pitfalls lurk in production that nobody talks about. After optimizing 50+ Node.js APIs handling 100k+ RPM, I’ve discovered obscure techniques that reduce memory leaks by 73%, slash response times by 300ms, and prevent midnight outages. In this no-fluff guide, you’ll learn the untold secrets senior engineers use at Fortune 500 companies – from dependency injection for A/B testing to streaming 10GB payloads without OOM crashes. Forget basic middleware tutorials; these are the production-proven strategies most developers learn only after catastrophic failures.&lt;br&gt;
&lt;a href="https://medium.com/@pat.vishad/10-unconventional-express-js-secrets-senior-engineers-swear-by-that-most-blogs-ignore-0bf5d673f6ab" rel="noopener noreferrer"&gt;Read more&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>programming</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Secure Your Node.js App in Minutes with Two-Factor Authentication</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sun, 29 Jun 2025 17:02:01 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/secure-your-nodejs-app-in-minutes-with-two-factor-authentication-19ll</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/secure-your-nodejs-app-in-minutes-with-two-factor-authentication-19ll</guid>
      <description>&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%2Fo5jd0k59brs9491a0is3.webp" 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%2Fo5jd0k59brs9491a0is3.webp" alt="2FA Node.js Authentication Cyber security" width="800" height="508"&gt;&lt;/a&gt;&lt;br&gt;
Ever wonder why tech giants and cybersecurity experts insist on Two-Factor Authentication (2FA)? In today’s digital world, where passwords are easily compromised and data breaches are all too common, relying on a password alone is no longer enough. Two-Factor Authentication adds a critical layer of protection—so even if your password gets stolen, your account stays secure. Whether you're a casual user or managing sensitive business data, understanding how 2FA works—and why it matters—can be the difference between peace of mind and panic. Let’s break it down in a way that’s simple, practical, and immediately useful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@pat.vishad/boost-node-js-security-a-guide-to-two-factor-authentication-001db754d40f" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>cybersecurity</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>🚀 Tired of Slow Queries? Use CQRS with PostgreSQL to Split Reads &amp; Writes</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sun, 29 Jun 2025 17:01:25 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/tired-of-slow-queries-use-cqrs-with-postgresql-to-split-reads-writes-466e</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/tired-of-slow-queries-use-cqrs-with-postgresql-to-split-reads-writes-466e</guid>
      <description>&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%2F7jrq3rqjpzccttkjpxic.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%2F7jrq3rqjpzccttkjpxic.png" alt="PostgreSQL &amp;amp; CQRS NestJS" width="800" height="422"&gt;&lt;/a&gt;&lt;br&gt;
In this article, we’ll explain a very practical and beginner-friendly design pattern used in high-scale systems: splitting your database into read and write nodes, also known as Read/Write Splitting. We’ll understand why this is needed, and then implement it step by step using TypeORM and PostgreSQL.&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://medium.com/@pat.vishad/a-beginners-guide-to-splitting-read-and-write-nodes-in-a-database-using-cqrs-with-typeorm-106db165ad14" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>database</category>
      <category>postgres</category>
    </item>
    <item>
      <title>🔥 10 JavaScript/TypeScript Techniques That Go Beyond async/await</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sun, 29 Jun 2025 06:01:31 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/10-javascripttypescript-techniques-that-go-beyond-asyncawait-26j0</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/10-javascripttypescript-techniques-that-go-beyond-asyncawait-26j0</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vishad_patel_f54e007e16e5/beyond-asyncawait-10-advanced-jsts-techniques-senior-engineers-use-h8f" class="crayons-story__hidden-navigation-link"&gt;Beyond async/await: 10 Advanced JS/TS Techniques Senior Engineers Use&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vishad_patel_f54e007e16e5" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1632195%2F2e0619f6-c880-4364-8da1-87e0a9e412a5.png" alt="vishad_patel_f54e007e16e5 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vishad_patel_f54e007e16e5" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vishad Patel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vishad Patel
                
              
              &lt;div id="story-author-preview-content-2633230" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vishad_patel_f54e007e16e5" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1632195%2F2e0619f6-c880-4364-8da1-87e0a9e412a5.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vishad Patel&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vishad_patel_f54e007e16e5/beyond-asyncawait-10-advanced-jsts-techniques-senior-engineers-use-h8f" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vishad_patel_f54e007e16e5/beyond-asyncawait-10-advanced-jsts-techniques-senior-engineers-use-h8f" id="article-link-2633230"&gt;
          Beyond async/await: 10 Advanced JS/TS Techniques Senior Engineers Use
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwaredevelopment"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwaredevelopment&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vishad_patel_f54e007e16e5/beyond-asyncawait-10-advanced-jsts-techniques-senior-engineers-use-h8f" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vishad_patel_f54e007e16e5/beyond-asyncawait-10-advanced-jsts-techniques-senior-engineers-use-h8f#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>Mastering GitHub: Best Practices for Seamless Team Collaboration and Workflow Efficiency</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sat, 28 Jun 2025 19:30:00 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/mastering-github-best-practices-for-seamless-team-collaboration-and-workflow-efficiency-34cb</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/mastering-github-best-practices-for-seamless-team-collaboration-and-workflow-efficiency-34cb</guid>
      <description>&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%2Fkjhzy7s3ft0w31m9gf2c.webp" 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%2Fkjhzy7s3ft0w31m9gf2c.webp" alt="Github Gitlab Version Control Programming" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
GitHub is one of the most widely used version control systems in the world, and for a good reason — it’s powerful, reliable, and facilitates seamless collaboration across teams. But as your projects grow, so does the complexity of managing them. That’s where best practices come into play.&lt;/p&gt;

&lt;p&gt;In this article, we’ll explore key GitHub best practices to help you keep your projects organized, secure, and running smoothly. Whether you’re part of a small team or managing a large open-source project, these guidelines will help you get the most out of GitHub.&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://medium.com/@pat.vishad/master-github-best-practices-for-efficient-collaboration-90d2c4a1f4b2" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>programming</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>🛡️ Put Your NestJS App Under the Microscope: Real-Time Monitoring with Sentry</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sat, 28 Jun 2025 13:29:45 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/put-your-nestjs-app-under-the-microscope-real-time-monitoring-with-sentry-3g2j</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/put-your-nestjs-app-under-the-microscope-real-time-monitoring-with-sentry-3g2j</guid>
      <description>&lt;p&gt;In production, even the smallest unhandled exception can lead to poor user experience or service downtime. Sentry, a powerful open-source tool, provides real-time error tracking, stack traces, user context, breadcrumbs, and performance telemetry — all vital for maintaining uptime and confidence in your NestJS backend.&lt;/p&gt;

&lt;p&gt;My article explains how to integrate Sentry into a NestJS application with a production-ready architecture.&lt;br&gt;
📖 &lt;a href="https://medium.com/@pat.vishad/%EF%B8%8F-production-ready-sentry-integration-in-nestjs-error-monitoring-observability-at-scale-8b3dfb0ce98d" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>programming</category>
      <category>beginners</category>
      <category>node</category>
    </item>
    <item>
      <title>Why Your Swagger Docs Suck (And How to Fix Them in NestJS)</title>
      <dc:creator>Vishad Patel</dc:creator>
      <pubDate>Sat, 28 Jun 2025 13:17:37 +0000</pubDate>
      <link>https://forem.com/vishad_patel_f54e007e16e5/why-your-swagger-docs-suck-and-how-to-fix-them-in-nestjs-58ao</link>
      <guid>https://forem.com/vishad_patel_f54e007e16e5/why-your-swagger-docs-suck-and-how-to-fix-them-in-nestjs-58ao</guid>
      <description>&lt;p&gt;If you’re like most teams, your Swagger docs are a mess. They’re either outdated, too generic, or just a checkbox on your project to-do list. But here’s a truth bomb: Swagger docs aren’t just developer fluff. They’re your API’s first impression, your dev team’s secret weapon, and a business enabler.&lt;/p&gt;

&lt;p&gt;If you’re using NestJS, you already have a powerful Swagger module at your fingertips. Yet, many projects barely scratch the surface of what’s possible. Let’s fix that today.&lt;/p&gt;

&lt;p&gt;This article will guide you through building clean, descriptive, and production-ready Swagger docs in NestJS, adding rich HTML formatting, exporting OpenAPI JSON, creating a dynamic Swagger JSON endpoint, and auto-generating Postman collections for your team.&lt;/p&gt;

&lt;p&gt;📖 &lt;a href="https://medium.com/@pat.vishad/why-your-swagger-docs-suck-and-how-to-fix-them-in-nestjs-e374767696f9" rel="noopener noreferrer"&gt;Read more here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nestjs</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
