Possibili problemi di prestazioni che implementano il database multi-tenant?

4

Mi piacerebbe progettare e sviluppare applicazioni scolastiche usando PHP e MySQL come backend. Il frontend - una combinazione di HTML, JS e CSS - ha un modulo di registrazione per ogni scuola.

Ogni scuola ha i suoi studenti, classi, insegnanti e simili. Vorrei utilizzare un singolo database con una tabella studenti con una colonna client che si riferisce al proprietario di ogni record.

e'g: sutd_id, client_id, first_name, last_name......

e'g: class_id, client_id, description, blahblah....

Domanda 1

Una clausola WHERE con troppi parametri influisce sul rendimento? Voglio dire che pensa come WHERE id='blah' AND class_ID='blah' AND client_id='blah' AND enroll_date between 'time' AND 'AGO' .

Se il caso che influisce sulle prestazioni, ho pensato di creare visualizzazioni per ogni nuovo client, esempio : quando si verifica una nuova registrazione riuscita, creerò un po 'di views in più nel database da usando il nome univoco del nuovo cliente.
e'g: nuovo cliente che è abc è registrato rispetto a automaticamente creerò questi views : ( abc_students , abc_classes.... )

Domanda 2

Questo approccio (quello con le viste) influenzerebbe le prestazioni o la precisione dei risultati?

Domanda 3

C'è un altro modo per aumentare le prestazioni, oltre alla creazione di viste?

    
posta superuserdo 26.04.2016 - 13:28
fonte

2 risposte

1

Le viste non sono d'aiuto per le prestazioni; sono effettivamente solo domande con un nome. Anzi, potrebbero effettivamente peggiorare le cose e, IIRC, MySQL soffre di questo "View overhead".

Gli indici sono ciò che stai cercando.

L'indicizzazione sensibile può rendere milioni di righe altrettanto reattivi di una manciata di essi.
Non lasciarti trasportare, però. Mentre gli indici scelti con cura accelerano la selezione, devono essere modificati da ogni inserimento ed eliminazione (e, eventualmente, aggiornamento) in modo che più di essi abbiano, più lentamente il tuo traffico di aggiornamento potrebbe diventare .

L'indicizzazione, come la maggior parte delle cose del database-y, è un "atto di bilanciamento". Devi provare le cose e vedere cosa è "migliore" per le tue esigenze.

    
risposta data 26.04.2016 - 13:44
fonte
0

Se vuoi partizionare i dati per scuola / cliente, probabilmente vorrai guardare schemi invece di viste. Uno schema inserirà le tabelle (e gli indici, i trigger, ecc.) In uno spazio dei nomi separato. A seconda del database che si utilizza, si potrebbe essere in grado di mettere schemi individuali in file separati, che dovrebbero darti la possibilità di mettere singole scuole / clienti su dischi separati se uno o più di essi crescono abbastanza grandi da richiederlo. Si noti, tuttavia, che mentre è possibile utilizzare lo stesso modello di dati nell'applicazione per tutti gli schemi, se si modifica una definizione di tabella, sarà necessario modificare la tabella in ogni schema singolarmente.

    
risposta data 26.04.2016 - 15:16
fonte