<?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: mmllllzcn</title>
    <description>The latest articles on DEV Community by mmllllzcn (@mmllllzcn).</description>
    <link>https://dev.to/mmllllzcn</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%2F4062113%2Feee70651-be48-4a57-beb0-5ef576a28ad2.png</url>
      <title>DEV Community: mmllllzcn</title>
      <link>https://dev.to/mmllllzcn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mmllllzcn"/>
    <language>en</language>
    <item>
      <title>Rollback Plan Template: Make Database Cutover Safe</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Fri, 28 Aug 2026 01:40:10 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/rollback-plan-template-make-database-cutover-safe-51m1</link>
      <guid>https://dev.to/mmllllzcn/rollback-plan-template-make-database-cutover-safe-51m1</guid>
      <description>&lt;p&gt;A &lt;strong&gt;database migration&lt;/strong&gt; without a tested &lt;strong&gt;rollback plan&lt;/strong&gt; is a risk waiting to surface.&lt;/p&gt;

&lt;p&gt;Before moving production traffic to &lt;strong&gt;GBase Database&lt;/strong&gt; or any other target, define the exit strategy in advance.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Define Rollback Triggers
&lt;/h3&gt;

&lt;p&gt;Use measurable conditions, not opinions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dual-write data difference &amp;gt; 0 for N minutes&lt;/li&gt;
&lt;li&gt;P95 latency exceeds baseline by 10% for M minutes&lt;/li&gt;
&lt;li&gt;Error rate exceeds the predefined threshold&lt;/li&gt;
&lt;li&gt;Replication or data consistency checks fail&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Define Rollback Steps
&lt;/h3&gt;

&lt;p&gt;A practical &lt;strong&gt;rollback plan&lt;/strong&gt; should include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Freeze writes on the new system&lt;/li&gt;
&lt;li&gt;Route application traffic back to the source&lt;/li&gt;
&lt;li&gt;Verify reverse synchronization&lt;/li&gt;
&lt;li&gt;Confirm transaction completeness&lt;/li&gt;
&lt;li&gt;Resume normal traffic only after validation&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Assign Ownership &amp;amp; Timing
&lt;/h3&gt;

&lt;p&gt;Every rollback step needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A named owner&lt;/li&gt;
&lt;li&gt;A defined time budget&lt;/li&gt;
&lt;li&gt;A clear success condition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete &lt;strong&gt;database migration&lt;/strong&gt; rollback process must fit inside the maintenance window.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Rehearse Before Go-Live
&lt;/h3&gt;

&lt;p&gt;A rollback plan that has never been tested is only documentation.&lt;/p&gt;

&lt;p&gt;Run a full drill before the &lt;strong&gt;GBase Database&lt;/strong&gt; cutover. Record the actual recovery time and fix any step that exceeds the target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule:&lt;/strong&gt; If the rollback drill exceeds the maintenance window, change the plan—not the clock.&lt;/p&gt;

&lt;p&gt;💬 Does your database migration checklist include a timed rollback rehearsal?&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>SQL Compatibility Scoring Card for Database Migration</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Fri, 28 Aug 2026 01:37:52 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/sql-compatibility-scoring-card-for-database-migration-6df</link>
      <guid>https://dev.to/mmllllzcn/sql-compatibility-scoring-card-for-database-migration-6df</guid>
      <description>&lt;p&gt;Vendor compatibility percentages describe &lt;em&gt;their&lt;/em&gt; test environment. A &lt;strong&gt;SQL compatibility&lt;/strong&gt; score should describe &lt;em&gt;your&lt;/em&gt; workload.&lt;/p&gt;

&lt;p&gt;For a &lt;strong&gt;database migration&lt;/strong&gt;, use this reusable framework to evaluate compatibility with &lt;strong&gt;GBase Database&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5 Dimensions to Test
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Core DML — 30%&lt;/strong&gt;&lt;br&gt;
Measure how many sampled statements run unchanged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Procedural Code — 20%&lt;/strong&gt;&lt;br&gt;
Check procedures and functions that can be converted without manual rewrites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Functions &amp;amp; Data Types — 15%&lt;/strong&gt;&lt;br&gt;
Verify built-in functions and data types against real application requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Driver &amp;amp; Framework Support — 15%&lt;/strong&gt;&lt;br&gt;
Test whether applications connect without significant code changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Migration Toolchain — 20%&lt;/strong&gt;&lt;br&gt;
Evaluate schema conversion, data synchronization, compatibility scanning, and object comparison.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Use the Scorecard
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Extract the top 100 SQL statements by production frequency.&lt;/li&gt;
&lt;li&gt;Run the same workload against your target &lt;strong&gt;GBase Database&lt;/strong&gt; environment.&lt;/li&gt;
&lt;li&gt;Record every failure and its root cause.&lt;/li&gt;
&lt;li&gt;Apply the predefined weights consistently.&lt;/li&gt;
&lt;li&gt;Use the results as evidence for migration planning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal isn't to find the highest vendor-published percentage. It's to understand &lt;strong&gt;your actual SQL compatibility&lt;/strong&gt; before committing to a migration.&lt;/p&gt;

&lt;p&gt;One afternoon of production SQL sampling can reveal more than a dozen benchmark slides.&lt;/p&gt;

&lt;p&gt;💬 Do you test real production SQL before choosing a database?&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>MySQL to GBase Database: A Practical Dual-Write Migration Guide</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Fri, 28 Aug 2026 01:35:30 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/mysql-to-gbase-database-a-practical-dual-write-migration-guide-13on</link>
      <guid>https://dev.to/mmllllzcn/mysql-to-gbase-database-a-practical-dual-write-migration-guide-13on</guid>
      <description>&lt;p&gt;The safest &lt;strong&gt;MySQL migration&lt;/strong&gt; is one where both systems have already survived the cutover process.&lt;/p&gt;

&lt;p&gt;For teams moving MySQL workloads to &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;, a phased &lt;strong&gt;dual-write&lt;/strong&gt; strategy can reduce migration risk and give the team measurable validation gates.&lt;/p&gt;

&lt;h3&gt;
  
  
  5 Phases for MySQL Migration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Backfill + CDC&lt;/strong&gt;&lt;br&gt;
Complete the initial data load, then use CDC to keep incremental changes synchronized. Validate with row counts and checksums.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Shadow reads&lt;/strong&gt;&lt;br&gt;
Send selected read traffic to &lt;strong&gt;GBase Database&lt;/strong&gt; and compare results with MySQL. Investigate differences such as schema mapping, timezone handling, and collation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Dual-write validation&lt;/strong&gt;&lt;br&gt;
During the validation window, application writes go to both systems. Set a clear success condition—for example, zero unexplained data differences for five consecutive days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Controlled cutover&lt;/strong&gt;&lt;br&gt;
Switch production traffic to GBase Database during a low-traffic window. Keep reverse synchronization available so rollback remains possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Decommission&lt;/strong&gt;&lt;br&gt;
Retire the MySQL environment only after the observation period and rollback checks are complete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make Every Gate Measurable
&lt;/h3&gt;

&lt;p&gt;A reliable &lt;strong&gt;database migration&lt;/strong&gt; should not depend on confidence or intuition.&lt;/p&gt;

&lt;p&gt;Define pass/fail gates for P95 latency, replication lag, data differences, and rollback time before the &lt;strong&gt;dual-write&lt;/strong&gt; process begins.&lt;/p&gt;

&lt;p&gt;The tooling matters. But for MySQL migration, disciplined validation matters more.&lt;/p&gt;

&lt;p&gt;💬 Would your team choose a big-bang cutover or dual-write migration?&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>GBase Database Elastic Scale-Out: Why Adding a Node Isn't Simple</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Fri, 28 Aug 2026 01:33:21 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/gbase-database-elastic-scale-out-why-adding-a-node-isnt-simple-a2p</link>
      <guid>https://dev.to/mmllllzcn/gbase-database-elastic-scale-out-why-adding-a-node-isnt-simple-a2p</guid>
      <description>&lt;p&gt;In &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;, adding a node is more than connecting another machine. &lt;strong&gt;Elastic scale-out&lt;/strong&gt; involves data redistribution, query replanning, failover validation, and maintaining performance under live traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Practical GBase Database Scale-Out Drill
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Establish a baseline&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Record cluster throughput, P95 latency, and replication status before scaling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Add the node&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Register the new node and start the scale-out process. Data redistribution begins as the cluster expands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Monitor rebalancing&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Track data movement and replication lag. If latency increases beyond your predefined threshold, adjust the redistribution rate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Verify query plans&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Run representative queries and check execution plans to confirm workloads can use the expanded cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Test failover&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Simulate a failure of the new node during rebalancing. Verify that &lt;strong&gt;GBase Database&lt;/strong&gt; maintains service availability and recovers as expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Measure the result&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Record the time required for redistribution to complete. The next scale-out should be based on measured data, not assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Scale-Out Drills Matter
&lt;/h3&gt;

&lt;p&gt;Elastic scaling looks simple on an architecture diagram. Under production traffic, &lt;strong&gt;database scaling&lt;/strong&gt; can expose unexpected bottlenecks.&lt;/p&gt;

&lt;p&gt;Running a quarterly scale-out drill helps teams understand rebalancing time, performance impact, and failover behavior before they face a real capacity event.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;GBase Database&lt;/strong&gt;, scale-out should be treated as an operational capability to rehearse—not just a feature to enable.&lt;/p&gt;

&lt;p&gt;💬 When was the last time your team tested adding a database node under live-like traffic?&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Multi-Tenant Isolation: How GBase Database(GBase 8c) Controls Noisy Neighbors</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Thu, 27 Aug 2026 01:51:27 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/multi-tenant-isolation-how-gbase-databasegbase-8c-controls-noisy-neighbors-iab</link>
      <guid>https://dev.to/mmllllzcn/multi-tenant-isolation-how-gbase-databasegbase-8c-controls-noisy-neighbors-iab</guid>
      <description>&lt;p&gt;Multi-tenant database architectures offer better infrastructure utilization, but they introduce a familiar problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens when one tenant consumes most of the resources?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A large analytical query, an unexpected workload spike, or a poorly optimized report can consume CPU, memory, and I/O—affecting other tenants on the same cluster.&lt;/p&gt;

&lt;p&gt;For SaaS and shared enterprise environments, preventing this &lt;strong&gt;noisy-neighbor problem&lt;/strong&gt; is a core part of database architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource Isolation in GBase Database(GBase 8c)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GBase Database(GBase 8c)&lt;/strong&gt; provides resource management capabilities that can be used to control workload consumption across shared environments.&lt;/p&gt;

&lt;p&gt;The basic idea is to classify workloads and apply different resource policies.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Workload Classification
&lt;/h3&gt;

&lt;p&gt;Group sessions or workloads according to business requirements.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OLTP workloads → higher priority&lt;/li&gt;
&lt;li&gt;Tenant analytics → controlled resource allocation&lt;/li&gt;
&lt;li&gt;Background jobs → lower priority&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents a large analytical workload from competing equally with latency-sensitive transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Concurrency Control
&lt;/h3&gt;

&lt;p&gt;Resource management should not focus only on CPU and memory.&lt;/p&gt;

&lt;p&gt;Limiting concurrent queries for resource-intensive workloads can prevent a sudden burst of requests from overwhelming the cluster.&lt;/p&gt;

&lt;p&gt;This is particularly important for shared reporting environments where many users may trigger expensive queries at the same time.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tenant-Level Monitoring
&lt;/h3&gt;

&lt;p&gt;Isolation is difficult to manage without visibility.&lt;/p&gt;

&lt;p&gt;Monitor resource consumption by workload or tenant to identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU-intensive tenants&lt;/li&gt;
&lt;li&gt;Memory-heavy queries&lt;/li&gt;
&lt;li&gt;High I/O workloads&lt;/li&gt;
&lt;li&gt;Unexpected usage spikes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These metrics can also support capacity planning and internal chargeback models.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Multi-Tenant Pattern
&lt;/h2&gt;

&lt;p&gt;A simple architecture is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OLTP workloads → Protected resource group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tenant analytics → Controlled resource group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background processing → Lower-priority resource group&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The workloads can still share the same &lt;strong&gt;GBase Database(GBase 8c)&lt;/strong&gt; cluster, while resource policies prevent one workload category from consuming everything.&lt;/p&gt;

&lt;p&gt;The goal isn't perfect isolation at any cost.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;predictable performance with shared infrastructure&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Test: What Happens Under Load?
&lt;/h2&gt;

&lt;p&gt;Don't validate multi-tenant isolation with an idle system.&lt;/p&gt;

&lt;p&gt;Create a realistic stress scenario:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate heavy analytical queries from one tenant.&lt;/li&gt;
&lt;li&gt;Run normal OLTP traffic from other tenants.&lt;/li&gt;
&lt;li&gt;Monitor CPU, memory, I/O, latency, and concurrency.&lt;/li&gt;
&lt;li&gt;Verify that protected workloads remain within their performance targets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer is yes, shared infrastructure can deliver both &lt;strong&gt;better utilization and predictable service quality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;GBase Database&lt;/strong&gt;, multi-tenant resource management is ultimately about one thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making sure one tenant's workload doesn't become everyone else's problem.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Vector Search Inside the Database: A Simpler RAG Architecture with GBase Database</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Thu, 27 Aug 2026 01:48:45 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/vector-search-inside-the-database-a-simpler-rag-architecture-with-gbase-database-1n8k</link>
      <guid>https://dev.to/mmllllzcn/vector-search-inside-the-database-a-simpler-rag-architecture-with-gbase-database-1n8k</guid>
      <description>&lt;p&gt;RAG systems often introduce a separate vector database alongside the primary database.&lt;/p&gt;

&lt;p&gt;That creates another synchronization problem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Database → ETL/Sync → Vector Database → RAG Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For enterprise applications, this can mean duplicated data, additional infrastructure, and more complexity around permissions and consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GBase Database(GBase 8c)&lt;/strong&gt; supports vector data and vector search capabilities, allowing organizations to bring vector retrieval closer to their transactional and business data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Put Vector Search in the Database?
&lt;/h2&gt;

&lt;p&gt;The key advantage is not simply eliminating another database. It is being able to combine &lt;strong&gt;vector similarity with traditional business filters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A typical retrieval scenario might look conceptually like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;doc_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;VECTOR_SIMILARITY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;query_vec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;knowledge_chunks&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;dept&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'legal'&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;updated_at&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SYSDATE&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that vector similarity and business predicates can be evaluated together.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find documents semantically similar to the user's question&lt;/li&gt;
&lt;li&gt;Restrict results to a specific department&lt;/li&gt;
&lt;li&gt;Filter by time or document status&lt;/li&gt;
&lt;li&gt;Apply database-level access controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application does not necessarily need to retrieve thousands of vectors first and filter them elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Practical Benefits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Less Data Synchronization
&lt;/h3&gt;

&lt;p&gt;When business records and embeddings are managed within the same database environment, there is less need to maintain a separate synchronization pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Unified Data Access
&lt;/h3&gt;

&lt;p&gt;Applications can combine relational predicates and vector similarity within the same data access layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Simpler Security
&lt;/h3&gt;

&lt;p&gt;Existing database permissions and access-control mechanisms can be applied closer to the data instead of rebuilding authorization logic across multiple systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  But a Dedicated Vector Engine Can Still Make Sense
&lt;/h2&gt;

&lt;p&gt;This does not mean an in-database approach is always the best choice.&lt;/p&gt;

&lt;p&gt;At very large vector scales or highly specialized ANN workloads, a dedicated vector search engine may provide advantages in indexing, distributed search, or retrieval performance.&lt;/p&gt;

&lt;p&gt;The right architecture depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector count&lt;/li&gt;
&lt;li&gt;Query concurrency&lt;/li&gt;
&lt;li&gt;Recall requirements&lt;/li&gt;
&lt;li&gt;Filtering complexity&lt;/li&gt;
&lt;li&gt;Latency targets&lt;/li&gt;
&lt;li&gt;Existing database architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For enterprise RAG workloads where relational data, permissions, and vector search need to work together, &lt;strong&gt;GBase Database(GBase 8c)&lt;/strong&gt; can reduce the architectural gap between business data and AI retrieval.&lt;/p&gt;

&lt;p&gt;The question is no longer just:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Which vector database should we choose?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It may be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Do we need a separate vector database at all?”&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>1:30 Columnar Compression: How GBase Database(GBase 8a MPP Cluster) Reduces Storage</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Thu, 27 Aug 2026 01:39:00 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/130-columnar-compression-how-gbase-databasegbase-8a-mpp-cluster-reduces-storage-3k5p</link>
      <guid>https://dev.to/mmllllzcn/130-columnar-compression-how-gbase-databasegbase-8a-mpp-cluster-reduces-storage-3k5p</guid>
      <description>&lt;p&gt;Columnar storage can dramatically reduce the amount of data required for analytical workloads. &lt;strong&gt;GBase Database(GBase 8a MPP Cluster)&lt;/strong&gt; is designed for large-scale analytical processing, with a claimed data compression ratio of up to &lt;strong&gt;1:30&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But what makes high compression possible, and when can you actually benefit from it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Columnar Storage Compresses Well
&lt;/h2&gt;

&lt;p&gt;Unlike row-oriented storage, columnar storage groups values from the same column together. Analytical datasets often contain repeated or highly similar values, creating better conditions for compression.&lt;/p&gt;

&lt;p&gt;Common techniques used in columnar systems include:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Dictionary Encoding
&lt;/h3&gt;

&lt;p&gt;Repeated values—such as status codes, categories, or regions—can be represented using compact dictionary IDs instead of storing the full value repeatedly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best fit:&lt;/strong&gt; low-cardinality columns with many repeated values.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Run-Length Encoding
&lt;/h3&gt;

&lt;p&gt;When the same value appears consecutively, run-length encoding can represent the sequence as a value plus its count.&lt;/p&gt;

&lt;p&gt;Data organization and sorting can make this particularly effective for analytical datasets.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Delta Encoding
&lt;/h3&gt;

&lt;p&gt;For sequential numeric data, the difference between neighboring values can be much smaller than the original values.&lt;/p&gt;

&lt;p&gt;Timestamps and incremental counters are typical examples where delta-style encoding can be effective.&lt;/p&gt;

&lt;p&gt;These are general columnar compression principles. The actual compression ratio depends heavily on the characteristics of the dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why 1:30 Is Not Guaranteed for Every Dataset
&lt;/h2&gt;

&lt;p&gt;A stated maximum compression ratio should not be treated as a universal result.&lt;/p&gt;

&lt;p&gt;Two factors matter:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data characteristics:&lt;/strong&gt; Repetitive, structured, and highly compressible data generally achieves better ratios than random or high-cardinality data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workload pattern:&lt;/strong&gt; Columnar storage is optimized for analytical scans and large-scale data processing. It is not automatically the best format for frequent random row-level updates or point lookups.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Benchmark It
&lt;/h2&gt;

&lt;p&gt;If you're evaluating &lt;strong&gt;GBase Database(GBase 8a MPP Cluster)&lt;/strong&gt;, don't stop at the advertised ratio.&lt;/p&gt;

&lt;p&gt;Use representative data and measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Original dataset size&lt;/li&gt;
&lt;li&gt;Compressed storage size&lt;/li&gt;
&lt;li&gt;Compression ratio&lt;/li&gt;
&lt;li&gt;Analytical query latency&lt;/li&gt;
&lt;li&gt;CPU utilization&lt;/li&gt;
&lt;li&gt;Concurrent query throughput&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then compare the results against your existing analytical database.&lt;/p&gt;

&lt;p&gt;The important question isn't simply:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Can it reach 1:30?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“What compression ratio and query performance can my workload achieve?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That number is far more useful for capacity planning, infrastructure cost, and database selection.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>HTAP Explained: How GBase Database Brings Transactions and Analytics Together</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Thu, 27 Aug 2026 01:34:47 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/htap-explained-how-gbase-database-brings-transactions-and-analytics-together-bdk</link>
      <guid>https://dev.to/mmllllzcn/htap-explained-how-gbase-database-brings-transactions-and-analytics-together-bdk</guid>
      <description>&lt;p&gt;&lt;strong&gt;HTAP (Hybrid Transactional and Analytical Processing)&lt;/strong&gt; aims to solve a common data architecture problem: transactional systems and analytical systems often need the same data, but moving that data between separate systems introduces ETL pipelines, synchronization delays, and operational overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GBase Database(GBase 8c)&lt;/strong&gt; approaches this with a multi-engine architecture that supports transactional and analytical workloads within the same database platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Storage Format Matters
&lt;/h2&gt;

&lt;p&gt;Row-oriented storage is well suited for transactional workloads. When applications frequently insert, update, or retrieve individual records, reading complete rows can be efficient.&lt;/p&gt;

&lt;p&gt;Columnar storage takes a different approach. Analytical queries often scan millions of records but access only a few columns. Reading only the required columns can significantly reduce I/O, while compression can further reduce the amount of data that needs to be processed.&lt;/p&gt;

&lt;p&gt;This leads to a simple HTAP principle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use the storage format that matches the workload—without creating a separate data pipeline for every workload.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How GBase Database(GBase 8c) Applies the Model
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;GBase Database(GBase 8c)&lt;/strong&gt;, different storage engines can serve different workload characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Row storage&lt;/strong&gt; for transaction-heavy tables and point lookups&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Columnar storage&lt;/strong&gt; for analytical queries and large-scale scans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-memory processing&lt;/strong&gt; for latency-sensitive workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not simply to make every query faster. It is to reduce the architectural distance between operational data and analytical insights.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OLTP Database → ETL → Analytics Database → Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;an HTAP architecture can move toward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Applications → GBase Database → Real-time Analytics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This can reduce data movement and help analytical applications work with more current data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The First HTAP Optimization: Query Design
&lt;/h2&gt;

&lt;p&gt;Having columnar storage does not automatically make every analytical query efficient.&lt;/p&gt;

&lt;p&gt;For reporting and analytical workloads, pay attention to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Time-range predicates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Queries that filter by time can take advantage of partition pruning when the data model is designed appropriately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Column projection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Avoid requesting unnecessary columns. Analytical queries should read only the data they actually need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Representative workloads&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Benchmark real production queries rather than relying only on synthetic tests. Query patterns, data distribution, concurrency, and retention periods can all affect results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real HTAP Benefit: Data Freshness
&lt;/h2&gt;

&lt;p&gt;The most important benefit of HTAP is not always raw query speed.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;freshness&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A dashboard that analyzes recently committed transactional data can support decisions much faster than a report that depends on a nightly ETL process.&lt;/p&gt;

&lt;p&gt;For teams evaluating &lt;strong&gt;GBase Database&lt;/strong&gt;, the key question is therefore not simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How fast is the database?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“How quickly can operational data become usable analytical data?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is where HTAP architecture can make a meaningful difference.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Flash Sales Without Overselling: How GBase Database (GBase 8c) Protects Inventory</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Wed, 26 Aug 2026 01:42:08 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/flash-sales-without-overselling-how-gbase-database-gbase-8c-protects-inventory-1dca</link>
      <guid>https://dev.to/mmllllzcn/flash-sales-without-overselling-how-gbase-database-gbase-8c-protects-inventory-1dca</guid>
      <description>&lt;p&gt;Flash-sale overselling usually starts with a simple race condition:&lt;/p&gt;

&lt;p&gt;Two requests check the same inventory, both see &lt;strong&gt;one unit remaining&lt;/strong&gt;, and both attempt to purchase it.&lt;/p&gt;

&lt;p&gt;The solution is not another application-level check. The critical operation must be protected by a transaction and row-level locking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Pattern
&lt;/h2&gt;

&lt;p&gt;With &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;, the inventory update can be handled within a single transaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;BEGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;stock&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sku&lt;/span&gt;
&lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sku&lt;/span&gt;
  &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(:&lt;/span&gt;&lt;span class="n"&gt;oid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;COMMIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;FOR UPDATE&lt;/code&gt; locks the inventory row while the transaction is in progress. Concurrent requests targeting the same SKU must wait rather than independently reading and modifying the same stock value.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;stock &amp;gt; 0&lt;/code&gt; condition provides an additional safeguard: once inventory reaches zero, another purchase cannot reduce it below zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Performance Challenge
&lt;/h2&gt;

&lt;p&gt;Row-level locking protects correctness, but it also creates contention around hot SKUs.&lt;/p&gt;

&lt;p&gt;During a flash sale, thousands of requests may compete for the same inventory row. The goal isn't to eliminate locking—it's to &lt;strong&gt;keep the critical section as short as possible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Good practices include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the transaction focused on inventory and order operations&lt;/li&gt;
&lt;li&gt;Avoid external API calls inside the transaction&lt;/li&gt;
&lt;li&gt;Avoid unnecessary queries while holding the lock&lt;/li&gt;
&lt;li&gt;Commit as quickly as the business logic allows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lock only what you need, and hold it only as long as necessary.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Distribution Design Matters Too
&lt;/h2&gt;

&lt;p&gt;For distributed workloads, data placement can affect transaction latency.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;, distribution-key design should consider high-contention data. Keeping the inventory row and related transactional data within an appropriate distribution boundary can help reduce unnecessary cross-node coordination.&lt;/p&gt;

&lt;p&gt;This is especially important for flash-sale workloads where a small number of SKUs can become extremely hot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;Overselling isn't simply an application bug. It is a &lt;strong&gt;concurrency-control problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The reliable pattern is straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transaction + row-level lock + conditional update + short critical section.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For high-concurrency inventory systems, correctness comes first. Then optimize the transaction path so that thousands of buyers don't turn one inventory row into a system-wide bottleneck.&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Distributed Transactions 101: How GBase Database (GBase 8c) Handles 2PC</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Wed, 26 Aug 2026 01:39:42 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/distributed-transactions-101-how-gbase-database-gbase-8c-handles-2pc-57f3</link>
      <guid>https://dev.to/mmllllzcn/distributed-transactions-101-how-gbase-database-gbase-8c-handles-2pc-57f3</guid>
      <description>&lt;p&gt;When one business transaction touches multiple nodes, the key question is simple: &lt;strong&gt;how do you keep the operation atomic?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt; uses distributed transaction coordination to ensure that a transaction spanning multiple participants either commits as a whole or rolls back as a whole.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Two-Phase Commit Works
&lt;/h2&gt;

&lt;p&gt;A simplified two-phase commit (2PC) flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Coordinator                    Participants (A, B)

    |--- PREPARE ------------------&amp;gt;|
    |&amp;lt;-- READY / ABORT -------------|
    |--- COMMIT --------------------&amp;gt;|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Phase 1: Prepare
&lt;/h3&gt;

&lt;p&gt;The coordinator asks each participating node to prepare the transaction.&lt;/p&gt;

&lt;p&gt;Each participant validates the operation and persists the necessary transaction state. If all participants are ready, the transaction can move forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Commit
&lt;/h3&gt;

&lt;p&gt;The coordinator sends the commit decision to the participants.&lt;/p&gt;

&lt;p&gt;If any participant cannot prepare successfully, the transaction is rolled back instead of allowing a partial commit.&lt;/p&gt;

&lt;p&gt;The core principle is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All participants commit, or none of them do.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens During Failures?
&lt;/h2&gt;

&lt;p&gt;Distributed transactions become interesting when something fails between phases.&lt;/p&gt;

&lt;p&gt;If the coordinator fails during commit, participants can use recovery mechanisms to determine the final transaction state. If a participant rejects the transaction during preparation, the global transaction is aborted.&lt;/p&gt;

&lt;p&gt;This prevents applications from being left with a partially completed business operation.&lt;/p&gt;

&lt;p&gt;For example, a financial ledger transfer should not debit one account successfully while failing to credit the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Cost: Coordination
&lt;/h2&gt;

&lt;p&gt;Distributed transactions introduce coordination overhead, so transaction design matters.&lt;/p&gt;

&lt;p&gt;When only a small number of nodes participate, the additional coordination cost can often remain low. The bigger problem is a transaction that regularly spans many nodes.&lt;/p&gt;

&lt;p&gt;That's why distribution-key design matters.&lt;/p&gt;

&lt;p&gt;Instead of asking whether 2PC is "slow," ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does this transaction need to cross so many nodes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Good distribution design keeps related data together and minimizes cross-node transaction boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Should You Use Distributed Transactions?
&lt;/h2&gt;

&lt;p&gt;Use distributed transactions when &lt;strong&gt;atomicity is a business requirement&lt;/strong&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial transfers&lt;/li&gt;
&lt;li&gt;Inventory and order updates&lt;/li&gt;
&lt;li&gt;Multi-record business operations&lt;/li&gt;
&lt;li&gt;Consistency-critical workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For high-frequency append-only workloads that don't require cross-node atomicity, designing writes to stay within a single distribution boundary can reduce coordination overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway
&lt;/h2&gt;

&lt;p&gt;Two-phase commit is not automatically a performance problem. Poor transaction and distribution design is often the bigger issue.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;, the practical rule is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep atomic operations atomic, but design your data distribution so fewer transactions need to cross nodes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How does your distributed database workload handle cross-node transactions: minimize them through data design, or rely heavily on distributed coordination?&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>PostgreSQL to GBase Database (GBase 8c): A Practical Adaptation Checklist</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Wed, 26 Aug 2026 01:35:26 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/postgresql-to-gbase-database-gbase-8c-a-practical-adaptation-checklist-49</link>
      <guid>https://dev.to/mmllllzcn/postgresql-to-gbase-database-gbase-8c-a-practical-adaptation-checklist-49</guid>
      <description>&lt;p&gt;Moving from PostgreSQL to &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt; is not a fork-to-fork migration. GBase 8c uses a proprietary database kernel with PostgreSQL-compatible SQL mode, so the right approach is to validate compatibility before committing to the migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  PostgreSQL Migration Checklist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Audit PostgreSQL Dependencies
&lt;/h3&gt;

&lt;p&gt;Start by identifying PostgreSQL-specific components, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;pg_catalog&lt;/code&gt; dependencies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Custom extensions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Foreign data wrappers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event triggers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PostgreSQL-specific functions and operators&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to understand what depends on the PostgreSQL ecosystem rather than standard SQL.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Test Production SQL
&lt;/h3&gt;

&lt;p&gt;Run your top production queries against a GBase Database (GBase 8c) test environment.&lt;/p&gt;

&lt;p&gt;Don't rely on a generic compatibility percentage. Measure your own workload:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SQL execution success rate&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Required rewrites&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Functional differences&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;P95 latency&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource consumption&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production SQL provides a much more useful compatibility baseline than a simple feature checklist.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Map Database Configuration
&lt;/h3&gt;

&lt;p&gt;PostgreSQL tuning parameters do not always have direct equivalents.&lt;/p&gt;

&lt;p&gt;Review settings related to memory, connections, query execution, and workload management, then map them to the corresponding &lt;strong&gt;GBase Database&lt;/strong&gt; configuration model.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Reconsider Data Distribution
&lt;/h3&gt;

&lt;p&gt;This is one of the biggest architectural differences.&lt;/p&gt;

&lt;p&gt;A PostgreSQL deployment may rely heavily on single-node table partitioning. With &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;, distributed workloads require careful distribution-key design.&lt;/p&gt;

&lt;p&gt;The question changes from &lt;em&gt;"How should I partition this table?"&lt;/em&gt; to &lt;em&gt;"How should this data be distributed across nodes?"&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Review Procedural Code
&lt;/h3&gt;

&lt;p&gt;PL/pgSQL code can often be adapted, but don't assume every procedure will work unchanged.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Control-flow logic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exception handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PostgreSQL-specific functions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic SQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependency behavior&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test business-critical procedures individually before production migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Re-Benchmark Under Distributed Execution
&lt;/h3&gt;

&lt;p&gt;Distributed execution can change query plans and access paths.&lt;/p&gt;

&lt;p&gt;Compare &lt;strong&gt;P95/P99 latency&lt;/strong&gt;, throughput, concurrency, and resource utilization—not just average query time.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Build a Controlled Cutover Plan
&lt;/h3&gt;

&lt;p&gt;Set up initial data migration followed by CDC-based incremental synchronization. Use a controlled dual-run or validation window to compare source and target results before switching production traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Gain
&lt;/h2&gt;

&lt;p&gt;A PostgreSQL-to-GBase Database migration can provide more than SQL compatibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt; is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Horizontal scale-out&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HTAP workloads with columnar storage&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distributed transaction processing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mixed transactional and analytical workloads&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key lesson: &lt;strong&gt;PostgreSQL compatibility gets you started; workload validation and architecture adaptation determine migration success.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're evaluating PostgreSQL migration options, what would you test first: SQL compatibility, performance, or distributed architecture?&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Triple-Mode Compatibility: How GBase Database (GBase 8c) Supports Oracle, PostgreSQL, and MySQL</title>
      <dc:creator>mmllllzcn</dc:creator>
      <pubDate>Wed, 26 Aug 2026 01:32:15 +0000</pubDate>
      <link>https://dev.to/mmllllzcn/triple-mode-compatibility-how-gbase-database-gbase-8c-supports-oracle-postgresql-and-mysql-a45</link>
      <guid>https://dev.to/mmllllzcn/triple-mode-compatibility-how-gbase-database-gbase-8c-supports-oracle-postgresql-and-mysql-a45</guid>
      <description>&lt;p&gt;Database migration often starts with a familiar question: &lt;em&gt;How much of our existing SQL can we keep?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt; takes a multi-mode compatibility approach, supporting Oracle, PostgreSQL, and MySQL SQL dialects through a single distributed database kernel.&lt;/p&gt;

&lt;p&gt;Instead of maintaining three separate database engines, GBase Database provides different compatibility modes while keeping its underlying execution, transaction, storage, and distributed capabilities native.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Triple-Mode Compatibility Works
&lt;/h2&gt;

&lt;p&gt;The architecture can be viewed in three layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Mode-Aware Parser
&lt;/h3&gt;

&lt;p&gt;The parser identifies the selected SQL dialect and converts dialect-specific syntax into a common internal representation.&lt;/p&gt;

&lt;p&gt;This allows developers to work with familiar SQL while the underlying engine maintains a consistent execution model.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Function Compatibility Layer
&lt;/h3&gt;

&lt;p&gt;Common functions and expressions are mapped according to the selected compatibility mode.&lt;/p&gt;

&lt;p&gt;For example, function equivalents such as &lt;code&gt;NVL&lt;/code&gt; and &lt;code&gt;COALESCE&lt;/code&gt; can be handled through the compatibility layer, reducing the amount of application-side rewriting required during migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Native Database Engine
&lt;/h3&gt;

&lt;p&gt;Below the compatibility layer is the &lt;strong&gt;GBase Database&lt;/strong&gt; kernel itself.&lt;/p&gt;

&lt;p&gt;Distribution, transaction processing, storage, query execution, and other core database capabilities are implemented natively rather than inherited from Oracle, PostgreSQL, or MySQL.&lt;/p&gt;

&lt;p&gt;This distinction matters: SQL compatibility does not mean the database behaves exactly like the original system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Developers Should Expect
&lt;/h2&gt;

&lt;p&gt;Triple-mode compatibility can simplify migration, but it does not eliminate testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common SQL:&lt;/strong&gt;&lt;br&gt;
Many standard statements and frequently used dialect features can be migrated with limited changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deep ecosystem features:&lt;/strong&gt;&lt;br&gt;
Extensions and ecosystem-specific components, such as PostgreSQL plugins, may require separate evaluation or adaptation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application consistency:&lt;/strong&gt;&lt;br&gt;
Although applications can use different compatibility modes, choosing one primary mode per project generally makes development and maintenance easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance behavior:&lt;/strong&gt;&lt;br&gt;
Locking, query planning, execution strategies, and storage behavior ultimately follow &lt;strong&gt;GBase Database&lt;/strong&gt; semantics. Existing SQL should therefore be tested under realistic workloads rather than assuming identical performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Triple-Mode Compatibility Matters
&lt;/h2&gt;

&lt;p&gt;For migration projects, compatibility is more than a checklist item. It can reduce the distance between an existing application and a new database platform.&lt;/p&gt;

&lt;p&gt;A team coming from Oracle, PostgreSQL, or MySQL can start with a familiar SQL environment while taking advantage of the distributed architecture of &lt;strong&gt;GBase Database (GBase 8c)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The key idea is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet developers where their SQL already lives, while providing a native database engine underneath.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For any migration, however, compatibility should be validated across SQL syntax, interfaces, database objects, tools, and application behavior—not just basic queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How important is SQL compatibility when your team evaluates a new distributed database?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>gbase</category>
      <category>database</category>
      <category>数据库</category>
      <category>todayilearned</category>
    </item>
  </channel>
</rss>
