ho una tabella di un'organizzazione come questa:ricerca dati provenienti da tabelle dinamiche che utilizzano Microsoft SQL Server
OrgID | OrgInviteCode | OrgName | Status | ProjectTableName | InsertOn
-------------------------------------------------------------------------------------------
1 | RC12T67 | Organization1 | Active | Project1 | 2015-12-19 15:37:43.333
2 | BC56uI7 | Organization2 | Active | Project2 | 2015-12-19 15:37:43.333
3 | ORG1456 | Organization3 | Active | Project3 | 2015-12-19 15:37:43.333
4 | ORG2856 | Organization4 | Active | Project4 | 2015-12-19 15:37:43.333
e ho una stored procedure per creare una tabella dinamica per il progetto.
Se una nuova organizzazione viene creato correttamente poi chiamare la stored procedure per creare la tabella di progetto per tale organizzazione.
Ogni organizzazione ha la propria tabella di progetto. Quindi il nome della tabella del progetto è dinamico per ogni organizzazione e il nome è memorizzato nella tabella dell'organizzazione.
Organization1 -> Tavolo Progetto
ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country
-------------------------------------------------------------------------------------------------------------------------------
1 | 1 | Org1Proj1 | XJ34590 | 235 Harrison St. | | Syracuse | AK | 23456234 | US
2 | 1 | Org1Proj2 | JKI8907 | 35 Sterling St. | | Syracuse | NY | 23456456 | US
Organization2 -> Tavolo Progetto
ProjectID | OrgID | ProjectName | ProjectInvideCode | Address1 | Address2 | City |State | ZIP | Country
-------------------------------------------------------------------------------------------------------------------------------
1 | 2 | Org2Proj1 | RUIO90 | 90 Ram St. | | Los Angeles | CA | 23456234 | US
2 | 2 | Org2Proj2 | KLOP907 | 35 Wide St.| | Chicago | IL | 23456456 | US
Attualmente sto lavorando per integrare la funzione di ricerca. Gli utenti o gli utenti anonimi possono cercare i dati in base alla seguente logica:
- Cerca con nome organizzazione o codice di invito organizzazione.
- Cerca con nome progetto o codice invito progetto.
- Ricerca con l'indirizzo del progetto, città, stato, paese
So che è molto semplice trovare i risultati di ricerca nome dell'organizzazione e codice di invito, perché tutto il contenuto è risiede nella stessa tabella.
ma è più complicato per ottenere i risultati di ricerca i progetti (nome o il codice di invito) a causa di nome della tabella dinamica. Ho trovato questo collegamento in How to fetch data from dynamic multiple tables?, quindi penso che non sia una soluzione migliore perché la ricerca deve essere molto veloce.
Il motivo per cui abbiamo separato le tavole di progetto sulla base di organizzazione, perché nel nostro requisito accennano chiaramente che "Abbiamo 1000000 organizzazione, ma ogni organizzazione che ha più di 1 milione di progetti". Spero che tu capisca il concetto che non vogliamo scaricare i progetti 1000000 (Organizzazione) * 1 milione = XXXXXX in un'unica tabella.
Domande:
- Come possiamo cercare i dati dei progetti in modo efficace?
- Il nostro concetto di tabella separata è il peggiore? Hai qualche suggerimento da gestire molto meglio?
- C'è un modo efficace in C#?
strumenti e la tecnologia:
- Asp.Net 4.5, C#
- MVC codice 5
- Entity Framework prima
- SQL Server 2012
Per curiosità, perché non vuoi scaricare organizzazioni 1M con progetti 1M in una sola tabella? Voglio dire, sembra un sacco di dati, quindi invece di hackerare via con SQL Server e le tabelle 1T, forse hai bisogno di un'architettura di database ad alte prestazioni distribuita? –
@KeithPayne AFAIK non ha senso mantenere i dati in una singola tabella. Sappiamo già che i dati sono molto grandi, quindi mentre costruiamo da zero dobbiamo progettare il database con i dati, la scalabilità, le prestazioni ecc. – Chandru
Quanti tavoli pensi di avere? 1 milione di organizzazioni x 1 milione di progetti = 1 trilione. Vuoi progettare il sistema per gestire 1 trilione di tavoli? Hai controllato le specifiche sui massimi di SQL Server? E poi, come indicizzerai il tuo elenco di tavoli? Un indice ordinato deve essere mantenuto da qualche parte in modo da poter associare la tabella con il progetto org +. Dove verrà memorizzato l'indice? –