あなたが言及する数値については、すべての代替案が機能するはずです(読んでください:妥当な時間内に分析を完了することができます)。大幅に高速な結果が得られるデザインをお勧めします。
以前に回答したように、一般にpostgresqlはmongoよりも高速で、場合によっては4倍以上高速です。例を参照してください:http :
//www.enterprisedb.com/postgres-plus-edb-blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer-reality
結合のパフォーマンスを向上させることに関心があるとおっしゃいました。エンティティ(投稿、著者など)間の類似度を計算することに関心があると思いますので、主にテーブルにそれ自体(たとえば、投稿者または著者)を結合し、集計します。
さらに、最初のロード後、データベースは読み取り専用になるため、問題はインデックスの使用に非常に適しています。インデックスの更新はありません。インデックスの追加のストレージがあるためです。
私はpostgresを使用して、データを2つのテーブルに格納します。
テーブルpost(post_id integer、url varchar(255)、author_id integer)を作成します。
-データをロードしてから、インデックスを作成します。-これにより、読み込みが高速になり、インデックスが改善され、テーブルポストが制約posts_pk主キー(post_id)を追加します。posts(author_id);にインデックスpost_authorを作成します。
テーブルのコメントを作成します(comment_id integer、post_id integer、author_id integer、comment varchar(255)); 変更テーブルのコメントは制約comments_pk主キー(comment_id)を追加します。コメント(author_id)にインデックスcomment_authorを作成します。インデックスcomment_postをコメント(post_id);に作成します。
次に、select mなどのクエリのコメントに基づいて著者の類似性を計算できます。author_idをm_author_idとして、a。author_id as a_author_id、count(distinct m.post_id)as posts from comments as m as joins as a(post_id)group by m.author_id、a。author_id
nlpのコメントの単語をトークン化することに関心がある場合は、そのための別のテーブルを追加しますが、データの量が大幅に増えることに注意してください。通常、データベース内のトークン化全体を表さない方がよいでしょう。