présentation

Oracle est l'un des produits de base de données les plus populaires au monde. Les applications complexes s'appuient sur Oracle pour leurs données et transactions critiques. Pour améliorer les performances, Oracle a inventé plusieurs techniques d'optimisation, notamment une technique de tri pour les tables de base de données. L'algorithme Orasort, breveté par Mark Callaghan, permet un tri 5 fois plus rapide. Ce brevet, enregistré pour 20 ans, a expiré en 2024 et est désormais dans le domaine public.

contexte technique

Le tri traditionnel dans les systèmes de gestion de base de données (SGBD) se fait caractère par caractère. Chaque caractère d'une chaîne est comparé au caractère correspondant d'une autre chaîne. Ce processus est coûteux en termes de cycles CPU. Orasort utilise une approche différente en exploitant les registres CPU, qui sont naturellement de 8 octets. En extrayant les 8 premiers octets de deux chaînes et en les convertissant en entiers 64 bits, la comparaison nécessite moins de registres et de cycles CPU.

fondements de l'algorithme

L'algorithme Orasort fonctionne en extrayant les clés et les ID des enregistrements, puis en les chargeant dans une zone de tri en RAM. Le processus de tri se déroule dans cette zone, en utilisant les registres CPU pour comparer les enregistrements. Si les enregistrements sont trop nombreux pour être chargés en RAM, Oracle divise les données en parties et les traite une par une. Les données triées sont écrites de manière asynchrone sur le disque, en utilisant une approche d'écriture intermédiaire.

implications et limites

La disponibilité d'Orasort dans le domaine public offre des avantages considérables aux communautés open source et aux entreprises de cloud computing. Les bases de données open source comme MySQL et PostgreSQL peuvent intégrer Orasort pour améliorer leurs performances. Les entreprises de cloud computing peuvent réduire leurs coûts d'exploitation en utilisant Orasort, qui nécessite moins de cycles CPU. Cependant, l'implémentation d'Orasort nécessite une compréhension approfondie de l'algorithme et de ses optimisations pour tirer pleinement parti de ses avantages.

Exemple de code pour la comparaison de chaînes :
   // Comparaison traditionnelle
   if (chaîne1[0] == chaîne2[0]) {
       // Comparer le deuxième caractère
       if (chaîne1[1] == chaîne2[1]) {
           // ...
       }
   }
   // Comparaison avec Orasort
   uint64_t entier1 = *(uint64_t *)chaîne1;
   uint64_t entier2 = *(uint64_t *)chaîne2;
   if (entier1 == entier2) {
       // Comparer les prochains 8 octets
   }