Come gli esperti programmano i loro database?

2

Diciamo che creo il mio sito web e progettiamo un forum di discussione. Ora, ho più tipi di utenti nel mio sistema e milioni di account per tipo di utente. Dato che il sito è molto popolare, ogni secondo vengono creati centinaia di nuovi thread. Le persone pubblicano su questi thread (per ora limitano solo il testo) in modo che ogni thread ottenga oltre 100 post al minuto.

Quindi, se creo una singola tabella denominata filo, e aggiungere un nuovo record ogni volta che viene creato un nuovo thread, e associarlo a un tavolo i messaggi in modo che tutti i messaggi che appartengono a quel filo utilizzare è ID come chiave esterna, credo il database si piegherà sulle ginocchia in poche settimane.

Qualcuno che ho chiesto mi ha detto di creare un data warehouse e inserire i vecchi thread lì e bloccarli. Ma cosa succede se non voglio? Sto sbagliando concettualmente? Mi piacerebbe sapere cosa dicono gli esperti.

P.S. Se hai intenzione di approfondire i dettagli tecnici, ho familiarità con Ruby on Rails e Postgresql.

    
posta Abhi9 19.05.2016 - 00:55
fonte

1 risposta

5

So, If I create a single table called thread, and add a new record everytime a new thread is created, and associate it with a posts table such that all posts belonging to that thread use it's ID as foreign key, I believe the database will bend down on it's knees in a matter of weeks.

Non riesco a vedere il problema del database qui.

100s of new threads are created every second ... each thread gets 100+ posts every minute.

Ecco il tuo problema. Il tuo database andrà bene. La tua rete, tuttavia, sta vivendo un attacco DDoS. Certo, in pochi giorni il tuo spazio sarà al massimo della capacità, ma il giorno in cui una persona nel tuo sito di lavoro si lamenterà di non poter guardare i video dei gattini durante le pause pranzo.

Devi limitare l'accesso alle tue risorse limitate. Non dare agli utenti un assegno in bianco per pubblicare quanto mai hanno voglia di pubblicare. L'intero motivo per cui li costringi a creare account è che puoi tenere traccia di ciò che ti sta costando. Non lasciare che ti costino più di quello che ti danno.

Per quanto riguarda la progettazione di database scalabili, mantenerla semplice, disaccoppiata e sostituibile. Un giorno potrebbe aver bisogno di qualche stravagante riprogettazione. Fino ad allora basta mantenerlo semplice, quindi non ci vorranno settimane perché il team di redesign lo capisca. Disaccoppiato in modo che il resto del codice non muoia con esso. Sostituibile in modo che quando succede la prossima grande cosa di DB puoi provarlo senza molto dolore.

    
risposta data 19.05.2016 - 06:23
fonte

Leggi altre domande sui tag