StackOverflow を使用すると、タグで投稿を検索したり、タグの交点でフィルタリングしたりできますruby x mysql x tags
。しかし、通常、タグ付けで複数の結合を使用して MySQL からそのようなリストを取得するのは非効率的です。複数のタグによるフィルター クエリを実装するよりパフォーマンスの高い方法は何ですか?
この問題に対する適切な NoSQL アプローチはありますか?
NoSQL またはドキュメント指向のシナリオでは、実際のタグをドキュメントの一部として保持し、おそらくリストとして保存します。この質問に「couchdb」のタグを付けたので、それを例として使用します。
CouchDB の「投稿」ドキュメントは次のようになります。
{
"_id": <generated>,
"question": "Question?",
"answers": [... list of answers ...],
"tags": ["mysql", "tagging", "joins", "nosql", "couchdb"]
}
次に、タグでキー付けされたビューを生成するには:
{
"_id": "_design/tags",
"language": "javascript",
"views": {
"all": {
"map": "function(doc) {
emit(doc.tags, null);
}"
}
}
}
CouchDB では、必要に応じて、複数のキーを使用して HTTP POST を発行できます。例はドキュメントにあります。その手法を使用すると、複数のタグで検索できるようになります。
注: 上記の値を null に設定すると、ビューを小さく保つのに役立ちます。実際のドキュメントも表示する場合は、クエリで使用include_docs=true
します。