Per i numeri che menzioni, penso che tutte le alternative dovrebbero funzionare (leggi: sarai in grado di completare la tua analisi in tempi ragionevoli). Consiglio un design che può portare a risultati significativamente più veloci.
Come già detto, in generale postgresql è più veloce di mongo, alcune volte più di 4 volte più veloce. Vedi ad esempio:
http://www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality
Hai detto di essere interessato a migliorare le prestazioni dei join. Suppongo che tu sia interessato a calcolare le somiglianze tra le entità (ad esempio, posta, autore), quindi ti unirai principalmente alla tabella con se stesso (ad esempio, per posta o autore) e aggregato.
Aggiungete a ciò il fatto che dopo il caricamento iniziale il vostro database sarà di sola lettura, ciò che rende il problema molto adatto all'utilizzo dell'indice. Non pagherai per l'aggiornamento dell'indice poiché non ne avrai e suppongo che tu abbia lo spazio di archiviazione aggiuntivo per l'indice.
Avrei usato Postgres e archiviato i dati in due tabelle:
creare post di tabella (numero intero post_id, url varchar (255), numero intero autore_id);
- Carica i dati e quindi crea gli indici. - Ciò comporterà un caricamento più rapido e una migliore variazione degli indici nella tabella aggiunge il vincolo chiave primaria posts_pk (post_id); crea indice post_author sui post (author_id);
creare commenti tabella (intero comment_id, intero post_id, intero autore_id, comment varchar (255)); modifica tabella commenti aggiungi vincolo commenti_pk chiave primaria (comment_id); crea indice comment_author sui commenti (author_id); creare un indice comment_post sui commenti (post_id);
Quindi è possibile calcolare la somiglianza dell'autore in base ai commenti nelle query come selezionare m. author_id come m_author_id, a. author_id come a_author_id, conta (distinto m.post_id) come post dai commenti come m unisci i commenti come gruppo usando (post_id) di m.author_id, a. author_id
Nel caso in cui tu sia interessato a tokenare le parole nel commento per nlp, aggiungi un'altra tabella per questo, ma ricorda che aumenterà in modo significativo il volume dei tuoi dati. Di solito è meglio non rappresentare l'intera tokenizzazione nel database.