【问题标题】:Is there a way to optimize Rust filters for iterators like SQL queries?有没有办法为 SQL 查询等迭代器优化 Rust 过滤器?
【发布时间】:2021-02-22 20:24:10
【问题描述】:

我注意到 Rust 迭代器在某种程度上类似于 SQL 查询。由于我不熟悉 SQL 也不熟悉它的优化(尽管我熟悉查询确实有大量优化),Rust 或任何其他语言有没有办法优化迭代样式过滤器的编译时间?例如,

struct City {
    population: u64,
    name: String,
}

fn heavy_computation_criteria(population: u64) -> bool {
    unimplemented!();
}

fn main() {
    let cities = vec![ ... ];
    let matches = cities
        .iter()
        .filter(|city| heavy_computation_criteria(city.population))
        .filter(|city| city.population > 1000)
        .map(|city| city.name);
}

类似于

SELECT name FROM cities WHERE population > 1000 AND cities.heavy_computation_criteria(cities.population)

我想 SQL 会首先通过人口而不是繁重的计算标准进行过滤。 rust里面有这样的优化方法吗?

【问题讨论】:

  • 你是在问 Rust 是否可以或可以重新排序这些过滤器?或者您是在问如何设计一个这样的系统?
  • 我都在问,我应该澄清一下。我想知道 rust 是否可以/已经做了这样的优化,如果不能,这样的系统将如何在高层次上实现

标签: database optimization rust query-optimization


【解决方案1】:

我在某种程度上相信 - 是的。您可以想象迭代器结构有一个用于存储过滤器的字段,并且仅在围栏点上 - 在您的示例中为 map() - 它评估过滤器。

由于过滤器在 Rust 中是闭包,因此语言运行时无法在编译之前评估它们。但它可以做一些启发式方法,例如,想到什么,在一个(少数)元素上评估每个存储的过滤器以计算其成本。然后它可以将它们从低成本重新排列到高成本。

请记住,我不知道这种方法是否可以提高速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多