2

我正在开发一种算法,用于对多个巨大的数组进行密集计算。现在我已经使用 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 - 其他列为零]:

  • 阵列花费了0.00021 秒
  • mysqli 表耗时0.0026 秒。(慢 10 倍以上)

我的结论是坚持使用数组而不是将它们转换为数据库表。

最后要说的是,如果提到的数据首先存储在数据库表中,生成一个数组然后使用它会慢得多,如下所示(由于从数据库中检索数据而变慢):

  • 阵列花费了 0.9 秒。(慢 400 倍以上)
  • mysqli 表耗时 0.0021 秒。
4

3 回答 3

2

主要原因不是数据库本身速度较慢。主要原因是数据库访问硬盘存储数据,PHP函数只使用RAM内存来执行这个过程,这比硬盘快。

于 2017-07-14T16:45:58.580 回答
0

虽然有一种方法可以加快您的插入查询(很可能您使用的是没有事务的 innodb 表),但问题的陈述是错误的。

一个旨在存储数据的数据库。永久保存。它做得很好。它也可以进行计算,但同​​样 - 在进行任何计算之前,有一个必要的步骤 - 存储数据。
如果您想对存储的数据进行计算 - 可以使用数据库。
如果您只想将数据推送到数据库中以进行计算 - 这没有太大意义。

于 2013-05-08T05:08:30.593 回答
0

就我而言,如问题的更新部分所示,我认为数组比 mysql 数据库具有更好的性能。

即使我在单元格中搜索以连续查找所需值时,数组使用的响应速度也快了 10 倍。即使是良好的表索引也无法击败数组功能和速度。

于 2013-05-08T20:27:25.657 回答