存储的一个基本原则是不要将需要访问的项目迅速放入难以再次获取的位置:这就像是把速溶咖啡放倒保险箱里,自己给自己找麻烦。
有价值的数据不应该与常规数据一起保存在速度较低的磁盘驱动中。
热数据——经常需要使用的信息——应该保存在速度较快的磁盘驱动上。但是这些驱动不应与旧数据混到一起。
磁盘驱动阵列供应商和存储管理员对此已经有了几年的了解,但是他们仍然需要解决下列问题:热数据是如何被识别,并从快速存储转移到慢速存储,以及应多久执行一次这样的操作。
转速
磁盘驱动有多种转速和界面。其他东西都是一样的,转速是影响数据访问时间的最重要因素。一个读/写磁头必须移动到磁盘界面的正确轨道,然后等待磁盘转动以获取磁头下的目标区域。
在不考虑转速的情况下,移动滑件将读/写磁头带到目标轨道需要相同时间。一个转速为15000rpm的磁盘会以三倍于5200rpm磁盘的速度把目标区域带到磁头以下。
同样,一个15000rpm磁盘的容量也不及7200rpm磁盘,而7200rpm的磁盘容量也不及5200rpm磁盘。磁盘转速越快,其容量越低,而成本越高。
开辟新道路
想象一下,如果一家公司将所有数据都保存到磁盘阵列上,且只有一种磁盘类型。有些数据被保存到这里是为了以防万一,但是这些数据并不重要,且访问频度也不高又或者数据是因为出于遵守法规的原因被保存起来。
而有些数据访问频度较高且数据更新。这包括:
1. 一周或一月内的邮件。
2. 近三个月创建的PowerPoint。
3. 营销附属品,如白皮书。
4. HR员工记录。
其他数据的访问频度更高,例如:
1. 客户和结算数据库。
2. HR新的聘用记录。
3. 当前生产进程。
4. 营销订单进程。
因此,我们可在访问速率和新旧程度的基础上将数据收集到三个整体目录中:高速,中速和慢速。也可以理解为访问速率高的数据是高价值数据。
理想情况下,我们要把数量相对较少的热数据放到较快的磁盘上,这样的磁盘价格比较贵且容量比较低。访问速度较低的数据可以放到高容量的7.2K Sata硬盘上。
困难的地方
看上去很简单。但是问题在哪里呢?
问题来自三方面:数据不是静态的;识别状态很困难;移动起来也困难。
数据被创建,使用和作为参考来保存。这三个步骤组成了数据的生命周期。
新创建的数据可以保存到访问较迅速的磁盘上,但是随着访问速率的降低,它占据了新数据需要的空间,因此应该将其转到次级存储层。在次级存储层上,数据的访问频度较低,应转移到较大的Sata层以便挪出空间。
我们是否应该雇佣存储管理员来识别是否把数据放到了错误的存储层并转移这些数据呢?答案是否定的,因为这种操作应该自动的。
阵列或服务器中的系统软件可以跟踪文件和数据库记录的访问频率,然后将访问速率较高的数据移动到驱动层,相反把访问速率较低数据的存储层级降低。
跟踪访问速率会带来很重的负担,数据的移动同样要占用阵列资源。如果你要移动大量数据,那么应减少移动操作的次数。
切合实际的选择
存储阵列可以传输文件或数据块。理想状态下,数据库中的数据块应该根据访问速率分配到不同磁盘层。
但是这需要数据库对驱动层或是存储阵列有所了解以便为数据库存储提供一个单独池。
大型文件亦是如此。原则上,移动的数据单元越小,存储阵列与访问频率和存储层的匹配效率越高。
有些存储阵列——例如戴尔Compellent——会跟踪单独数据块的访问速率,然后会对数据存储层级进行动态分配。大量数据移到阵列中,而Compellent阵列操作系统需要多核X86处理器为此提供动力。
在自动化数据分层的存储阵列中使用闪存固态硬盘会出现什么效果呢?
原则上,闪存只是另一个层级。不过为了延长闪存的使用寿命应减少将数据写入闪存的次数。
分层已经成为了所有现代磁盘阵列的标准特性,如EMC的Fast。
最好是减少阵列中昂贵的快速存储,转而使用更便宜的大容量存储保存访问频率不太高的数据,用成本居中的存储保存中等价值的数据再用最高标准的快速存储保存比较重要的数据。