tldr; A single MySQL Cluster prioritises Consistency in Network
partition events. Asynchronously replicating MySQL Clusters
prioritise Availability in Network partition events.
I was recently asked about the relationship between MySQL Cluster
and the CAP theorem. The CAP theorem is often described as
a pick two out of three problem, such as choosing from good,
cheap, fast. You can have any two, but you can't have all three.
For CAP the three qualities are 'Consistency', 'Availability' and
'Partition tolerance'. CAP states that in a system with data
replicated over a network only two of these three qualities can
be maintained at once, so which two does MySQL Cluster
provide?
Standard 'my interpretation of CAP' section
Everyone who discusses CAP like to rehash it, and I'm no
exception. …
MySQL Cluster distributes rows amongst the data nodes in a
cluster, and also provides data replication. How does this work?
What are the trade offs?
Table fragments
Tables are 'horizontally fragmented' into table fragments each
containing a disjoint subset of the rows of the table. The union
of rows in all table fragments is the set of rows in the table.
Rows are always identified by their primary key. Tables with no
primary key are given a hidden primary key by MySQLD.
By default, one table fragment is created for each data node in
the cluster at the time the table is created.
Node groups and Fragment replicas
The data nodes in a cluster are logically divided into Node
groups. The size of each Node group is controlled by the
NoOfReplicas parameter. All data nodes in a Node group store the
same data. In other words, where the NoOfReplicas parameter is
two or greater, each …
I'm sure that someone else can describe the actual history of Ndb
development much better, but here's my limited and vague
understanding.
- Ndb is developed in an environment (Ericsson AXE telecoms switch) where Ericsson's PLEX is the language of choice
PLEX supports multiple state machines (known as blocks) sending messages (known as signals) between them with some system-level conventions for starting up, restart and message classes. Blocks maintain internal state and define signal handling routines for different signal types. Very little abstraction within a block beyond subroutines is supported. (I'd love to hear some more detail on PLEX and how it has evolved). This architecture maps directly to the AXE processor design (APZ) …