Java自带的数据结构(如HashMap,BitSet等)做缓存和NoSQL(如Redis,MongoDB等)做缓存哪种好?
PHP中文网
PHP中文网 2017-04-17 17:57:01
0
6
576

我了解的差别有:

  • 自带的数据结构:不用和缓存服务器建立通信,效率可能会更高?

  • NoSQL:集群环境下,业务服务器的缓存数据不能共享,存在资源浪费。而NoSQL的数据可以共享给业务服务器。

不知道还有没有其他差别,主要是发现现在的项目中部署了多台服务器,但是每台服务器的缓存数据都是一样的,而且请求是不走数据库的,有个定时任务会去同步数据库中的数据到缓存中。如果仅仅为了提高系统的QPS,是否应该使用NoSQL去做缓存?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(6)
洪涛

À 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.

Peter_Zhu

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal