对于使用大量数据的“数字运算”风格的应用程序(读取:“数百MB,但不是GB”,即它可以很好地适应操作系统旁边的内存),读取所有内容是否有意义在开始处理之前首先将数据存入内存,以避免在读取大型相关数据集时将程序IO绑定,而是从RAM中加载它们?
这个答案是否会在使用不同的数据备份之间发生变化?即,无论您使用的是XML文件,平面文件,完整的DBMS等,答案都是一样的吗?
答案 0 :(得分:8)
你的程序和它的瓶颈一样快。如果可以提高整体性能,那么将数据存储在内存中是很有意义的。没有严格的规则表明它会提高性能。当你修复一个瓶颈时,新的东西就成了瓶颈。因此,解决一个问题可能会使性能提高1%或1000%,具体取决于下一个瓶颈。你正在改进的东西可能仍然是瓶颈。
我认为这些事情通常适合三个层次之一:
从中得到的教训是唐纳德·克努特(Donald Knuth)引用的“有些过度使用且经常引用错误”的说法,“过早优化是所有邪恶的根源”。渴望和过度渴望的解决方案增加了大量的复杂性,因此没有必要为那些不会产生有用益处的东西做这些。
程序员经常犯错误,在确定某些内容的高度(据称)优化版本之前是否需要以及是否有用。
我自己的看法是:在出现问题之前不要解决问题。
答案 1 :(得分:2)
我猜想选择正确的数据存储方法会比你是否同时或根据需要从磁盘读取更有效。
大多数数据库表都有每行中字段的常规偏移量。例如,customer
记录可能长50个字节,并且在第12个字节处开始pants_size
列。选择所有裤子大小就像获取偏移量为12,62,112,162, ad nauseum 的值一样简单。