À la question « Lequel est le meilleur ? », la réponse est généralement « pas nécessairement ». Ce n’est pas un monde en noir et blanc, la plupart du temps cela dépend de la situation. Les applications légères avec des structures de données intégrées pour la mise en cache peuvent être un bon choix. Les méthodes de communication qui ne passent pas par le réseau sont certainement relativement efficaces et faciles à utiliser pour les programmes. Cependant, la plupart des structures de données intégrées ne sont pas thread-safe, ce qui signifie que vous devez vous verrouiller pour la synchronisation des threads, le cas échéant. Le sujet de la synchronisation des threads n'entre pas dans le cadre de ce sujet, mais il n'est pas facile de jouer avec la synchronisation des threads. De nombreuses personnes ne peuvent pas verrouiller ou utilisent des verrous excessifs, ce qui entraîne de faibles performances. Dans un environnement à véritable concurrence élevée, même une courte période de dégradation des performances peut entraîner l'accumulation d'un grand nombre de requêtes sur le serveur et l'incapacité de les traiter, provoquant le blocage de l'application. Ainsi, lorsque votre application atteint une certaine échelle, vous devriez envisager d'utiliser un cache distribué. En plus du problème de verrouillage qui a été résolu côté serveur, cela peut également résoudre le problème de l'impossibilité de partager le cache comme vous l'avez mentionné. ainsi que l'expansion horizontale. Problème (Que dois-je faire s'il y a trop de caches qui ne peuvent pas être hébergés sur un seul serveur ?). Dans les mêmes conditions, la migration du cache interne vers le cache distribué peut ne pas raccourcir le temps de réponse et améliorer le QPS. Dans la plupart des cas, elle peut prolonger le temps de réponse dans une certaine mesure (transmission réseau et processus de sérialisation et de désérialisation). Mais en échange, plus important encore, cela apporte une évolutivité horizontale. Pour parler franchement, cela vous permet de traiter davantage de requêtes via le serveur heap. L'expansion horizontale est le problème clé que la plupart des bases de données distribuées doivent résoudre. Bien sûr, l'introduction de NoSQL introduit inévitablement de la complexité, ajoutant une charge de travail supplémentaire à votre développement. Mais les bases de données NoSQL apporteront des avantages supplémentaires, tels qu'une haute disponibilité et une cohérence des données mises en cache. J'ai peur d'être confus après avoir dit cela. Ce que je veux exprimer, c'est que l'introduction de NoSQL pour la mise en cache n'est peut-être pas aussi merveilleuse que vous le pensez, cela apportera à la fois des problèmes et des avantages. Ce que vous devez faire est d'évaluer si les avantages qu'il apporte sont ceux que vous souhaitez dans votre propre scénario d'application, tout en bénéficiant de ces avantages, si vous pouvez tolérer les effets indésirables qu'il apporte, puis décider de l'utiliser.
Cela dépend de la taille des données. Sous réserve d'une petite quantité, l'utilisation de la structure de données intégrée est l'option la moins chère et la plus efficace. Dans des conditions de volume de données important, des services noSql prêts à l'emploi doivent être utilisés. Ce n'est pas nécessairement que les composants auto-écrits peuvent avoir des bogues fatals. Un logiciel éprouvé est notre meilleur choix. De plus, ces logiciels disposent tous des fonctions nécessaires pour de gros volumes de données.
Seuls ceux qui disposent d'une petite quantité de données utiliseront le cache de structure de données. Après tout, il est stocké dans la mémoire. Si la quantité de données est importante, il n'utilisera certainement que NoSQL
Vous pouvez vous référer à la conception de HBase. Le stockage physique HBase est basé sur le format MapFile de HDFS (la nouvelle version implémente HFile elle-même, mais le principe est fondamentalement le même). MapFile est un fichier clé-valeur en lecture seule et ne peut pas être modifié après avoir été écrit une fois. De plus, MapFile exige que toutes les clés du fichier soient triées lors de l'écriture. Dans ce cas, HBase stocke d'abord les données dans MemStore, puis les écrit de manière persistante dans HDFS (MapFile ou HFile) après que MeMStore ait stocké une certaine quantité de données. Ainsi, votre cache peut être implémenté à l'aide d'une structure de données en mémoire d'un mécanisme de persistance NoSQL. Les deux manières se compensent
Je ne dirai pas si c'est facile à mettre en œuvre. Si vous mettez un grand nombre d'objets directement dans le jvm, vos cheveux deviendront gris au démarrage du programme. Initialisez et chargez une fois à chaque démarrage ! C'est misérable
À la question « Lequel est le meilleur ? », la réponse est généralement « pas nécessairement ». Ce n’est pas un monde en noir et blanc, la plupart du temps cela dépend de la situation.
Les applications légères avec des structures de données intégrées pour la mise en cache peuvent être un bon choix. Les méthodes de communication qui ne passent pas par le réseau sont certainement relativement efficaces et faciles à utiliser pour les programmes. Cependant, la plupart des structures de données intégrées ne sont pas thread-safe, ce qui signifie que vous devez vous verrouiller pour la synchronisation des threads, le cas échéant. Le sujet de la synchronisation des threads n'entre pas dans le cadre de ce sujet, mais il n'est pas facile de jouer avec la synchronisation des threads. De nombreuses personnes ne peuvent pas verrouiller ou utilisent des verrous excessifs, ce qui entraîne de faibles performances. Dans un environnement à véritable concurrence élevée, même une courte période de dégradation des performances peut entraîner l'accumulation d'un grand nombre de requêtes sur le serveur et l'incapacité de les traiter, provoquant le blocage de l'application.
Ainsi, lorsque votre application atteint une certaine échelle, vous devriez envisager d'utiliser un cache distribué. En plus du problème de verrouillage qui a été résolu côté serveur, cela peut également résoudre le problème de l'impossibilité de partager le cache comme vous l'avez mentionné. ainsi que l'expansion horizontale. Problème (Que dois-je faire s'il y a trop de caches qui ne peuvent pas être hébergés sur un seul serveur ?). Dans les mêmes conditions, la migration du cache interne vers le cache distribué peut ne pas raccourcir le temps de réponse et améliorer le QPS. Dans la plupart des cas, elle peut prolonger le temps de réponse dans une certaine mesure (transmission réseau et processus de sérialisation et de désérialisation). Mais en échange, plus important encore, cela apporte une évolutivité horizontale. Pour parler franchement, cela vous permet de traiter davantage de requêtes via le serveur heap. L'expansion horizontale est le problème clé que la plupart des bases de données distribuées doivent résoudre.
Bien sûr, l'introduction de NoSQL introduit inévitablement de la complexité, ajoutant une charge de travail supplémentaire à votre développement. Mais les bases de données NoSQL apporteront des avantages supplémentaires, tels qu'une haute disponibilité et une cohérence des données mises en cache.
J'ai peur d'être confus après avoir dit cela. Ce que je veux exprimer, c'est que l'introduction de NoSQL pour la mise en cache n'est peut-être pas aussi merveilleuse que vous le pensez, cela apportera à la fois des problèmes et des avantages. Ce que vous devez faire est d'évaluer si les avantages qu'il apporte sont ceux que vous souhaitez dans votre propre scénario d'application, tout en bénéficiant de ces avantages, si vous pouvez tolérer les effets indésirables qu'il apporte, puis décider de l'utiliser.
Cela dépend de la taille des données. Sous réserve d'une petite quantité, l'utilisation de la structure de données intégrée est l'option la moins chère et la plus efficace.
Dans des conditions de volume de données important, des services noSql prêts à l'emploi doivent être utilisés. Ce n'est pas nécessairement que les composants auto-écrits peuvent avoir des bogues fatals. Un logiciel éprouvé est notre meilleur choix. De plus, ces logiciels disposent tous des fonctions nécessaires pour de gros volumes de données.
n'est pas bon, il vaut mieux utiliser un framework de mise en cache, tel que : ehcache
Seuls ceux qui disposent d'une petite quantité de données utiliseront le cache de structure de données. Après tout, il est stocké dans la mémoire. Si la quantité de données est importante, il n'utilisera certainement que NoSQL
.Vous pouvez vous référer à la conception de HBase.
Le stockage physique HBase est basé sur le format MapFile de HDFS (la nouvelle version implémente HFile elle-même, mais le principe est fondamentalement le même). MapFile est un fichier clé-valeur en lecture seule et ne peut pas être modifié après avoir été écrit une fois. De plus, MapFile exige que toutes les clés du fichier soient triées lors de l'écriture. Dans ce cas, HBase stocke d'abord les données dans MemStore, puis les écrit de manière persistante dans HDFS (MapFile ou HFile) après que MeMStore ait stocké une certaine quantité de données.
Ainsi, votre cache peut être implémenté à l'aide d'une structure de données en mémoire d'un mécanisme de persistance NoSQL. Les deux manières se compensent
Je ne dirai pas si c'est facile à mettre en œuvre. Si vous mettez un grand nombre d'objets directement dans le jvm, vos cheveux deviendront gris au démarrage du programme. Initialisez et chargez une fois à chaque démarrage ! C'est misérable