Une base de données qui ne peut que trouver des enregistrements est une demi-base de données. L'autre moitié, c'est répondre à des questions sur les enregistrements : combien de commandes ce mois-ci ? Quelle est la valeur moyenne des commandes ? Quelle catégorie a le plus de revenus ?
La session 162 a ajouté le support complet d'agrégation à FlinDB. Six ensembles de fonctionnalités. Douze tests. Trois cent cinquante lignes de Rust.
Les fonctions d'agrégation
flintotal_revenue = Order.sum("total") // 975.0
avg_rating = Review.avg("rating") // 4.2
cheapest = Product.min("price") // 25
most_expensive = Product.max("price") // 1500GROUP BY : agrégats par catégorie
flinrevenue_by_category = Order.group_sum("category", "total")
// Returns: {"electronics": 15000, "books": 3000, "clothing": 8000}
avg_salary = Employee.group_avg("department", "salary")
// Returns: {"engineering": 95000, "design": 85000, "sales": 75000}DISTINCT : valeurs uniques
flincategories = Product.distinct("category")
// Returns: ["electronics", "books", "clothing"]IN et NOT IN : appartenance à un ensemble
flinactive = Order.where_in("status", ["pending", "processing"])
valid = Order.where_not_in("status", ["cancelled", "refunded"])ORDER BY multiple
flinsorted = Product
.order_by_asc("category")
.order_by_desc("price")Un exemple d'analytique concret
flinentity Product {
name: text
category: text
price: number
sales: int
}
total_revenue = Product.sum("sales")
avg_price = Product.avg("price")
revenue_by_category = Product.group_sum("category", "sales")
categories = Product.distinct("category")
top_products = Product
.where_not_in("category", ["discontinued"])
.order_by_desc("sales")
.limit(10)Cet exemple se lit comme un cahier des charges d'analyste. Pas de SQL. Pas de JOIN. Pas de clause GROUP BY avec aliasing de colonnes. Juste des méthodes qui disent ce qu'elles font.
Ceci est la partie 5 de la série « How We Built FlinDB ».
Navigation de la série : - [056] FlinDB: Zero-Configuration Embedded Database - [057] Entities, Not Tables - [058] CRUD Without SQL - [059] Constraints and Validation in FlinDB - [060] Aggregations and Analytics (vous êtes ici)