本节书摘来自异步社区出版社《NoSQL权威指南》一书中的第1章,第1.1节,作者:【美】Joe Celko(乔•塞科) ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.1 批处理中的数据库事务处理
让我们先从历史的角度看一下数据,以及它是如何变迁的。在有“大数据”(Big Data)之前就有“大型机”(Big Iron)的叫法,也就是,使用批处理方式工作的的大型计算机。每个程序都用自己独享的数据和处理器运行,与其他用户或资源不冲突。磁带或穿孔卡片一次只能读取一个作业。
批处理作业的调度是一个独立的外部操作。提交作业后,该作业会进入一个队列,由调度器决定它何时运行。系统告知操作员(是的,这是一项独立的工作!)挂载哪些磁带、把什么形式的文件加载到打印机等所有的物理细节。当作业结束时,调度器必须释放资源,以便后续作业可以继续使用这些资源。
调度器必须保证队列中的每一项作业都可以完成。如果队列中的某个作业不断被赋予较高的优先级,可能就有其他作业无法完成。这就是所谓的活锁(live-lock [1])问题。可以形象地理解为,小猪群中最小的那头小猪总是会被其他仔猪推离它的母亲,不允许它吃奶。针对这种问题,一种解决方案是,当作业在队列中等待n秒时,降低它的优先级编号,直到它最终到达第一的位置。
例如,如果两个作业J1和J2同时既要使用资源A又要使用资源B,就会遇到死锁的情况。如果作业J1获取了资源A并等待资源B,作业J2获取了资源B并等待资源A,它们会等在那里一直等待下去,除非两个作业或其中一个作业释放其已经获取的资源,或者我们可以再找到这两个资源的另一个副本。
今天,大多数商业数据处理仍然是这样做的,只是磁带驱动器已换成了磁盘驱动器。
相关资源:敏捷开发V1.0.pptx