PHP のメモリに膨大な数のブール値 (最大 2.5*10e11) を格納する効率的な方法を探しています。私の最初のアイデアは、整数の配列を作成し、各整数のビットごとに 1 つのブール値を格納することでした。
// 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) に格納する最良の方法はどれですか?