#database #optimization #rust #query-optimization
#База данных #оптимизация #Ржавчина #оптимизация запросов
Вопрос:
Я заметил, что итераторы 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?
Комментарии:
1. Вы спрашиваете, выполняет ли Rust или может изменить порядок этих фильтров? Или вы спрашиваете, как бы вы спроектировали систему, которая вела бы себя как таковая?
2. Я спрашиваю обоих, я должен был уточнить. Интересно, может ли rust / уже выполняет такие оптимизации, и если нет, то как такая система будет реализована на высоком уровне
Ответ №1:
Я считаю, что в какой-то степени — да. Вы могли бы представить, что в структуре итератора есть поле для хранения фильтров, и только в точке ограждения — map()
в вашем примере — он оценивает фильтры.
Поскольку фильтры являются закрытиями в Rust, среда выполнения языка не имеет возможности оценить их перед компиляцией. Но он может использовать некоторую эвристику, например, то, что приходит на ум, оценивать каждый из сохраненных фильтров по одному (нескольким) элементам, чтобы рассчитать его стоимость. Тогда он может изменить их с низкой стоимости на высокую стоимость.
Имейте в виду, я не знаю, может ли такой подход привести к каким-либо улучшениям скорости.