MariaDB10.3 系统版本表 有效防止数据丢失

  Sequential Consistency的定义

  Sequential Consistency的精确定义来自于Leslie Lamport老哥(以后我们会多次提到他)。

  他本来是定义了基于共享内存的多CPU并行计算的一致性模型,但是也可以推广到分布式系统中,实际上多CPU并行计算也都可以认为是分布式系统。

  模型的定义是

  the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program

  放到分布式系统里,意思就是不管系统怎么运行,得到的结果就好像把所有节点的所有操作按照某个sequential order排序后运行,但是在这个sequential order顺序中,来自同一个节点的操作仍然保持着它们在节点中被指定的顺序。

  Sequential Consistency的例子

  Leslie Lamport老哥的说法一贯的佶屈聱牙,我们通过几个例子来看一下。图中从左向右表示物理时间,W(a)表示写入数据a,R(a)表示读出数据a。

  


  


  可以看出,这两个系统都不是很完美,但是它们的模型都可以看做Sequential Consistency,因为通过如下变换,总是可以自圆其说,也就是可以找到符合定义的sequential order。

  


  


  Sequential Consistency和硬件

  也许有人会问,同一个进程中保留操作顺序不是显而易见的么?实际上随着硬件技术,尤其是多核、多CPU技术的发展,一个CPU核心运行的进程,不一定能观测到另一个核心进程的操作顺序。

  在论文中,Leslie Lamport老哥举了这样一个例子,有一个互斥算法,要求两个进程不能同时执行临界区方法,a和b两个变量初始值为0。正常情况下,最多一个进程执行临界区方法。

  进程1执行序列如下:

  a = 1

  if (b!=0){

  临界区方法

  }

  进程2执行序列如下:

  b = 1

  if (a!=0){

  临界区方法

  }

  这个程序在多核CPU机器上运行时,有可能两个进程同时进入临界区。为什么呢?

  我们先看一下现代CPU的架构

  


  CPU一般具有多个核心,每个核心都有自己的L1 cache和L2 cache,cache之上还有Load Buffer和Store Buffer。写入时,处理器很有可能仅仅将数据写入Store Buffer,稍后再将Store Buffer中的数据统一写回cache,有可能再过一会儿才将cache的数据写回内存。同样,一个核心读取的数据说不定也已经被另一个核心修改过,只是它不知道而已。

  所以上述进程对a和b的赋值,很有可能没被对方感知。

  为了保证Sequential Consistency,Leslie Lamport老哥在论文中提出了两个要求:

  Each processor issues memory requests in the order specified by its program

  Memory requests from all processors issued to an individual memory module are serviced from a single FIFO queue. Issuing a memory request consists of entering the request on this queue.

  但是如果在硬件层满足Sequential Consistency,肯定会大大降低效率,所以一般这些工作就会交给上层的软件开发人员来做。


转载于:https://juejin.im/post/5cece468e51d45105d63a47e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统上安装MariaDB 10.3.35,你需要确保你的系统已经更新到最新版本,并且有权限执行安装操作。以下是安装的基本步骤: 1. **更新包列**: 打开终端并运行: ``` sudo apt-get update ``` 或者如果你使用的是`dnf`包管理器(在CentOS/RHEL等基于Docker的系统): ``` sudo dnf update ``` 2. **安装依赖**: 如果系统提示缺少依赖,可能需要安装`build-essential`或类似的软件包,例如: ``` sudo apt-get install build-essential cmake libaio-dev ``` 3. **下载MariaDB源码**: 访问MariaDB官网 (https://mariadb.org/) 下载适合你系统版本。这里假设你下载的是.tar.gz格式的压缩包,例如`mariadb-10.3.35.tar.gz`。 4. **解压并进入目录**: ``` tar -zxvf mariadb-10.3.35.tar.gz cd mariadb-10.3.35 ``` 5. **配置安装**: 进入源码目录后,运行: ``` ./configure --prefix=/usr/local/mysql --datadir=/var/lib/mysql ``` 配置选项可以根据需要调整,如添加`--with-tzdir`指定时区目录。 6. **编译和安装**: ``` make && sudo make install ``` 7. **初始化数据库**: 安装完成后,执行: ``` sudo /usr/local/mysql/scripts/mysql_install_db ``` 这将创建必要的数据库目录结构。 8. **启动服务**: ``` sudo systemctl start mysql sudo systemctl enable mysql ``` 9. **设置root密码**: 使用 `mysql_secure_installation` 命令来设置初始root用户的密码。 10. **验证安装**: 可以使用 `mysql -u root -p` 连接到数据库进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值