1、热数据 vs 冷数据
对比 | 热数据 | 冷数据 |
---|---|---|
访问频度 | 常访问 | 不常访问 |
存放策略 | 放内存 | 放硬盘 |
e.g.
两个接近的商品【A:蛋黄酥】和【B:月饼】
假设A和B每年都被访问365次
A每天都被访问1次
B仅在中秋前被访问365次,其余时间几乎不被访问
于是认为:A是热数据,B是冷数据
对此,A应长期放内存,以便快速访问;B应长期放硬盘,在中秋前再放到内存
1.1、冷热转换
夏装和冬装 具有季节性
夏季时,夏装 成为 热数据,冬装 成为 冷数据
冬季时,夏装 成为 冷数据,冬装 成为 热数据
2、个人构想的【冷热数据自动转换】模型
2.1、Python真代码伪实现
class Queue:
def __init__(self, size=3):
self.size = size # 队列大小(内存大小)
self.queue = []
self.hot = {}
self.cold = {chr(i + 97): i for i in range(26)}
self.check_queue()
def visit(self, x):
"""访问"""
if x in self.queue:
y = self.get_hot(x)
del self.queue[self.queue.index(x)] # 更新队列
else:
y = self.get_cold(x)
self.queue.insert(0, x) # 入队
self.hot[x] = y
if self.queue.__len__() > self.size:
del self.hot[self.queue.pop()] # 出队
print(y)
def get_hot(self, x):
"""访问热数据"""
return self.hot[x]
def get_cold(self, x):
"""访问冷数据"""
from time import sleep
print('冷数据查询有延迟。。。')
sleep(1)
return self.cold[x]
def check_queue(self):
"""查看队列"""
print('队列:{}'.format(self.queue))
print('热数据:{}'.format(self.hot))
print('冷数据:{}'.format(self.cold))
print('程序开始'.center(50, '-'))
q = Queue()
while True:
a = input('输入一个字母:').strip()
try:
q.visit(a)
except KeyError:
print('查看队列状况')
q.check_queue()
3、个人构想的【冷热数据存储】模型
使用频度 | 存储方式 |
---|---|
高 | 内存 |
中 | 固态硬盘 |
低 | 机械硬盘 |
极低 | 机械硬盘+压缩 |