Discussione:
numero di tabelle gestibili con MySql
(troppo vecchio per rispondere)
alfio_zamuner
2008-09-17 09:42:57 UTC
Permalink
Quindi, con MYSql puoi creare tranquillamente oltre un miliardo di
Tabelle.
Ma quante puoi gestirne contemporaneamente?
Mi spiego.
Io creo un database con al suo interno 100 tabelle.
Quindi voglio creare un motore di ricerca relativo a queste 100
tabelle. E' possibile questo?
Io ho letto su libro dedicato a MySql che con MySql può essere gestito
un massimo di 31 tabelle, per cui posso si crearne in pratica quante
ne voglio, ma non le posso gestire tutte insieme, o meglio posso
gestirne contemporaneamente un massimo di 31.

E' corretto?
Grazie in anticipo per la risposta.
PadovaBoy (ovvero Giovanni)
2008-09-17 10:44:58 UTC
Permalink
Post by alfio_zamuner
Quindi, con MYSql puoi creare tranquillamente oltre un miliardo di
Tabelle.
Ma quante puoi gestirne contemporaneamente?
Mi spiego.
Io creo un database con al suo interno 100 tabelle.
Quindi voglio creare un motore di ricerca relativo a queste 100
tabelle. E' possibile questo?
Io ho letto su libro dedicato a MySql che con MySql può essere gestito
un massimo di 31 tabelle, per cui posso si crearne in pratica quante
ne voglio, ma non le posso gestire tutte insieme, o meglio posso
gestirne contemporaneamente un massimo di 31.
E' corretto?
Grazie in anticipo per la risposta.
Credo che dovresti interrogarti sul significato di "gestire"
contemporaneamente tabelle.

Non conosco il limite 31.

Posso però provare a avanzare una interpretazione:
credo tu voglia interrogare N tabelle contemporaneamente per recuperare
da tutte queste tabelle dei valori filtrati tramite clausole.

Tutto ciò corrisponde alla struttura del SELECT.

Onestamente non ho ne mai letto ne mai domandato quale fosse il limite
delle join (parola chiave per "collegare" più tabelle in una select) che
si possono fare in una query di select.

Cmq se crei un motore di ricerca con 31 o più select, hai un problema
architetturale più che di limitazione del database.

Dovresti studiarti una introduzione al mondo dei database, ho idea che
il tuo problema siano i preconcetti.
--
Giovanni
------------------------------

Xbox360 Live Tag: PadovaBoy
WiiTag: neanche io lo so
GOW TAG: pappa per Criceti

PadovaBoy crocciola padovaboy DOT it

www.padovaboy.it dal 2001 con furore ;)

Dicono di me: che sia femmina e di pordenone...starà a voi crederci
Corrado Pandiani
2008-09-17 12:07:14 UTC
Permalink
Post by PadovaBoy (ovvero Giovanni)
Post by alfio_zamuner
Quindi, con MYSql puoi creare tranquillamente oltre un miliardo di
Tabelle.
Ma quante puoi gestirne contemporaneamente?
Mi spiego.
Io creo un database con al suo interno 100 tabelle.
Quindi voglio creare un motore di ricerca relativo a queste 100
tabelle. E' possibile questo?
Io ho letto su libro dedicato a MySql che con MySql può essere gestito
un massimo di 31 tabelle, per cui posso si crearne in pratica quante
ne voglio, ma non le posso gestire tutte insieme, o meglio posso
gestirne contemporaneamente un massimo di 31.
E' corretto?
Grazie in anticipo per la risposta.
Credo che dovresti interrogarti sul significato di "gestire"
contemporaneamente tabelle.
Non conosco il limite 31.
credo tu voglia interrogare N tabelle contemporaneamente per recuperare
da tutte queste tabelle dei valori filtrati tramite clausole.
Tutto ciò corrisponde alla struttura del SELECT.
Onestamente non ho ne mai letto ne mai domandato quale fosse il limite
delle join (parola chiave per "collegare" più tabelle in una select) che
si possono fare in una query di select.
Cmq se crei un motore di ricerca con 31 o più select, hai un problema
architetturale più che di limitazione del database.
Dovresti studiarti una introduzione al mondo dei database, ho idea che
il tuo problema siano i preconcetti.
Il limite a cui ti riferisci non è 31 ma 61.

In una query in MySQL puoi fare il JOIN di al massimo 61 tabelle. Anche
gli altri DBMS hanno limiti analoghi, chi più chi meno. Non esiste che
io sappia un DBMS che possa fare JOIN con un numero illimitato di tabelle.

In ogni caso concordo con PadovaBoy: pensare di dover fare singole
interrogazioni con oltre 61 tabelle deve trovare una solida
giustificazioe a livello architetturale altrimenti ha generalmente poco
senso.

Sarà il caso di ripensare bene il progetto nel suo insieme.
--
Corrado Pandiani
MySQL 5 DBA Certified
MySQL 5 Developer Certified
http://blog.pandiani.com
http://www.pandiani.com
alfio_zamuner
2008-09-17 17:10:53 UTC
Permalink
Post by Corrado Pandiani
Post by PadovaBoy (ovvero Giovanni)
Post by alfio_zamuner
Quindi, con MYSql puoi creare tranquillamente oltre un miliardo di
Tabelle.
Ma quante puoi gestirne contemporaneamente?
Mi spiego.
Io creo un database con al suo interno 100 tabelle.
Quindi voglio creare un motore di ricerca relativo a queste 100
tabelle. E' possibile questo?
Io ho letto su libro dedicato a MySql che con MySql può essere gestito
un massimo di 31 tabelle, per cui posso si crearne in pratica quante
ne voglio, ma non le posso gestire tutte insieme, o meglio posso
gestirne contemporaneamente un massimo di 31.
E' corretto?
Grazie in anticipo per la risposta.
Credo che dovresti interrogarti sul significato di "gestire"
contemporaneamente tabelle.
Non conosco il limite 31.
credo tu voglia interrogare N tabelle contemporaneamente per recuperare
da tutte queste tabelle dei valori filtrati tramite clausole.
Tutto ciò corrisponde alla struttura del SELECT.
Onestamente non ho ne mai letto ne mai domandato quale fosse il limite
delle join (parola chiave per "collegare" più tabelle in una select) che
si possono fare in una query di select.
Cmq se crei un motore di ricerca con 31 o più select, hai un problema
architetturale più che di limitazione del database.
Dovresti studiarti una introduzione al mondo dei database, ho idea che
il tuo problema siano i preconcetti.
Il limite a cui ti riferisci non è 31 ma 61.
In una query in MySQL puoi fare il JOIN di al massimo 61 tabelle. Anche
gli altri DBMS hanno limiti analoghi, chi più chi meno. Non esiste che
io sappia un DBMS che possa fare JOIN con un numero illimitato di tabelle.
In ogni caso concordo con PadovaBoy: pensare di dover fare singole
interrogazioni con oltre 61 tabelle deve trovare una solida
giustificazioe a livello architetturale altrimenti ha generalmente poco
senso.
Sarà il caso di ripensare bene il progetto nel suo insieme.
--
Corrado Pandiani
MySQL 5 DBA Certified
MySQL 5 Developer Certifiedhttp://blog.pandiani.comhttp://www.pandiani.com- Nascondi testo citato
- Mostra testo citato -
OK, grazie per la risposta.
Il mio progetto dovrà purtroppo contenere molte tabelle, perchè per me
è il modo più semplice per poi andare a fare delle modifiche.
L'unico mio dubbio era legato alla ricerca all'interno di queste
tabelle. Però discutendo anche con un altra persona abbiamo appurato
che in ogni caso per una ricerca in loop si utilizza in pratica 1
tabella per volta, per cui non ho il problema del limite, che si
potrebbe creare se e solo se tutti gli utenti accedono al mio sito e
fanno la ricerca contemporaneamente nello stesso istante, cosa però
molto improbabile.
Anche perchè la ricerca sarà molto semplice: tutte le tabelle avranno
una struttura identica e solo 1 colonna (la stessa per tutte) sarà
quella interessata per la ricerca.
PadovaBoy (ovvero Giovanni)
2008-09-17 17:46:42 UTC
Permalink
Post by alfio_zamuner
Anche perchè la ricerca sarà molto semplice: tutte le tabelle avranno
una struttura identica e solo 1 colonna (la stessa per tutte) sarà
quella interessata per la ricerca.
@Corrado: grandissimo! non sapevo del limite di 61, in effetti non l'ho
mai letto o forse l'ho scartata come info visto che mi sembra ben
lontano dalle mie esigenze.

@alfio:

Ora però sono curioso: se hanno la struttura identica non sarebbe meglio
creare una unica tabella e differenziarle per il valore di una ulteriore
colonna?

L'unica cosa che mi viene in mente come motivazione per lo
"spezzettamento" in più tabelle è che vi sia un numero estremamente
elevato di dati da richiedere l'indicizzazione separata. Il che è
piuttosto al limite (credo: aspetti così avanzati non li ho studiati).
Oppure per una questione di locking e di transazionalità.

Si può sapere il genere del progetto?
--
Giovanni
------------------------------

Xbox360 Live Tag: PadovaBoy
WiiTag: neanche io lo so
GOW TAG: pappa per Criceti

PadovaBoy crocciola padovaboy DOT it

www.padovaboy.it dal 2001 con furore ;)

Dicono di me: che sia femmina e di pordenone...starà a voi crederci
Corrado Pandiani
2008-09-17 21:18:59 UTC
Permalink
Post by PadovaBoy (ovvero Giovanni)
@Corrado: grandissimo! non sapevo del limite di 61, in effetti non l'ho
mai letto o forse l'ho scartata come info visto che mi sembra ben
lontano dalle mie esigenze.
sulla documentazione ufficiale
http://dev.mysql.com/doc/refman/5.0/en/joins-limits.html
--
Corrado Pandiani
MySQL 5 DBA Certified
MySQL 5 Developer Certified
http://blog.pandiani.com
http://www.pandiani.com
alfio_zamuner
2008-09-18 09:53:46 UTC
Permalink
Post by PadovaBoy (ovvero Giovanni)
Si può sapere il genere del progetto?
--
Questo è il sito di riferimento: www.lppcollecting.it
E' stato fatto fino ad oggi senza un database, e adesso stiamo
lavorando per metterne uno.
Ce ne sarà uno per ogni sezione (uno per la rossa, uno per la gialla
ecc), visto anche che ogni sezione farà storia a se.
La necessità di avere un bel numero di tabelle è data dal fatto che
ogni sezione principale è divisa a sua volta da tante sottosezioni
(determinate dalla espansioni delle carte) per cui viene creata una
tabella per gestire in modo semplice ogni sottosezione, considerando
che ogni tabella avrà da un 60 fino a 250 righe. In questo modo ogni
volta che dovrò andare a cambiare un prezzo (cosa che avviene tutti i
giorni o quasi) non avrò difficoltà a trovare il punto dove devo fare
la modifica.
Con un'unica tabella, mi trovo ad avere una lista di oltre 3000
articoli, alcuni anche con lo stesso nome, e capisci che andare a
cambiare un prezzo qui è molto più complicato, per quanto ci arrivo
comunque nel punto desiderato.
Inoltre gestire una tabella di 3000 articoli per visualizzarne in una
pagina 30 al max è molto più complicato che non avere una tabella con
in media 100 articoli, peraltro di una sola sottosezione.

Il motore di ricerca poi dovrà avere un compito abbastanza semplice,
visto che le ricerche riguarderanno solo la colonna con il nome
dell'articolo, e non le altre (prezzo, codice, ecc).

Spero di aver spiegato bene il mio progetto :)
P.S.Considera che fino a poco meno di un mese fa di PHP e MySQL non
sapevo nulla, mi sono però documentato bene nel frattempo! Quella che
è la struttura tabella è già pronta e la visualizzazione sarà la
stessa che hai adesso on-line (solo che adesso è in pratica tutto Html
senza DB). Questa però è la parte facile, adesso le cose si comlicano
un pochino visto che prima dobbiamo metterci la ricerca e poi, una
volta che tutto funziona, sarà la volta del carrello della spesa. Per
questo aspetto più avatnti, un passo alla volta!
PadovaBoy (ovvero Giovanni)
2008-09-18 14:52:03 UTC
Permalink
Post by alfio_zamuner
Post by PadovaBoy (ovvero Giovanni)
Si può sapere il genere del progetto?
--
Questo è il sito di riferimento: www.lppcollecting.it
E' stato fatto fino ad oggi senza un database, e adesso stiamo
lavorando per metterne uno.
Ce ne sarà uno per ogni sezione (uno per la rossa, uno per la gialla
ecc), visto anche che ogni sezione farà storia a se.
La necessità di avere un bel numero di tabelle è data dal fatto che
ogni sezione principale è divisa a sua volta da tante sottosezioni
(determinate dalla espansioni delle carte) per cui viene creata una
tabella per gestire in modo semplice ogni sottosezione, considerando
che ogni tabella avrà da un 60 fino a 250 righe. In questo modo ogni
volta che dovrò andare a cambiare un prezzo (cosa che avviene tutti i
giorni o quasi) non avrò difficoltà a trovare il punto dove devo fare
la modifica.
Con un'unica tabella, mi trovo ad avere una lista di oltre 3000
articoli, alcuni anche con lo stesso nome, e capisci che andare a
cambiare un prezzo qui è molto più complicato, per quanto ci arrivo
comunque nel punto desiderato.
Inoltre gestire una tabella di 3000 articoli per visualizzarne in una
pagina 30 al max è molto più complicato che non avere una tabella con
in media 100 articoli, peraltro di una sola sottosezione.
Devo dire che come idea è interessante.
Mi viene male al pensiero solo delle prime leggi della normalizzazione
ma ha il suo senso.

Diciamo che hai "semplificato" la struttura del database per sopperire
alle tue mancanze di conoscenza di php.

Non è malvagia, ed è pur sempre una scelta.

Quello che ti giochi così però è la flessibilità: domani introdurre la
vendita online o altri aspetti sarà un suicidio.

Solitamente in questi casi si costruisce una tabella in cui vengono
inserite tante colonne quanti sono i dettagli di tutti i tipi di
prodotto (nome, taglia, prezzo e altro).
Poi viene magari aggiunta una o più colonne che faranno riferimento ad
altre tabelle contenti relazioni con categorie, sottocategorie, key etc..

A mio avviso dovresti pensare meglio alla struttura se un domani non
vuoi perdere un bel pò di tempo a ricucire il tutto senza perdere dati.
--
Giovanni
------------------------------

Xbox360 Live Tag: PadovaBoy
WiiTag: neanche io lo so
GOW TAG: pappa per Criceti

PadovaBoy crocciola padovaboy DOT it

www.padovaboy.it dal 2001 con furore ;)

Dicono di me: che sia femmina e di pordenone...starà a voi crederci
alfio_zamuner
2008-09-19 11:07:02 UTC
Permalink
On 18 Set, 16:52, "PadovaBoy (ovvero Giovanni)"
Post by PadovaBoy (ovvero Giovanni)
Post by PadovaBoy (ovvero Giovanni)
Si può sapere il genere del progetto?
--
Questo è il sito di riferimento:www.lppcollecting.it
E' stato fatto fino ad oggi senza un database, e adesso stiamo
lavorando per metterne uno.
Ce ne sarà uno per ogni sezione (uno per la rossa, uno per la gialla
ecc), visto anche che ogni sezione farà storia a se.
La necessità di avere un bel numero di tabelle è data dal fatto che
ogni sezione principale è divisa a sua volta da tante sottosezioni
(determinate dalla espansioni delle carte) per cui viene creata una
tabella per gestire in modo semplice ogni sottosezione, considerando
che ogni tabella avrà da un 60 fino a 250 righe. In questo modo ogni
volta che dovrò andare a cambiare un prezzo (cosa che avviene tutti i
giorni o quasi) non avrò difficoltà a trovare il punto dove devo fare
la modifica.
Con un'unica tabella, mi trovo ad avere una lista di oltre 3000
articoli, alcuni anche con lo stesso nome, e capisci che andare a
cambiare un prezzo qui è molto più complicato, per quanto ci arrivo
comunque nel punto desiderato.
Inoltre gestire una tabella di 3000 articoli per visualizzarne in una
pagina 30 al max è molto più complicato che non avere una tabella con
in media 100 articoli, peraltro di una sola sottosezione.
Devo dire che come idea è interessante.
Mi viene male al pensiero solo delle prime leggi della normalizzazione
ma ha il suo senso.
Diciamo che hai "semplificato" la struttura del database per sopperire
alle tue mancanze di conoscenza di php.
Non è malvagia, ed è pur sempre una scelta.
Quello che ti giochi così però è la flessibilità: domani introdurre la
vendita online o altri aspetti sarà un suicidio.
Solitamente in questi casi si costruisce una tabella in cui vengono
inserite tante colonne quanti sono i dettagli di tutti i tipi di
prodotto (nome, taglia, prezzo e altro).
Poi viene magari aggiunta una o più colonne che faranno riferimento ad
altre tabelle contenti relazioni con categorie, sottocategorie, key etc..
A mio avviso dovresti pensare meglio alla struttura se un domani non
vuoi perdere un bel pò di tempo a ricucire il tutto senza perdere dati.
--
Giovanni
------------------------------
Xbox360 Live Tag: PadovaBoy
WiiTag: neanche io lo so
GOW TAG: pappa per Criceti
PadovaBoy crocciola padovaboy DOT it
www.padovaboy.itdal 2001 con furore ;)
Dicono di me: che sia femmina e di pordenone...starà a voi crederci- Nascondi testo citato
- Mostra testo citato -
Infatti noi stiamo già strutturando le tabelle in previsione futura,
per cui nella colonna disponibilità mettiamo 1 oppure 0 a seconda se
il prodotto è disponibile oppure no.
Poi con una funzione gli facciamo scrivere disponibile oppure no.
In futuro questa funzione metterà l'icona del carrello verde se
disponibile oppure quella rossa se non disponibile. Per cui sull'icona
rossa non ci potrai cliccare, mentre su quella verde ci clicchi ed
invii al carrello le 3 info che interessano per "fare la spesa" e cioè
codice, articolo e prezzo, poi la quantità l'utente se la modifica nel
carrello.
La nostra fortuna è quella che abbiamo migliaia di articoli da
gestire, ma in sostanza con gli stessi parametri. E la struttura di
ogni sezione in sostanza è la stessa.
Chiaro che si potrebbe gestire anche tutta la struttura del sito via
batabase, ma per il momento ci accontentiamo, visto anche che
l'esperienza la si fa con il tempo ed al momento ne abbiamo ancora
poca ^_^
In futuro poi probabile che ci potranno essere delle modifiche alle
tabelle, anche se noi, mentre le costruiamo adesso, stiamo già
ragionando su tutte le colonne che ci possono servire, anche quelle
che poi non visualizziamo nella pagina che vede l'utente. Per cui
cerchiamo comunque di fare una struttura che in futuro deve subire il
minor numero di modifiche o addirituttra nessuna.

Grazie a tutti per i consigli, se me ne serviranno altri, non esisterò
a chiedere ^_^

Corrado Pandiani
2008-09-17 21:11:15 UTC
Permalink
Post by alfio_zamuner
tabella per volta, per cui non ho il problema del limite, che si
potrebbe creare se e solo se tutti gli utenti accedono al mio sito e
fanno la ricerca contemporaneamente nello stesso istante, cosa però
molto improbabile.
Attenzione, stai facendo un po' di confusione. Una cosa è il numero di
tabelle che puoi scrivere nel FROM di una query; cosa ben diversa è
invece il livello di concorrenza degli utenti... le due cose non sono in
relazione tra loro.

Per fortuna, sul numero di utenti che possono eseguire una data query o
più query in maniera concorrente non ci sono limiti imposti a priori. Il
limite è raggiunto (e lo puoi stabilire sperimentalmente) solo dal
momento in cui il server si pianta, e ciò dipende principalmente dai
seguenti fattori:
- potenza del server (RAM, CPU, dischi)
- progetto logico del database (normalizzazione)
- progetto fisico delle tabelle
- query scritte bene ed ottimizzate
- server MySQL configurato bene
- presenza di eventuali soluzioni di suddivisione del carico (replicazione)

Se hai una macchina potente e tutto il resto è fatto bene, non ci sono
problemi a gestire la concorrenza di diverse centinaia di utenti, anche
nel caso in cui eseguissero tutti insieme la stessa query di SELECT.

ciao
--
Corrado Pandiani
MySQL 5 DBA Certified
MySQL 5 Developer Certified
http://blog.pandiani.com
http://www.pandiani.com
Loading...