Redis或SQLite如何与其他用于在循环中记录数据的工具进行比较

问题描述 投票:0回答:1

说我有循环,我想在其中为所有迭代记录一些值。因为速度对我很重要,所以最简单的方法是这样的:

l1 = []
l2 = []
for i in range(1e9):
    l1.append(func1())  # returns a 1D np.array
    l2.append(func2())
pickle.dump({'string1':l1,
             'string2':l2})

但是计算机将耗尽内存。同时,我更希望如果代码崩溃,我也不会丢失数据,因此最好将其记录在硬盘上。

到目前为止,我遇到过Redis,这似乎是一个解决方案,尽管我还没有尝试过,也不知道如何尝试。

但是我不知道它与我的任务的其他方法相比如何。例如,使用关系数据库SQLite。

这是我已经存在了很长时间的问题,我想找到最好的解决方案并接受它,并且为此,我更喜欢使用那里最好的工具,该工具对于其他工作也可能会有所帮助来自TensorFlow,Redis,Apache软件等。

python sql database memory-management redis
1个回答
0
投票

Redis的魔力来自内存中的速度,如果您需要它,它还支持持久性,但我认为这与您的工作无关。如果您正在努力将它们保存在内存中,那么将它们放入Redis可能不会解决该问题(尽管序列化的数据比numpy本身占用的内存空间要少)。

我个人建议在这种情况下使用关系数据库,在那儿获取所有需要的数据,如果由于某种原因在查询数据时遇到性能问题,您可以然后将Redis用作缓存。您的数据库来解决该问题。通常最好先运行基准测试,然后看看最简单的解决方案如何保持稳定,然后再使用Redis等工具使事情复杂化。很多时候,您意识到您根本不需要它,而常规数据库就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.