说我有循环,我想在其中为所有迭代记录一些值。因为速度对我很重要,所以最简单的方法是这样的:
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软件等。
Redis的魔力来自内存中的速度,如果您需要它,它还支持持久性,但我认为这与您的工作无关。如果您正在努力将它们保存在内存中,那么将它们放入Redis可能不会解决该问题(尽管序列化的数据比numpy本身占用的内存空间要少)。
我个人建议在这种情况下使用关系数据库,在那儿获取所有需要的数据,如果由于某种原因在查询数据时遇到性能问题,您可以然后将Redis用作缓存。您的数据库来解决该问题。通常最好先运行基准测试,然后看看最简单的解决方案如何保持稳定,然后再使用Redis等工具使事情复杂化。很多时候,您意识到您根本不需要它,而常规数据库就可以了。