【发布时间】:2012-08-04 10:16:12
【问题描述】:
我正在寻找一种在 PHP 内存中存储大量布尔值(最多 2.5*10e11)的有效方法。我的第一个想法是创建一个整数数组并在每个整数中存储一个布尔值:
// number of booleans to store
$n = 2.5 * pow(10, 11);
// bits per integer
$bitsPerInt = PHP_INT_SIZE * 8;
// init storage
$storage = array();
for ($i=0; $i<ceil($n/$bitsPerInt); $i++) {
$storage[$i] = 0;
}
// bits in each integer can be accessed using PHP's bitwise operators
但是,这种解决方案的开销仍然太大:在 32 位环境(PHP_INT_SIZE = 4 字节)中存储 10^8 个布尔值(位)需要 3125000 个整数的数组,消耗约 254 MB 内存,而 10^8 个布尔值的稀有数据只需要 ~ 12 MB。
那么在 PHP (5) 中存储大量布尔值的最佳方法是什么?
【问题讨论】:
-
可能取决于您需要整数的用途。由于数组不是关联的,因此顺序可能很重要。存储是否像堆栈一样使用?
-
我需要访问给定索引处的布尔值(位),例如在数组中。
-
您可能可以使用混合解决方案。您在内存中加载的只是一个选择,其余的则保留在一些文件中。当你想要一个不在缓存中的布尔值时,你加载适当的文件。
标签: php boolean memory-efficient