数据库:分布式
分布式数据存储
复制(replication): 系统维护这个关系的几个相同的副本(拷贝),并把每个副本存储在不同的站点上。复制的替代方式是只存储关系的一份拷贝。
分片(fragmentation): 系统把关系划分为几个片,并把每个片存储在不同的站点上。
分片和复制可以组合,一个关系可以划分为几个片,并且每个片可以有几个副本。
sql/rpl_handler.cc
/**
Transaction observer parameter initialization.
*/
#define TRANS_PARAM_ZERO(trans_param_obj) \
memset(&trans_param_obj, 0, sizeof(Trans_param));
// 事务代表-事务开启函数
int Trans_delegate::trans_begin(THD *thd, int &out) {
DBUG_TRACE;
Trans_param param;
// 事务参数初始化
TRANS_PARAM_ZERO(param);
param.server_uuid = server_uuid;
param.thread_id = thd->thread_id();
param.group_replication_consistency =
thd->variables.group_replication_consistency;
param.hold_timeout = thd->variables.net_wait_timeout;
param.server_id = thd->server_id;
param.rpl_channel_type = thd->rpl_thd_ctx.get_rpl_channel_type();
int ret = 0;
FOREACH_OBSERVER_ERROR_OUT(ret, begin, ¶m, out);
return ret;
}
/** Transaction states (trx_t::state) */
enum trx_state_t {
TRX_STATE_NOT_STARTED,
/** Same as not started but with additional semantics that it
was rolled back asynchronously the last time it was active. */
TRX_STATE_FORCED_ROLLBACK,
TRX_STATE_ACTIVE,
/** Support for 2PC/XA */
TRX_STATE_PREPARED,
TRX_STATE_COMMITTED_IN_MEMORY
};