使用 Pickle 加速推荐系统中的大文件存储

警告
本文最后更新于 2023-08-10,文中内容可能已过时。

公司最近在做推荐系统,即便在我们这样的小公司,“推荐结果”的文件大小也已经达到了 “GB” 的级别。在系统的早期版本中,我们使用 Json 格式存储文件,这导致我们存储、读取文件的速度比较慢,推荐服务的启动时间较长。后来,我们将文件改为 pkl 格式,速度快了很多,这篇博文主要介绍 Pickle 在大文件存储中的速度优势。

Pickle 与 Json 的速度对比

在这里,我们创建一个比较大的数据结构并存储在磁盘:

首先看看 Json 的成绩:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
file_path = "./test_pickle.json"
data = {
    1: [i for i in range(0, 100000000)],
    2: [i for i in range(0, 100000000)],
    3: [i for i in range(0, 100000000)],
    4: [i for i in range(0, 100000000)],
    5: [i for i in range(0, 100000000)]
}

# 测试写入速度
start = time.time()
with open(file_path, 'w') as file:
    file.write(json.dumps(data))
end = time.time()
print(end-start)    # 56.3s

# 测试加载速度
start = time.time()
with open(file_path, 'r') as file:
    json.load(file)
end = time.time()
print(end-start)    # 42.4s

再看看 Pickle 的成绩:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
file_path = "./test_pickle.pkl"
data = {
    1: [i for i in range(0, 100000000)],
    2: [i for i in range(0, 100000000)],
    3: [i for i in range(0, 100000000)],
    4: [i for i in range(0, 100000000)],
    5: [i for i in range(0, 100000000)]
}

# 测试写入速度
start = time.time()
with open(file_path, 'wb') as file:
    pickle.dump(data, file)
end = time.time()
print(end-start)    # 13.0s

# 测试加载速度
start = time.time()
with open(file_path, 'rb') as file:
    pickle.load(file)
end = time.time()
print(end-start)    #13.1s

经过对比可以发现,相比于 Json 文件,Pickle 文件的写入速度加快了 77%,读取速度加快了 70%。

得到也意味着失去,pkl 文件是不可读的,不过这个缺点不算是什么大问题。

对于推荐系统中的 Web 服务来说,最重要的是加载速度,如果文件的加载速度比较快,那么 Web 服务的启动时间会大大缩短,尽可能的避免因为超时而引发各种问题。


更多人工智能相关的内容:不知何时能摆脱人工的「人工智能」

转载声明:本文允许转载,原文链接:使用 Pickle 加速推荐系统中的大文件存储

Buy me a coffee~
室长 支付宝支付宝
室长 微信微信
0%