gpt4 book ai didi

php - 从数据库中检索数据的最有效算法

转载 作者:可可西里 更新时间:2023-11-01 07:35:39 27 4
gpt4 key购买 nike

因此,当我准备迁移到 Cassandra 时,我将从我的查询中删除连接,Cassandra 不支持此功能,而是支持许多 select 语句。我对我的 mysql 表(我目前正在使用的)中的 50 行数据进行了基准测试,结果产生了 101 个查询(全部选择)并且完成所有这些查询花费了大约 0.035 秒。然后我将其更改为一些数组操作(目前在 PHP 中),并将其减少到 3 个查询和一堆 O(n) for 循环。

我假设我的系统是在 PHP、Python、MySQL 还是 Cassandra (NoSQL) 上,使用几个 O(n) for 循环而不是更多查询来处理数据要快得多,我已经减少了使用这种新方法的时间从 0.035 秒到 0.004 秒,如下所示。

还有其他方法可以进一步缩短这个时间吗?还是我在正确的轨道上?在任何情况下运行所有​​查询都更快(除了它变成 O(n^2) 时)?谢谢:

// Now go through and get all of the user information (This is slower in mysql, but maybe faster in cassandra)
/*foreach ($results as $key => $row)
{
// Create query
$query = DB::select('id', 'username', 'profile_picture')->from('users')->where('id', '=', $row['uid']);

// Execute it
$results2 = $query->execute(null, false);

// Join it
$data[$key] = array_merge($row, $results2[0]);
}*/

// Get all the user information (faster in mysql since less queries)
$uids = array();
$ids = array();
foreach ($results as $key => $row)
{
if (!in_array($row['uid'], $uids))
$uids[] = $row['uid'];
if (!in_array($type, array('userProfile')))
$ids[] = $row['comment_id'];
}

// Create query
$query = DB::select('id', 'username', 'profile_picture')->from('users')->where('id', '=', $uids);

// Execute it
$results2 = $query->execute(null, false);

$user_data = array();

foreach ($results2 as $key => $row)
{
$user_data[$row['id']] = array('uid' => $row['id'], 'username' => $row['username'], 'profile_picture' => $row['profile_picture']);
}

foreach ($results as $key => $row)
{
$data[$key] = array_merge($row, $user_data[$row['uid']]);
}
// End faster user info section

最佳答案

使用 Cassandra,您可以使用多重获取在一个查询中请求所有 key ,这比一堆单一查询快得多。我有时会在一个查询中请求数千个键,而响应时间实际上是即时的。

关于php - 从数据库中检索数据的最有效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com