2016-08-19 3 views
0

フォーラムのようなデータ構造:NoSQLは適切ですか?私は構造「のようなフォーラム」を持っているデータを保存しようとしている

これは単純化されたデータモデルである:

+---------------+ 
|  Forum  | 
|    | 
| Name   | 
| Category  | 
| URL   | 
|    | 
+---------------+ 
     |1 
     |n 
+---------------+ 
|    | 
|  Thread | 
|    | 
| ID   | 
| Name   | 
| Author  | 
| Creation Date | 
| URL   | 
|    | 
+---------------+ 
     |1 
     |n 
+---------------+ 
|    | 
|  Post  | 
|    | 
| Creation Date | 
| Links   | 
| Images  | 
|    | 
+---------------+ 

私は複数のフォーラム/ボードを持っています。彼らはいくつかのスレッドを持つことができます。スレッドはn個の投稿を含むことができます(私は、リンクに興味があり、データ分析の目的でスレッドに含まれる画像と作成日に興味があります)。

私は、このような構造でデータを保存して読み取るための適切な技術を探しています。

過去にSQLデータベースを頻繁に使用していましたが、私はNoSQLプロジェクト(主にMongoDBベースのドキュメント)もありました。 私はMongoDBがこのような構造のデータを保存するのに優れていると確信しています(フォーラムは文書ですが、スレッドはサブ文書ですが、投稿はスレッドのサブ文書です)。しかし、それらを読むのはどうですか?特定のカテゴリー

  • とフォーラムからのすべての投稿はすべてのデータセット内のポスト内の特定のリンクを探す

    • 一覧/文書

    それらのための最高の技術である:私は、次のユースケースを持っていますユースケース?

  • +0

    2番目の箇条書きを参照してください。投稿からのリンク、スレッドからのURL、フォーラムからのURLを意味しますか?あなたがForum、Thread、Postとして言及した階層構造であっても、あなたのユースケースはPostからのデータにアクセスすると思います。私の理解は正しいのですか? – notionquest

    +0

    申し訳ありませんが、それは明確ではありませんでした。 – mosquito87

    答えて

    0

    下記の私の草案をご覧ください。私はMongoDBを以下の設計のために考えました。

    ポストコレクション: -

    MongoDBのコレクションは、16メガバイトの最大サイズを持っているとして、 "画像"はGridFSに別々に格納する必要があります。 Postコレクションには、イメージのObjectIdを格納できます。

    { 
        "_id" : ObjectId("57b6f7d78f19ac1e1fcec7b5"), 
        "createdate" : ISODate("2013-03-16T02:50:27.877Z"), 
        "links" : "google.com", 
        "image" : ObjectId("5143ddf3bcf1bf4ab37d9c6e"), 
        "thread" : [ 
         { 
          "id" : ObjectId("5143ddf3bcf1bf4ab37d9c6e"), 
          "name" : "Sam", 
          "author" : "Sam", 
          "createdate" : ISODate("2013-03-16T02:50:27.877Z"), 
          "url" : "https://www.wikipedia.org/" 
         } 
        ], 
        "forum" : [ 
         { 
          "name" : "Andy", 
          "category" : "technology", 
          "url" : "https://www.infoq.com/" 
         } 
        ] 
    } 
    

    カテゴリ別にデータにアクセスするには、「forum.category」フィールドにインデックスを作成します。

    db.post.createIndex({ "forum.category": 1 }) 
    

    リンクでデータにアクセスするには、「リンク」フィールドにインデックスを作成します。

    db.organizer.createIndex({ "links": 1 }) 
    

    インデックスが必須ではありませんのでご注意ください。索引なしでデータにアクセス/照会することもできます。より良い読み込みパフォーマンスが必要な場合は、索引を作成できます。

    私はMongoDBを使って、あなたと同様のユースケースを使っているアプリケーションを見てきました。上記のユースケース(またはアクセスパターン)については、MongoDBに進むことができます。

    関連する問題