<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled Publication]]></title><description><![CDATA[Untitled Publication]]></description><link>https://parag-paralikar.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 03:13:07 GMT</lastBuildDate><atom:link href="https://parag-paralikar.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Change data capture for Oracle: What are the options?]]></title><description><![CDATA[Change Data Capture (CDC) with Oracle has always been a headache, full of twists and turns. But let’s not cry over spilled coffee; instead, we’ll dive into the options we have right now to make this beast behave. I’ll keep it real, funny, and from th...]]></description><link>https://parag-paralikar.hashnode.dev/change-data-capture-for-oracle-what-are-the-options</link><guid isPermaLink="true">https://parag-paralikar.hashnode.dev/change-data-capture-for-oracle-what-are-the-options</guid><category><![CDATA[Oracle]]></category><category><![CDATA[change data capture]]></category><dc:creator><![CDATA[Parag Paralikar]]></dc:creator><pubDate>Sat, 20 Sep 2025 10:41:53 GMT</pubDate><content:encoded><![CDATA[<p>Change Data Capture (CDC) with Oracle has always been a headache, full of twists and turns. But let’s not cry over spilled coffee; instead, we’ll dive into the options we have right now to make this beast behave. I’ll keep it real, funny, and from the heart – because I’ve been there, wrestling with databases on a shoestring budget.</p>
<hr />
<h2 id="heading-oracles-own-fancy-toys-reliable-but-only-if-youre-rolling-in-cash">Oracle’s Own Fancy Toys: Reliable, But Only If You’re Rolling in Cash</h2>
<p>Oracle’s in-house solutions? Solid as a rock, no doubt. But expensive? They’ll drain your wallet faster than your Wi-Fi drops during a Zoom call. We’re talking costs that could buy you a small apartment. I’ve listed them below just to be thorough – you know, for those big-shot enterprises who don’t blink at the bill. For the rest of us? Forget it; we’d have to sell a kidney and maybe a lung.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Solution</td><td>Status</td><td>Target User</td><td>Role in CDC</td></tr>
</thead>
<tbody>
<tr>
<td>Oracle GoldenGate</td><td>Current and strategic</td><td>Enterprises needing robust, high-performance, real-time replication</td><td>The superstar – licensed separately, perfect for all shiny new CDC needs. But oof, the price tag!</td></tr>
<tr>
<td>Oracle XStream</td><td>Deprecated as a direct product</td><td>Third-party vendors and custom API integrations</td><td>The behind-the-scenes hero providing APIs for speedy data grabs. Not for direct use anymore, though.</td></tr>
<tr>
<td>Oracle Streams</td><td>Deprecated</td><td>Legacy systems on ancient database versions</td><td>Totally outdated, kicked out in Oracle 19c. Like that old Nokia phone – works, but why bother?</td></tr>
<tr>
<td>Oracle LogMiner</td><td>Functional, but not enterprise-grade</td><td>DBAs for auditing and quick checks</td><td>Old-school command-line tool for peeking at redo logs. Fine for small stuff, but chokes on big, real-time jobs.</td></tr>
</tbody>
</table>
</div><p>See? Great if you’re a Fortune 500 company. But for a tiny startup? It’s like ordering a 10-course buffet just for yourself – overkill and overpriced.</p>
<hr />
<h2 id="heading-third-party-heroes-helpful-but-still-pinching-your-pocket">Third-Party Heroes: Helpful, But Still Pinching Your Pocket</h2>
<p>Now, if Oracle’s stuff is too pricey, third-party tools swoop in like those helpful neighbors who <em>do</em> lend you a ladder… but send you an invoice later. Popular ones like Qlik, Fivetran, and Striim are solid for CDC, but again, not exactly budget-friendly for bootstrapped folks or solopreneurs like me, who survive on instant noodles and big dreams.</p>
<ul>
<li><p><strong>Qlik Replicate</strong>: Focuses on enterprise-level, high-speed CDC with a fancy drag-and-drop interface. Pricing? Subscription-based, depending on how many endpoints and data heaps you’re dealing with. Downside: Super pricey for small setups, and it trips over some data types or DDL changes. Like a high-maintenance friend – great company, but exhausting.</p>
</li>
<li><p><strong>Fivetran</strong>: All about automated cloud data pipelines, sucking data into warehouses with minimal fuss. They charge based on “Monthly Active Rows” – sounds simple, but if your data changes a lot, bam, bill skyrockets. Weakness: Unpredictable costs for change-heavy systems, and not cheap for starters. Feels like those taxis that somehow take “the scenic route” when you’re late.</p>
</li>
<li><p><strong>Striim</strong>: Real-time streaming with on-the-fly transformations – cool for analytics pros. Pricing is usage-based on events and CPU, or subscriptions. Cons: Steep learning curve, hefty licenses, and the UI looks like it escaped from the 90s. Not ideal if you’re already juggling ten hats as a solopreneur.</p>
</li>
</ul>
<p>These are fine if you’ve got some funding, but for the rest of us? “Can’t afford, I’m broke” – that’s the only song on repeat.</p>
<hr />
<h2 id="heading-open-source-saviors-freeish-options-for-the-rest-of-us">Open-Source Saviors: Free(ish) Options for the Rest of Us</h2>
<p>Alright, let’s talk free stuff – because who doesn’t love a bargain? Open-source CDC tools for Oracle. I’ve compared the big ones below: Debezium, Airbyte, and plain old Oracle LogMiner (used directly, because why not?).</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Feature</td><td>Debezium</td><td>Airbyte</td><td>Oracle LogMiner (Direct Usage)</td></tr>
</thead>
<tbody>
<tr>
<td>Performance</td><td>Top-notch – grabs changes from redo logs in real-time, low lag. Depends on the adapter (LogMiner, XStream, or OpenLogReplicator).</td><td>Decent to good – it embeds Debezium for Oracle, but runs in batches, so a tad slower than pure streaming.</td><td>Meh – it’s a diagnostic tool, not built for speed. The old “Continuous Mine” mode was better, but overall, it pants under heavy loads.</td></tr>
<tr>
<td>Reliability</td><td>Rock-solid. Built on Kafka, so scalable and doesn’t mess with uncommitted junk. Ensures data stays pure.</td><td>Strong – handles state and guarantees delivery, wrapping Debezium nicely. But it’s more general, not laser-focused on events.</td><td>Sketchy for production. No auto-failover or guarantees; you’d need to script everything yourself. Like building a car from scratch.</td></tr>
<tr>
<td>Additional Features</td><td>CDC specialist – masks sensitive info, filters tables, routes events. All in the Kafka world.</td><td>Full ELT platform – slick UI, tons of connectors, auto schema tweaks, even dbt for transforms. Not just CDC.</td><td>Bare bones – command-line log reader for forensics. No integrations or fancy bits. Useful for detective work, not pipelines.</td></tr>
</tbody>
</table>
</div><p>Quite the eye-opener, no? But wait – Airbyte actually piggybacks on Debezium for its CDC magic. So really, it’s Debezium in disguise. Why bother with the middleman? Debezium is my personal fave – free, open-source, reliable, and performs like a champ. From years in the IT trenches (trust me, I’ve got the battle scars), it’s got downsides too, but hey, nothing’s perfect.</p>
<hr />
<h2 id="heading-the-broke-startup-lens-pizza-money-vs-cdc-dreams">The Broke Startup Lens: Pizza Money vs. CDC Dreams</h2>
<p>Let’s zoom in on us small-timers – startups or solopreneurs scraping by. We can’t even splurge on extra cheese for our pizza, forget fancy tools.</p>
<ul>
<li><p>Oracle GoldenGate? Can’t afford, I’m broke.</p>
</li>
<li><p>Oracle XStream? Same story.</p>
</li>
<li><p>Oracle LogMiner? Not even a proper CDC thing.</p>
</li>
<li><p>Qlik? Broke.</p>
</li>
<li><p>Fivetran? Double broke.</p>
</li>
<li><p>Striim? Triple broke with interest.</p>
</li>
<li><p>Airbyte? Eh, it’s just Debezium under the hood.</p>
</li>
<li><p>Debezium? Free and open-source? Now we’re talking!</p>
</li>
</ul>
<p>Bottom line: If you’re a big enterprise with money raining from the sky, grab GoldenGate and live the dream. Medium-sized? Third-party options like Qlik or Fivetran – they’ve got warts (more on that next time), but at least you can yell at support when production crashes.</p>
<p>And for broke souls like us? Debezium all the way. It’s the only freebie that doesn’t suck.</p>
<p>But why not just slap Debezium on everything? Believe me, I tried. It has some nasty gotchas that broke the deal for me. We’ll spill the beans on those in the next post. Stay tuned – and if you’re reading this, drop a comment on your CDC nightmares. Misery loves company!</p>
]]></content:encoded></item><item><title><![CDATA[Why do we even need change-data-capture to begin with?]]></title><description><![CDATA[CDC is a nifty tech that sniffs out changes in your database and broadcasts them like a nosy neighbor yelling over the fence. "Hey, someone just updated the inventory!" But do we really need it? Spoiler: Sometimes yes, sometimes it's overkill. Let's ...]]></description><link>https://parag-paralikar.hashnode.dev/why-do-we-even-need-change-data-capture-to-begin-with</link><guid isPermaLink="true">https://parag-paralikar.hashnode.dev/why-do-we-even-need-change-data-capture-to-begin-with</guid><category><![CDATA[Oracle]]></category><category><![CDATA[change data capture]]></category><dc:creator><![CDATA[Parag Paralikar]]></dc:creator><pubDate>Tue, 16 Sep 2025 18:30:00 GMT</pubDate><content:encoded><![CDATA[<p>CDC is a nifty tech that sniffs out changes in your database and broadcasts them like a nosy neighbor yelling over the fence. "Hey, someone just updated the inventory!" But do we <em>really</em> need it? Spoiler: Sometimes yes, sometimes it's overkill. Let's break it down step by step, starting from the basics, because who doesn't love a good origin story? We'll keep it light – no one wants to read a tech article that feels like chewing on dry toast.</p>
<h2 id="heading-the-simple-life-a-three-tier-rest-service-that-doesnt-need-cdc">The Simple Life: A Three-Tier REST Service That Doesn't Need CDC</h2>
<p>Picture this: You've got a classic three-tier setup. It's like the peanut butter and jelly sandwich of software architecture – straightforward, reliable, and everyone knows how it works. At the top, there's the presentation layer (your snazzy frontend app, maybe built with React or whatever's trendy this week). In the middle, the application layer (your backend REST service, probably in Java or Node.js, serving up endpoints like a diner slinging burgers). And at the bottom? The data layer – an Oracle database, humming away like a loyal fridge full of your data goodies.</p>
<p>Here's how it flows:</p>
<ul>
<li><p>User hits an endpoint: "POST /orders" to create a new order.</p>
</li>
<li><p>The service validates, processes, and writes to the Oracle DB: "INSERT INTO orders VALUES (stuff);"</p>
</li>
<li><p>Need to read? "GET /orders/123" – service queries the DB: "SELECT * FROM orders WHERE id=123;" and sends it back.</p>
</li>
</ul>
<p>No drama, no fuss. Everything's synchronous, self-contained, and the service owns the whole shebang. Why no CDC? Because the service is the gatekeeper. It knows every read and write intimately – like a helicopter parent at a kids' playdate. If something changes, the service handles it right there. CDC would be like hiring a private detective to watch your own house: expensive and unnecessary. Save your money for better things, like upgrading to that premium coffee subscription.</p>
<h2 id="heading-leveling-up-cqrs-still-no-cdc-required-but-now-with-events">Leveling Up: CQRS – Still No CDC Required, But Now With Events!</h2>
<p>Okay, now let's crank it up a notch. Enter Command Query Responsibility Segregation (CQRS). Sounds fancy, right? It's basically splitting your system into two personalities: the "doer" (commands) and the "knower" (queries). Think of it as separating your messy kitchen (where you cook up changes) from your tidy living room (where you just admire the view).</p>
<p>In a CQRS setup:</p>
<ul>
<li><p>The <strong>Command Service</strong> handles writes: User says "Update my profile!" It processes the command, writes to the Oracle DB, and then fires off an event like "ProfileUpdatedEvent" to a message queue (Kafka, RabbitMQ – pick your poison).</p>
</li>
<li><p>The <strong>Query Service</strong> subscribes to those events, updates its own read-optimized view (maybe a separate DB or cache), and serves reads super-fast: "GET /profile" pulls from the optimized store, not hammering the main DB.</p>
</li>
</ul>
<p>Events flow directly from command to query service – no middleman needed. It's like passing notes in class: quick, direct, and if done right, the teacher (your DB) doesn't even notice the extra chatter. Why skip CDC here? Because you're in control of the code. You can bake event publishing right into the command logic. It's all in-house, no external meddling. Adding CDC would be like installing a smoke alarm in a room that's already on fire watch – redundant, and probably just annoying with false alarms.</p>
<p>But wait, there's a punchline: CQRS makes your system scalable and snappy, but it's still assuming you own everything. What if life's not that simple? Enter the real world...</p>
<h2 id="heading-the-legacy-nightmare-where-cdc-saves-the-day-because-you-cant-touch-the-code">The Legacy Nightmare: Where CDC Saves the Day (Because You Can't Touch the Code)</h2>
<p>Now we're in the trenches – the legacy system swamp. Imagine an ancient Oracle DB that's been around longer than some developers' careers. Multiple services are dumping data into it like a potluck dinner: Your app writes orders, a billing system adds invoices, HR tosses in employee updates. And on the reading side? A circus of consumers: Your analytics dashboard pulls reports, a third-party CRM syncs customer data, maybe even a vendor's inventory tool peeks in.</p>
<p>The kicker? Some of these readers and writers aren't yours. They're owned by third parties – think external partners or ancient monoliths from acquisitions. You can't just stroll in and refactor their code to publish events. "Hey, random vendor, mind adding Kafka support to your 1990s Perl script?" Yeah, that'll go over like a lead balloon.</p>
<p>This is where CDC struts in like a superhero in a cape made of redo logs. CDC tools (like Debezium or Oracle GoldenGate) monitor the DB's change logs – those sneaky records of every insert, update, delete – and stream them out as events. No need to touch the legacy code; it's all passive listening.</p>
<p>Why is this the only way?</p>
<ul>
<li><p><strong>Can't modify sources</strong>: Third-party writers won't let you add event hooks. CDC eavesdrops without asking permission.</p>
</li>
<li><p><strong>Multiple consumers</strong>: Everyone gets the changes in real-time, without polling the DB like a needy ex checking your status.</p>
</li>
<li><p><strong>Decoupling magic</strong>: Your modern services can subscribe to these events, building fresh views or integrations, while the old guard chugs along unchanged.</p>
</li>
</ul>
<p>Without CDC, you'd be stuck with clunky polling (querying the DB every few seconds – inefficient and laggy, like checking your fridge repeatedly for snacks that aren't there) or triggers (which can bloat the DB and cause performance hiccups). CDC keeps things clean, efficient, and drama-free. It's the duct tape holding legacy worlds together – not pretty, but boy, does it work.</p>
<h2 id="heading-wrapping-it-up-cdc-not-always-needed-but-a-lifesaver-when-it-is">Wrapping It Up: CDC – Not Always Needed, But a Lifesaver When It Is</h2>
<p>So, why bother with CDC? In simple setups or controlled CQRS environments, you don't – it's like bringing a bazooka to a water gun fight. But in the wild west of legacy systems with untouchable third-party integrations, it's your golden ticket to sanity. It turns database whispers into actionable shouts, without rewriting the world.</p>
<p>If you've battled legacy beasts or have your own CDC horror stories, drop a comment below. Who knows, maybe we'll laugh about it over virtual coffee. Until next time, keep your data flowing and your code clean!</p>
]]></content:encoded></item><item><title><![CDATA[Why I'm building yet another change-data-capture platform?]]></title><description><![CDATA[If you're anything like me, you've probably scrolled through endless lists of tools and frameworks, wondering, "Do we really need another one?" Well, buckle up, because today I'm kicking off a new blog series where I'm building a change-data-capture ...]]></description><link>https://parag-paralikar.hashnode.dev/why-im-building-yet-another-change-data-capture-platform-because-why-not-scratch-that-itch</link><guid isPermaLink="true">https://parag-paralikar.hashnode.dev/why-im-building-yet-another-change-data-capture-platform-because-why-not-scratch-that-itch</guid><category><![CDATA[Oracle]]></category><category><![CDATA[cdc]]></category><category><![CDATA[change data capture]]></category><category><![CDATA[Java]]></category><dc:creator><![CDATA[Parag Paralikar]]></dc:creator><pubDate>Sun, 14 Sep 2025 12:26:57 GMT</pubDate><content:encoded><![CDATA[<p>If you're anything like me, you've probably scrolled through endless lists of tools and frameworks, wondering, "Do we <em>really</em> need another one?" Well, buckle up, because today I'm kicking off a new blog series where I'm building a change-data-capture (CDC) platform for Oracle databases—right out in the open. Think of it as "build in public" meets "mad scientist in the garage." I'll share the highs, the lows, the "aha!" moments, and probably a few "why did I think this was a good idea?" confessions along the way.</p>
<p>Now, I can already hear the collective groan: "There are <em>so</em> many CDC tools out there already! Some are open-source, and—miracle of miracles—a handful even work as advertised!" Fair point. So why on earth am I adding to the pile? Simple:</p>
<blockquote>
<p>"Intellectual curiosity is the itch that should be scratched till it becomes a rash." —Me, channeling my inner philosopher while staring at code at 2 AM.</p>
</blockquote>
<p>We've all devoured those shiny system design blogs, binge-watched YouTube tutorials, and powered through online courses that promise to make us architecture wizards. After two decades (give or take) in the software trenches, one universal truth stands out like a sore thumb: <strong>There are no perfect systems!</strong> Nope, not even close. Even in the fanciest Fortune 500 companies, you'll stumble upon legacy beasts lurking in the shadows—systems that chug along doing things that would make a fresh CS grad weep.</p>
<p>These relics are riddled with anti-patterns that feel like outright betrayals of everything we hold sacred in software engineering. But hey, real life isn't a textbook; it's a chaotic mix of tight deadlines, budget squeezes, and "it worked fine yesterday" logic. And that's exactly why we end up inventing tools that, at first glance, seem redundant. Enter change-data-capture: the unsung hero that whispers, "Hey, something just changed in the database—want to know about it?"</p>
<p>In an ideal world, if you've got a single, well-behaved write service handling all updates to your database, that service should just shout the changes over an enterprise event bus for everyone else to hear. Easy peasy, right? But reality loves to throw curveballs. What if you've got <em>two</em> write services? Or three? Or—heaven forbid—a whole circus of them, some from third-party vendors where you couldn't tweak the code if your life depended on it? Suddenly, you're playing whack-a-mole with codebases, trying to patch in event capture everywhere. It's exhausting, inefficient, and about as fun as debugging someone else's regex.</p>
<p>That's when you pivot to the source of truth: the database itself. Track the changes where they're born, and voila—problem (mostly) solved. But here's the plot twist: many of these legacy setups adore good old relational databases, and Oracle? Oh, Oracle reigns supreme as the king of the RDBMS jungle. It's battle-tested, robust, and... notoriously tricky to wrangle when it comes to CDC. Sure, Oracle offers fancy proprietary solutions like GoldenGate or XStream, but if you're a bootstrapping startup or a solo dev hustling from your home office, those licenses might as well be priced in unicorn tears. Out of reach!</p>
<p>So, what's a curious coder to do? Roll up our sleeves and build an open-source, enterprise-grade, massively scalable CDC platform tailored for Oracle (and hey, if the stars align and I don't run out of coffee, maybe extend it to other databases too). It's a bit like deciding to bake your own bread because the store-bought stuff just doesn't hit the spot—except this bread has to feed a data-hungry army without crumbling under pressure.</p>
<p>In this series, I'll be your guide through the entire journey. We'll dive into design decisions (why this architecture over that one?), framework picks (spoiler: no silver bullets here), library choices (the good, the bad, and the "why did I import that?"), design patterns (because who doesn't love a solid observer or two?), and the inevitable trade-offs—functional feats versus non-functional necessities like scalability, reliability, and that ever-elusive "it just works" magic.</p>
<p>Expect laughs along the way—maybe at my expense when I hit a wall (or a particularly stubborn Oracle quirk). I'll share code snippets, diagrams that look like they were drawn by a caffeinated squirrel, and real talk about what goes wrong (because it <em>will</em>). Who knows? You might even pick up a tip or two for your own projects.</p>
<p>So, grab your favorite beverage, subscribe if you're feeling adventurous, and let's turn this itch into something epic. First up: Scoping out the basics. Stay tuned— we're just getting started!</p>
]]></content:encoded></item></channel></rss>