Я разрабатываю алгоритм для интенсивных вычислений на нескольких огромных массивах. Прямо сейчас я использовал PHP-массивы для выполнения этой работы, но, кажется, медленнее, чем мне было нужно. Я думал об использовании таблиц MySQLi и преобразовывал массивы php в строки базы данных, а затем запускал вычисления для решения проблемы скорости.
На первом этапе, когда я преобразовал 20 * 10 PHP-массив в 200 строк базы данных, содержащих нули, это заняло много времени. Вот код: (В принципе, следующий код генерирует нулевую матрицу, если вам интересно узнать)
$stmt = $mysqli->prepare("INSERT INTO `table` (`Row`, `Col`, `Value`) VALUES (?, ?, '0')"); for($i=0;$i<$rowsNo;$i++){ for($j=0;$j<$colsNo;$j++){ //$myArray[$j]=array_fill(0,$colsNo,0); $stmt->bind_param("ii", $i, $j); $stmt->execute(); } } $stmt->close();
Записанная строка «$ myArray [$ j] = array_fill (0, $ colsNo, 0);" будет генерировать массив очень быстро при заполнении таблицы в следующих двух строках, занимает очень много времени.
Время в массиве: 0,00068 секунд
Время в MySQLi: 25,76 секунд
Намного больше вычислений остается, и я волновался даже после изменения многочисленных частей, это может ухудшиться. Я много искал, но я не мог найти ответа на вопрос, является ли массив лучшим выбором или таблицами mysql? Кто-нибудь сделал или знает о каком-либо тестировании бенчмаркинга?
Я очень ценю любую помощь.
заранее спасибо
ОБНОВИТЬ:
Я сделал следующий тест для матрицы 273 * 273. Я создал две версии для одних и тех же данных. Первый, двухмерный массив PHP, а второй – таблица с 273 * 273 = 74529 строк, содержащая одни и те же данные. Ниже приведены результаты теста скорости для получения аналогичных данных от обоих [здесь, выяснение, какой столбец (столбцы) определенной строки имеет значение, равное 1 – остальные столбцы равны нулю]:
Мое заключение заключается в том, что массивы массируются, а не преобразуют их в таблицы базы данных.
Последнее, что нужно сказать, в случае, если упомянутые данные вначале хранятся в таблице базы данных, генерация массива, а затем его использование будет намного медленнее, как показано ниже (медленнее из-за извлечения данных из базы данных):