Meilleure réponse
Les tables de recherche ne sont pas tant une «chose SQL» qu’elles sont utilisées dans la conception de bases de données. Ils sont généralement utilisés pour aider à la Normalisation de la base de données pour les données relativement statiques, telles que les tableaux contenant les noms de pays, détats, de villes, etc.
Je ne sais pas sil existe une définition académique formelle des «tables de recherche» dans le contexte de conception de base de données, mais quand jy pense, je pense généralement aux tables avec les propriétés suivantes:
- Ils contiennent des données de configuration ou descriptives, par opposition à des données relatives à des événements dapplication individuels.
- Ils sont petits par rapport aux tables liées aux événements.
- Ils sont dinsertion-et- lire des tables, et si des mises à jour ont lieu, elles sont rares.
- Pour la plupart, les jointures commencent ou se terminent par celles-ci.
- Je les considère souvent comme des analogues du « Dictionary » in Algorithmes de compression de dictionnaire .
Quelques exemples de tables de recherche:
- Tableaux de configuration dapplication.
- Tableaux géographiques (comme mentionné ci-dessus) ou autres tableaux descriptifs uch comme une liste de fournisseurs et de fournisseurs, un tableau de catalogue de produits pour une boutique en ligne, etc.
- Listes de noms de machines et de propriétés matérielles de machine pour une application gérant un centre de données.
- La liste des utilisateurs et les données de profil utilisateur (image, description de lutilisateur, etc.) pour un site Web. Des éléments tels que la page la plus récemment visitée ne figureraient \_pas\_ dans les tables de recherche.
Réponse
La vitesse n’est pas vraiment le facteur déterminant du passage à une base de données NoSQL. Si vous prenez côte à côte les bases de données SQL et NoSQL et comparez les mises à jour simples et les lectures dune table, les deux devraient répondre très rapidement à de telles requêtes.
La principale différence est que les bases de données NoSQL sont conçues spécifiquement pour gérer les simples requêtes de bas niveau, elles vous permettent dobtenir, de définir et peut-être quelques autres choses simples comme les plages ou le tri. Un gros inconvénient est que vous devez décider comment vous allez utiliser les données que vous y mettez et concevoir un schéma approprié à lavance, qui vous permettra daccéder aux données, dans le format dont vous avez besoin.
SQL dautre part, à condition que les données que vous insérez soient correctement dénormalisées, peut gérer des requêtes extrêmement complexes. Vous navez pas besoin de concevoir un schéma autour de votre cas dutilisation particulier et il a lénorme flexibilité du langage de requête qui peut renvoyer toutes les données dans nimporte quel format sans avoir à modifier le schéma sous-jacent.
La raison pour laquelle SQL a la réputation dêtre lent, cest que le traitement dune requête complexe sur un grand ensemble de données prend inévitablement du temps alors que NoSQL ne permet tout simplement pas dexécuter des requêtes complexes lentes en premier lieu.
Il ny a pas raison pour laquelle vous ne pouviez pas utiliser une base de données SQL exactement de la même manière quune base de données NoSQL. Mettez toutes vos données dans de grandes tables et nutilisez que les requêtes les plus élémentaires. Il fonctionnerait alors très bien avec une base de données NoSQL équivalente, mais gaspillerait évidemment la plupart de ses fonctionnalités les plus utiles. Cest en fait le cas dans de nombreuses grandes bases de données SQL. La dénormalisation est interrompue et la flexibilité sacrifiée pour «optimiser» des requêtes spécifiques.
Cependant, SQL présente certains inconvénients et, dans certaines circonstances, ces inconvénients deviennent un tel problème que nous sommes prêts à sacrifier la flexibilité quil offre à les surmonter.
Premièrement, il ne se met pas bien à léchelle horizontalement. Essayer de diviser vos données sur de nombreuses machines plus petites, bien que cela ne soit pas impossible, peut avoir un impact énorme sur les performances. Les grandes bases de données SQL ont tendance à fonctionner sur du matériel très coûteux à haute puissance pour essayer de maintenir des performances adéquates, tandis que les bases de données NoSQL ont tendance à sadapter facilement et à peu de frais à nimporte quelle taille en ajoutant simplement du matériel supplémentaire à un cluster.
Deuxième , et surtout, SQL ne tolère pas les pannes. Oui, il est possible de répliquer vos données sur une deuxième machine de sauvegarde, mais vous doublez ensuite vos coûts pour du matériel spécialisé haute puissance et ce matériel doit être encore plus puissant pour gérer la charge supplémentaire de se synchroniser. Comparez cela, par exemple, à un cluster Cassandra, et vous pourriez exécuter une douzaine de machines plus petites avec réplication de données, même réparties sur plusieurs centres de données si vous le souhaitez. La charge est automatiquement distribuée, les mises à jour sont envoyées à travers le cluster et la perte dune machine ne sera pas remarquée par lutilisateur final.
Voici les vraies raisons pour lesquelles vous devriez choisir entre les deux technologies. Si votre base de données est suffisamment petite pour tenir sur une seule machine et que les temps darrêt occasionnels pendant que vous restaurez à partir dune sauvegarde ne sont pas un problème, utilisez SQL, cela simplifiera massivement votre développement et aura la flexibilité de sadapter si vos besoins changent. Si votre ensemble de données va être énorme, ou si vous avez des SLA serrés, optez pour NoSQL. Nimporte où entre les deux, vous devez faire un jugement, mais gardez à lesprit que les compétences NoSQL sont actuellement très demandées.Cela peut valoir la peine de suivre cette voie juste pour acquérir de lexpérience.