擅长:python、mysql、java
<p>我不是PyTable<sup>1</sup>的专家,但它的工作方式很可能与<a href="https://serverfault.com/questions/48486/what-is-swap-memory">swap memory</a>类似。在</p>
<p><code>aliveNodes</code>位于RAM中,而{<cd2>}可能存储在磁盘上的hdf5文件中(PyTables使用的二进制文件格式)。
每次你需要访问一段数据时,它必须在RAM中。因此PyTable检查它是否已经存在(<code>aliveNodes</code>),如果已经存在,则返回给您。否则,它需要恢复数据所在的<code>deadNode</code>。由于RAM是有限的,它可能会杀死一个未使用的<code>aliveNode</code>来预先腾出一些空间。在</p>
<p>这个过程的原因当然是内存的大小有限。
其结果是,每次需要交换节点时性能都会受到影响(<em>kill</em>一个节点,<em>revaive</em>另一个节点)。在</p>
<p>为了优化性能,您应该尽量减少交换。例如,如果您的数据可以并行处理,那么您可能只能加载每个节点一次。另一个例子:假设你需要循环一个巨大矩阵的每个元素,这个矩阵被分割成一个节点网格。那么最好避免按行或按列访问其元素,而不是逐节点访问。在</p>
<p>当然,PyTable在幕后处理这个问题,所以您不必控制每个节点中的内容(但我鼓励您深入研究这个<code>NODE_CACHE_SLOTS</code>变量,至少要了解它是如何工作的)。但一般来说,访问连续的数据比分散在各地的数据更快。与往常一样,如果时间性能是应用程序的一个重要问题,请评测您的代码。在</p>
<hr/>
<p><sup><sup>1</sup>翻译:<em>我对PyTables几乎一无所知</p>