观看视频课程,对于数据持久化操作有点疑问:
客户端的一次写入,只要是数据进行了wal 操作,这样是否就相当于数据已经写入成功了?假设数据写入insert into t (id,name) values(1,‘tom’),刚刚完成wal 操作,这时候数据库崩了,重启之后我查询select * from t where id =1,是否能够查询到数据?
如果事务失败,WAL 中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。
事务提交成功的标志,是多数的副本写入到rockdb tikv 中吧。现在这个场景的话,刚刚写到wal,数据还没有开始两阶段提交,这个时候是肯定不会查询到的吧。
不是一个维度的,rocksdb是个单机数据库,数据提交了自然就能查到,这个和tikv多副本是2件事
1 个赞
日志wal日志落盘后才能确保数据持久化,就算是崩溃恢复了,数据也不会丢失
这个是你发起commit的时候就会日志先写做一个持久化,当你commit返回成功就表示wal日志已经持久化成功了,如果没返回成功就导致数据库宕机,那就代表当前的commit并没有成功,当数据库下次启动的时候就会进行故障恢复,就会忽略这条日志