2012-05-13 3 views
0

J'essaye de construire un système en utilisant Java et MySQL 5.1.63 GA où il y a quelques tables d'entrée et quelques tables de sortie dans la base de données.
Pour remplir des tables de sortie, j'ai écrit une procédure qui sera appelée à partir du servlet et générera beaucoup de tables intermédiaires avant de remplir les tables de sortie. Il y a beaucoup de calculs et peut prendre du temps même jusqu'à une minute.Décharger des calculs à la base de données

Les tables d'entrée et de sortie fonctionnent en utilisant user_id mais les tables intermédiaires contiennent simplement des colonnes de valeurs.

Mais j'ai des préoccupations suivantes:
1) que se passe-t-il si deux utilisateurs déclenchent une séquence de calcul à la fois, comment puis-je protéger les tables intermédiaires?

2) Puis-je utiliser d'autres techniques comme des tables temporaires, etc.?

+1

Vous mentionnez MySQL 5.3 - qui est une version non-existant (au moins pas officiellement) et vous mentionnez que vous utilisez et PL/SQL - qui est le langage procédural de la base de données Oracle. C'est très déroutant. –

+0

Désolé pour la coufusion. Edité la question. Merci. – sachin

Répondre

1

Pour isoler chaque utilisateur, tous les calculs intermédiaires doivent être effectués dans des tables temporaires. Par la documentation MySQL:

Une table TEMPORARY est visible uniquement pour la connexion en cours et est supprimée automatiquement lorsque la connexion est fermée. Cela signifie que deux connexions différentes peuvent utiliser le même nom de table temporaire sans conflit entre elles ou avec une table non-TEMPORARY existante du même nom.

Tant que les tables d'entrée et de sortie sont toutes séparées par user_id, cela devrait fonctionner. Changer votre code pour utiliser des tables temporaires peut également être très facile. La plupart du temps tout ce que vous aurez à faire est d'ajouter le mot TEMPORARY à vos CREATE TABLE déclarations comme ceci:

CREATE TEMPORARY TABLE foo [...] 
Questions connexes