gpt4 book ai didi

php - Riak:快速获取多个项目

转载 作者:搜寻专家 更新时间:2023-10-31 20:40:59 24 4
gpt4 key购买 nike

假设我在 PHP 中有这个数组。

$ids = [
246,
8362,
5241,
2586,
6548,
9372,
28504,
14,
5729
];

这些数组元素对应于“文章”桶中的项目,有时这个数组可能有 1000 个元素深。

目前,我正在循环遍历所有这些,并逐一提取数据。

$articles = [];
foreach($ids as $id)
{
$articles[] = Riak::get("articles.$id");
}

当 ID 列表变得很长时,这比我想花的时间要多。

是否有更快的方法从 Riak 存储桶中提取项目列表?我环顾四周,发现 map-reduce 很有用,但显然会导致比使用顺序 GET 请求节省的开销更多。

最佳答案

不幸的是,从 Riak 中高效地获取大量记录非常困难,因为它们分布在整个集群中并且必须单独检索。一些客户端库最近获得了对客户端 multi-get 的支持,它允许使用多个连接并行获取对象,但我认为这还没有到达 PHP 客户端。

使用 mapreduce 来执行此操作将减少对数据库的调用次数,但不会导致 quorum 读取,因为它仅查询一组覆盖的分区。然而,Mapreduce 是一种相当广泛的数据查询方式,其扩展性或性能不如直接键访问。

如果这是您需要执行的常见操作,则可能表明您的数据模型过于规范化,您可能需要去规范化以使其更好地支持您的应用程序及其访问模式。

具体如何最好地做到这一点需要了解您的数据以及您的访问和查询模式。一种方法可能是将多篇文章存储在一个对象中,该对象具有一个已知且可预测的键,例如基于固定范围的文章 ID。这将使文章的检索更加高效,因为需要读取的对象大大减少,但在更新和插入时可能会增加一些复杂性。

另一种选择是通过复制数据去规范化。如果你例如只需要文章中的一些信息,您可以将这些数据存储在单独的对象中,专门用于有效地为这些查询提供服务。

在 Riak 中,检索包含比您需要的信息更多的更大对象并在应用程序级别进行过滤通常比尝试从数据库中获取您需要的记录更好。

关于php - Riak:快速获取多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895124/

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