Je sais que cette question est posée plusieurs fois dans stackoverflow. Je poste cette question pour savoir quel sera le meilleur choix pour mon design. J'ai le schéma suivant pour les détails de mon travail.Dans la base de données relationnelle de mémoire
_unique_key varchar(256) NULL
_job_handle varchar(256) NULL
_data varchar(1024) NULL
_user_id int(11) NULL
_server_ip varchar(39) NULL
_app_version varchar(256) NULL
_state int(11) NULL
_is_set_stopped bool
Quelle est l'opération que nous faisons sur ce tableau:
- Pour chaque travail que nous aurons une mise à jour et 10 requête de sélection sur ce tableau. Nous avons donc besoin de haute fréquence pour lire et écrire.
- Il existe de nombreuses applications qui manipulent ce tableau en faisant filtre:
- _unique_key
- _STATE
- is_set_stopped
- _user_id
- taille du champ _data varie de 5 Ko à 1 Mo en fonction du type d'application et de l'utilisateur.
- L'application peut mettre à jour l'attribut sélectif.
Solution nous avons pensé:
MySQL InnoDB
Je pense que MySQL ne va pas assez échelle en raison de besoins de lecture et d'écriture élevée.
MySQL Dans le tableau mémoire
problème avec cette solution est que
- Il ne supporte pas la taille du champ dynamique. Les tables MEMORY utilisent un format de stockage de ligne de longueur fixe. Les types à longueur variable tels que VARCHAR sont stockés en utilisant une longueur fixe. Source http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
- sélectionnez pour .... la mise à jour verrouillera une table entière. Je ne sais pas ce sera un problème.
Redis
regard Redis aime un bon choix. Mais je pense que ma table n'est pas bonne pour le serveur de cache de valeur clé.
- Il supporte seulement l'ensemble des types de données. Je peux stocker seulement la chaîne dans la liste. J'ai besoin de stocker des champs comme JSON ou un autre format.
- Si les clients veulent mettre à jour un attribut particulier, ils doivent télécharger la valeur complète, puis effectuer l'analyse de l'objet et repasser au serveur. Peut-être que je me trompe est-il un moyen de faire cela?
- Le filtrage basé sur la valeur ne sera pas possible. Peut-être que je me trompe est-il un moyen de faire cela?
MySQL InnoDB sur le système de fichiers TMPFS
Ce regard prometteur. Mais ne le fera-t-il pas assez semblable à Redis ou MySQL dans la table de mémoire.
Quelles sont vos exigences actuelles en matière de vitesse de lecture/écriture? –
@ Joachim Isaksson. Le besoin actuel est de 1380 lectures et écritures par seconde pour une ligne complète et de 6900 lectures par seconde pour la colonne is_set_stopped. Le nombre augmentera en fonction du nombre de tâches augmentées sur le serveur. –
Pourquoi croyez-vous que MySQL avec InnoDB ne peut pas être pertinent? Vous aurez besoin de l'accorder très bien ... –