你好.
关于如何才算一个IO的问题,我可以在这里简要讲解,IO在不同层次有不同的概念和单位。一次IO就是一次请求,对于磁盘来说,一个IO就是读或者写磁盘的某个或者某段扇区,读写完了,这个IO也就结束了。【篇幅有限很多内容没办法详细解释,更详细的内容请参考《大话存储》的前几章。】
至于transaction,就是更高层的内容了,transaction往往与业务逻辑有关系。
比如你去银行存一笔钱,你存这笔钱的过程中,服务器向数据库中写入的所有关联的操作就算是一个transaction,而完成这一个transaction,往往对应了底层对磁盘的多次IO。比如,读出数据库中原来的数据,比如你原来存款是10000元,他读出来了,然后显示在柜台终端上,然后操作员存入5000元,数据传输到数据库服务器,数据库服务器在内存中更改这个数值,从10000更改为1.5000,然后数据库Flush的时候,将对应的数据库写入磁盘,完成后,柜台终端显示成功。这个过程中对应了多次磁盘IO。
补充几点:IO类型有多种,数据型IO和非数据型IO。
前者是指IO请求中包含读写扇区的数据的,后者是指IO中不包含扇区数据,而是承载其他信息的,如SCSI协议中的很多操作码,比如0×01就是zero指令,命令磁盘自行向所有扇区中写0。或者诸如report LUN这种常见的指令,它们是命令磁盘做一些其他的动作,而不是真正的读写扇区中的数据。对于网络文件系统来说,也有数据型IO和非数据型IO,前者比如读写操作,后者比如NFS中的mount、fsinfo、fsstat、getattr等。这就是transaction与IO的关系。
希望能帮助到你~