<div id="docs-body">
 <div class="section">
  <div class="titlepage">
   <div>
    <div>
     <h4 class="title">
      <a name="mysql-cluster-ndb-innodb-engines">
      </a>
      25.2.6.1 Differences Between the NDB and InnoDB Storage Engines
     </h4>
    </div>
   </div>
  </div>
  <a class="indexterm" name="idm46045123877424">
  </a>
  <a class="indexterm" name="idm46045123876000">
  </a>
  <a class="indexterm" name="idm46045123874512">
  </a>
  <a class="indexterm" name="idm46045123873024">
  </a>
  <p>
   The
   <a class="link" href="mysql-cluster.html" title="Chapter 25 MySQL NDB Cluster 8.4">
    <code class="literal">
     NDB
    </code>
   </a>
   storage engine is
        implemented using a distributed, shared-nothing architecture,
        which causes it to behave differently from
   <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
    <code class="literal">
     InnoDB
    </code>
   </a>
   in a number of ways. For
        those unaccustomed to working with
   <a class="link" href="mysql-cluster.html" title="Chapter 25 MySQL NDB Cluster 8.4">
    <code class="literal">
     NDB
    </code>
   </a>
   , unexpected behaviors can arise
        due to its distributed nature with regard to transactions,
        foreign keys, table limits, and other characteristics. These are
        shown in the following table:
  </p>
  <div class="table">
   <a name="idm46045123867072">
   </a>
   <p class="title">
    <b>
     Table 25.1
          Differences between InnoDB and NDB storage engines
    </b>
   </p>
   <div class="table-contents">
    <table>
     <colgroup>
      <col style="width: 33%"/>
      <col style="width: 34%"/>
      <col style="width: 33%"/>
     </colgroup>
     <thead>
      <tr>
       <th scope="col">
        Feature
       </th>
       <th scope="col">
        <code class="literal">
         InnoDB
        </code>
        (MySQL 8.4)
       </th>
       <th scope="col">
        <code class="literal">
         NDB
        </code>
        8.4
       </th>
      </tr>
     </thead>
     <tbody>
      <tr>
       <th scope="row">
        MySQL Server Version
       </th>
       <td>
        8.4
       </td>
       <td>
        8.4
       </td>
      </tr>
      <tr>
       <th scope="row">
        <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
         <code class="literal">
          InnoDB
         </code>
        </a>
        Version
       </th>
       <td>
        <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
         <code class="literal">
          InnoDB
         </code>
        </a>
        8.4.3
       </td>
       <td>
        <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
         <code class="literal">
          InnoDB
         </code>
        </a>
        8.4.3
       </td>
      </tr>
      <tr>
       <th scope="row">
        NDB Cluster Version
       </th>
       <td>
        N/A
       </td>
       <td>
        <a class="link" href="mysql-cluster.html" title="Chapter 25 MySQL NDB Cluster 8.4">
         <code class="literal">
          NDB
         </code>
        </a>
        8.4.0/8.4.0
       </td>
      </tr>
      <tr>
       <th scope="row">
        Storage Limits
       </th>
       <td>
        64TB
       </td>
       <td>
        128TB
       </td>
      </tr>
      <tr>
       <th scope="row">
        Foreign Keys
       </th>
       <td>
        Yes
       </td>
       <td>
        Yes
       </td>
      </tr>
      <tr>
       <th scope="row">
        Transactions
       </th>
       <td>
        All standard types
       </td>
       <td>
        <a class="link" href="innodb-transaction-isolation-levels.html#isolevel_read-committed">
         <code class="literal">
          READ COMMITTED
         </code>
        </a>
       </td>
      </tr>
      <tr>
       <th scope="row">
        MVCC
       </th>
       <td>
        Yes
       </td>
       <td>
        No
       </td>
      </tr>
      <tr>
       <th scope="row">
        Data Compression
       </th>
       <td>
        Yes
       </td>
       <td>
        No (NDB checkpoint and backup files can be compressed)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Large Row Support (&gt; 14K)
       </th>
       <td>
        Supported for
        <a class="link" href="binary-varbinary.html" title="13.3.3 The BINARY and VARBINARY Types">
         <code class="literal">
          VARBINARY
         </code>
        </a>
        ,
        <a class="link" href="char.html" title="13.3.2 The CHAR and VARCHAR Types">
         <code class="literal">
          VARCHAR
         </code>
        </a>
        ,
        <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
         <code class="literal">
          BLOB
         </code>
        </a>
        , and
        <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
         <code class="literal">
          TEXT
         </code>
        </a>
        columns
       </td>
       <td>
        Supported for
        <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
         <code class="literal">
          BLOB
         </code>
        </a>
        and
        <a class="link" href="blob.html" title="13.3.4 The BLOB and TEXT Types">
         <code class="literal">
          TEXT
         </code>
        </a>
        columns only (Using
              these types to store very large amounts of data can lower
              NDB performance)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Replication Support
       </th>
       <td>
        Asynchronous and semisynchronous replication using MySQL Replication;
              MySQL
        <a class="link" href="group-replication.html" title="Chapter 20 Group Replication">
         Group
              Replication
        </a>
       </td>
       <td>
        Automatic synchronous replication within an NDB Cluster; asynchronous
              replication between NDB Clusters, using MySQL Replication
              (Semisynchronous replication is not supported)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Scaleout for Read Operations
       </th>
       <td>
        Yes (MySQL Replication)
       </td>
       <td>
        Yes (Automatic partitioning in NDB Cluster; NDB Cluster Replication)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Scaleout for Write Operations
       </th>
       <td>
        Requires application-level partitioning (sharding)
       </td>
       <td>
        Yes (Automatic partitioning in NDB Cluster is transparent to
              applications)
       </td>
      </tr>
      <tr>
       <th scope="row">
        High Availability (HA)
       </th>
       <td>
        Built-in, from InnoDB cluster
       </td>
       <td>
        Yes (Designed for 99.999% uptime)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Node Failure Recovery and Failover
       </th>
       <td>
        From MySQL Group Replication
       </td>
       <td>
        Automatic (Key element in NDB architecture)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Time for Node Failure Recovery
       </th>
       <td>
        30 seconds or longer
       </td>
       <td>
        Typically &lt; 1 second
       </td>
      </tr>
      <tr>
       <th scope="row">
        Real-Time Performance
       </th>
       <td>
        No
       </td>
       <td>
        Yes
       </td>
      </tr>
      <tr>
       <th scope="row">
        In-Memory Tables
       </th>
       <td>
        No
       </td>
       <td>
        Yes (Some data can optionally be stored on disk; both in-memory and disk
              data storage are durable)
       </td>
      </tr>
      <tr>
       <th scope="row">
        NoSQL Access to Storage Engine
       </th>
       <td>
        Yes
       </td>
       <td>
        Yes (Multiple APIs, including Memcached, Node.js/JavaScript, Java, JPA,
              C++, and HTTP/REST)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Concurrent and Parallel Writes
       </th>
       <td>
        Yes
       </td>
       <td>
        Up to 48 writers, optimized for concurrent writes
       </td>
      </tr>
      <tr>
       <th scope="row">
        Conflict Detection and Resolution (Multiple Sources)
       </th>
       <td>
        Yes (MySQL Group Replication)
       </td>
       <td>
        Yes
       </td>
      </tr>
      <tr>
       <th scope="row">
        Hash Indexes
       </th>
       <td>
        No
       </td>
       <td>
        Yes
       </td>
      </tr>
      <tr>
       <th scope="row">
        Online Addition of Nodes
       </th>
       <td>
        Read/write replicas using MySQL Group Replication
       </td>
       <td>
        Yes (all node types)
       </td>
      </tr>
      <tr>
       <th scope="row">
        Online Upgrades
       </th>
       <td>
        Yes (using replication)
       </td>
       <td>
        Yes
       </td>
      </tr>
      <tr>
       <th scope="row">
        Online Schema Modifications
       </th>
       <td>
        Yes, as part of MySQL 8.4
       </td>
       <td>
        Yes
       </td>
      </tr>
     </tbody>
    </table>
   </div>
   <div class="table-contents">
    <table cellpadding="0" cellspacing="0" style="position: fixed; top: 0px; display: none; left: 401px; width: 739px;">
     <thead>
      <tr>
       <th scope="col" style="width: 243.531px;">
        Feature
       </th>
       <th scope="col" style="width: 250.906px;">
        <code class="literal">
         InnoDB
        </code>
        (MySQL 8.4)
       </th>
       <th scope="col" style="width: 243.562px;">
        <code class="literal">
         NDB
        </code>
        8.4
       </th>
      </tr>
     </thead>
    </table>
   </div>
  </div>
  <br class="table-break"/>
 </div>
 <br/>
</div>
