Quand dois-je envisager d'utiliser une base de données dans la mémoire et ce sont la question à surveiller?

StackOverflow https://stackoverflow.com/questions/1593692

Question

Je viens pense que maintenant il est commun d'avoir assez de RAM sur votre serveur de base de données pour mettre en cache votre base de données complète Pourquoi le spécialiste base de données mémoire (par exemple TimesTen , vous pouvez aussi Wikipedia ) tous ceux qui étaient les rage il y a quelques années ne sont pas plus utilisés?

Il semble que le temps aller sur des bases de données à base de disque ne sont utilisés moins, la plupart des applications sont par exemple maintenant construites sur des bases de données rationnelles conventionnelles. Je me serais attendu à l'opposé que la RAM se rapproche de être libre pour un grand nombre de serveurs.

Je demande, comme je viens de lire sur la pile débordement architecture et la page dit

  

Ceci est important parce que la pile   La base de données de débordement est presque   complètement dans la RAM et les jointures encore   exact un coût trop élevé.

Mais je ne pense pas que ce serait un problème si « pointeurs » et « collections » ont été utilisées à la place de la btree normale. Btree sont un très intelligent pour obtenir des limites rondes sur la vitesse d'accès au disque, par exemple ils font le commerce useage CPU pour réduire l'utilisation du disque. Cependant, nous avons donc correspondre ram.

Mais nous avons encore besoin base de données, faire votre propre

  • Verrouillage
  • Détection Deadlock
  • journalisation des transactions
  • Récupération
  • Etc

est très difficile.

@ S. Lott, étant donné que nous passons tous si longtemps le choix des index, évitant les jointures et l'étude des problèmes de performance de base de données. Il doit y avoir une meilleure façon. Il y a quelques années on nous a dit les « bases de données dans la mémoire » était la meilleure façon. Donc, avant de sauter en utilisant un etc, je voudrais savoir pourquoi les autres ne les utilisent pas plus.

(je suis peu susceptible d'utiliser TimesTen moi-même, car il est à prix élevé ( alternatif au TimesTen dans la base de données de mémoire

  • Quelqu'un at-il publié une comparaison détaillée entre différents SGBDR en mémoire ?
  • Mise à jour:

    J'ai posé cette question un LONG il y a, ces jours Microsoft SQL Server ont "

    Autres conseils

    personne n'a vraiment répondu à la question « Quand dois-je envisager d'utiliser une base de données dans la mémoire et ce sont la question à surveiller? » donc je vais donner un aller.

    Vous devriez considérer une base de données en mémoire si:   1. Le système cible a des données à gérer, mais pas les médias persistants   2. L'exigence de performance tout simplement ne peut pas être satisfaite avec une base de données persistante

    Pour # 1, pensez du Guide TV dans votre décodeur (STB). STB bas de gamme (à savoir ceux qui ont pas de capacité DVR) n'ont pas un stockage persistant, et ne nécessitent pas un stockage persistant. Mais la base de données pour 400 canaux, Guide TV 14 jours est non négligeable. Il y a une exigence de performance ici aussi, parce que les données arrivent du carrousel de transpondeur à une vitesse élevée et il est un cas de «capturer ou d'attendre jusqu'à ce que le carrousel sera de nouveau. Mais il n'y a pas besoin de persévérance. Nous avons tous vu cela; quand vous perdez le pouvoir à la maison, quand il revient sur le Guide TV dit « sera disponible sous peu », car il est lui-même l'approvisionnement du transpondeur ou d'un câble tête de. routeurs de réseau partagent les mêmes caractéristiques: pas de stockage persistant, besoin d'être rapide, et la base de données peut être provisionné à partir d'une source externe (routeurs pairs sur le réseau, dans ce cas, pour repeupler la table de routage)

    .

    Il y a d'innombrables exemples de # 2:. En temps réel dans les systèmes militaires ciblant, les systèmes de trading à haute fréquence, et plus

    En ce qui concerne la deuxième partie de la question, « question à surveiller ». Il y a beaucoup

    Assurez-vous d'évaluer une véritable base de données en mémoire si vous avez besoin de la performance que seule une base de données en mémoire peut fournir. Mise en cache une base de données persistante est pas la même chose. Lancer une base de données persistante dans un lecteur RAM est pas la même chose. En utilisant une base de données en mémoire qui fait intrinsèquement la journalisation des transactions (comme TimesTen) ne sont pas les mêmes (même si vous n'êtes pas connecté à / dev / null).

    Assurez-vous de l'évaluation d'un système de base de données, et non pas simplement un cache (par exemple memcache). Un système de base de données aura un support pour les transactions avec les propriétés ACID, les options d'indexation multiples, soutenir l'accès simultané et plus.

    A propos de l'acide: systèmes de base de données en mémoire ne manquent pas le « D » (durabilité). Il doit simplement être pris dans leur contexte. Les transactions dans une base de données persistantes ne sont durables tant que les médias, il est stocké sur est durable. La même chose est vraie pour les bases de données en mémoire. Dans les deux cas, si vous vous souciez de la durabilité, il vaut mieux avoir une sauvegarde.

    La raison la plus importante est la culture de la cargaison, et le très faible niveau de connaissances en informatique. La plupart des applications fonctionnent suffisamment bien quelle que soit la solution de persistance utilisée, et que les ordinateurs sont encore plus rapidement chaque année, pas assez de gens se sentent la douleur et sont capables de repérer le problème.

    Microsoft et Oracle font trop d'argent avec leurs produits de base de données pour le rendre (politiquement) possible pour eux de venir avec de meilleures approches.

    Les coûts de développement de l'utilisation d'une base de données relationnelle ne sont pas rendues transparentes afin que la direction n'a aucune idée qu'il ya un problème, et encore moins une solution.

    Eh bien, en mémoire des bases de données manquent généralement D (durabilité) ACIDE (atomicité, cohérence, isolation , durabilité) par leur nature même. Cela peut être surmonté dans une certaine mesure avec les approches « hybrides », cependant, à quelque chose du point (soit les données lui-même, ou un journal des transactions) doit être persisté quelque part pour fournir l'aspect de la durabilité. Cela peut généralement ralentir les performances ou d'introduire d'autres propriétés non souhaitables à une solution de base de données en mémoire

    En revanche, la plupart des SGBDR années d'aujourd'hui ont le complément plein d'ACID, ainsi que d'avoir plusieurs dizaines d'années de développement derrière eux. Cela a donné lieu à des systèmes de bases de données sur disque qui sont très performants, en particulier avec les nombreuses années d'améliorations et optimisations système de SGBDR moderne ont vu (votre exemple de BTree étant juste un des nombreux).

    Un autre facteur est notre capacité en tant que développeurs d'applications pour réduire la charge sur la base de données par des mécanismes tels que mise en cache , serrant ainsi beaucoup plus perçu performances de la couche d'une application de données. En effet, la mise en cache elle-même a connu des évolutions importantes ces dernières années avec la mise en cache distribuée étant commun de nos jours (il suffit de regarder le nombre de cet article wikipedia , Microsoft sont regardant entrer dans le marché des bases de données en mémoire assez rapidement. Ce sont deux dans le domaine de SGBDR traditionnel modernes « grands joueurs » qui prennent des systèmes de bases de données en mémoire au sérieux.

    Ceci est également une option: http://www.memsql.com/

    Je ne l'ai pas utilisé personnellement, mais il est censé être le long des lignes d'un remplacement de drop-in pour MySQL en mémoire.

    Différentes versions portables de SQL, qui fonctionnent avec la même efficacité, conçus pour les appareils mobiles principalement.

    SQLite

    SQL Server Compact Edition

    Ce ne sont que de grands joueurs d'autres options peuvent être là, mais les grands joueurs gèrent les exigences minimales à libération de celui-ci ..:)

    et dans la base de mémoire, vous avez en permanence sauvegardez les données en cas de fluctuation ou powercut se pose vous pouvez perte tout le groupe. comme dans les autres éléments qui seront traitées comme dans la mémoire secondaire (HDD) et les risques de perte sera de 10% comparé à la mémoire DB.

    J'espère que cela peut aider:)

    Le cas d'utilisation le plus typique pour une base de données est la persistance, ce qui rend la plupart des bases de données en mémoire ne convient pas. L'une des raisons populaires d'utiliser une base de données en mémoire est à des fins de test. Mais cela exige que vous utilisez soit une base de données qui peut être mis en place à la fois comme en mémoire et autre chose.

    Les choix populaires dans ce domaine semble être RavenDB pour les développeurs .Net et OrientDB pour les développeurs Java. Parce que les deux peuvent fonctionner comme en mémoire des bases de données, et « autre chose » en fonction de la configuration, de sorte que vous pouvez utiliser l'un ou l'autre en fonction de votre configuration (app.config en .Net, Maven ou Ant paramètres en Java).

    besoins de traitement des données deviennent plus complexes et l'écosystème de produits évolue pour répondre à ces nouveaux besoins. SGBDR sur disque, le cache en mémoire, et les bases de données en mémoire sont utilisées pour satisfaire des besoins différents. Vous devriez aller avec ce qui convient à vos besoins -

    SGBDR traditionnelle:. Votre cluster MySQL est assez rapide, assez facile à entretenir, et vous aimez avoir la fiabilité ACID-conformité

    distribué en mémoire cahce: Votre application doit faire des lectures rapides et écrit sans se soucier trop de cohérence ou de transactions complexes.

    en mémoire SGBDR:

    1. ( Vitesse ). Votre application doit traiter les données / demandes plus rapidement que votre base de données sur disque peut
    2. ( complexité ). Vous devez faire des transactions complexes lit et écrit avec des jointures et agrégations et aiment utiliser la puissance de SQL
    3. ( Évolutivité ): Vous devez adapter votre base de données horizontalement sans temps d'arrêt.
    4. ( maintenabilité ). Vous avez besoin de la base de données pour fournir une haute disponibilité, la réplication, l'équilibrage de charge et la reprise après incident sans ajouter à vos tâches d'entretien
    5. ( caveat ). Vos données doivent tenir dans la mémoire (généralement en téraoctets)
    Licencié sous: CC-BY-SA avec attribution
    Non affilié à StackOverflow
    scroll top