0

記事を NoSQL に保存したい。各記事には、タイトル、要約、およびセクションがあります。それは大したことではありません。また、記事にタグを付けたいと思います。これも簡単です。名前の他に、定義やアイコンなどのタグに関する情報も保存したいと思います。タグが使用されるたびに余分なタグ情報を保存したくありません。これにより、余分な情報を別のコレクションに入れる必要があります。では、NoSQL でこれを行うために受け入れられている方法は何ですか? 保管と回収の両方?

たとえば、SQL では、article、tags、article_tags テーブルがあり、次のようなことができますSELECT * FROM article_tags INNER JOIN tags on tags.id=article_tags.tag_id WHERE article_tags.art_id=##

NoSQL では、次のようなことを考えています。

article = {
  title    : 'The article',
  tags     : ['tag1', 'tag2', ... ],
  summary  : 'paragraph summary',
  sections : ['section 1', 'section 2', ... ]
}
tags = {
  tag        : 'tag1',
  definition : 'The meaning of the tag',
  icon       : 'URL'
}

しかし、私の知る限り、NoSQL には JOIN に相当するものはありません。そのため、タグごとに個別に呼び出してその情報を検索する必要があります。

4

2 に答える 2

0

OrientDBのようなドキュメントとグラフの NoSQL データベースを使用できます。

OrientDB のドキュメントとグラフ モデルを説明するチュートリアルがあります。

于 2013-10-09T12:41:37.093 に答える
-2

使用している NoSQL ソリューションに応じて、別の呼び出しを行う必要があります。NoSQL ソリューションの長所を最も効率的に活用できるように、アプリケーションを作成する必要があります。

私はRedisとPythonに最も精通しているので、あなたの例ではおそらくこの構造のようなことをするでしょう:

articles = {        
                title: 'The article.',
                tags     : ['tag1','tag2','tag3'],
                summary  : 'paragraph summary',
                sections : ['section 1', 'section 2', ... ]
           }

次に、取得用 (適切な Python クライアントのセットアップなどを使用)

... client setup and connection stuff
key = 'article_id_value'
data = rclient.hget('articles',key)
tags = data['tags']
...

NoSQL の目標は速度であり、必ずしも関係、ACID、または更新の異常の可能性を排除することではありません。この最後の理由が、正規化があまり重視されず、データを複数の場所に保存しない理由です。ただし、本当に本当に本当に本当に正規化したい場合は次のようにすることができます。

articles = {        
                title: 'The article.',
                tags     : [tag_key,tag_key,tag_key ],
                summary  : 'paragraph summary',
                sections : ['section 1', 'section 2', ... ]
           }


tags = {
  tag        : 'tag1',
  definition : 'The meaning of the tag',
  icon       : 'URL'
}

次に、次のように取得します。

... client setup and connection stuff
key = 'article_id_value'
data = rclient.hget('articles',key)
tags = data['tags']
tagnames = []
for tag in tags:
    tagnames.append(rclient.hget('tags',tag))
data['tagnames'] = tagnames
...

注意してください-PythonとRedisのドキュメントを見ながら、メモリからこれを行っています。私は SQL Server DBA であるため、必然的にリレーショナル データ モデリングに傾倒する傾向があります。

于 2013-10-09T05:15:41.763 に答える