2012-01-03 4 views
1

コメントの投稿方法CouchDBを使用した単一クエリでカウントしますか?コメントの投稿方法CouchDBを使用した単一のクエリでカウントしますか?

私はスタンドアロンビュー[{key: post_id, value: comments_count}]をビルドするためにmap-reduceを使うことができますが、私はDBを2回ヒットしなければなりませんでした。一つのクエリは投稿を取得し、もう一つはcomments_countを取得します。

また、別の方法(これはRailsを実行する)です - コメントをアプリケーションサーバーで手動で数え、投稿のcomment_count属性に保存します。しかし、新しいコメントが追加または削除されるたびに、ポスト文書全体を更新する必要があります。 CouchDBはこのようにチューニングされていないようですが、CouchDBのcomment_count属性のみを更新できるときはRDBMSと異なり、ポスト文書全体を更新する必要があります。

多分、別の方法がありますか?

ありがとうございました。

答えて

0

ビューのリターンjsonには、ドキュメントカウントが 'total_rows'として含まれているので、何も計算する必要はありません。カウントするすべてのドキュメントを発行してください。

{"total_rows":3,"offset":0,"rows":[ 
    {"id":...,"key":...,value:doc1}, 
    {"id":...,"key":...,value:doc2}, 
    {"id":...,"key":...,value:doc3}] 
} 
+0

しかし、すべてのコメントを取得する必要はありません。非効率的です。たとえば、コメントの数が多い投稿のリストを表示したいとします。ページに30件の投稿が表示される場合は、30件すべての投稿についてすべてのコメントを取得する必要があります。 –

+0

私はあなたが2コール以上の帯域幅で立ち往生していると思います。両方の呼び出しをブラウザから非同期でスローすると、余分な接続のオーバーヘッドは小さくなりますが、ほとんどの待ち時間は重なります。 – Jim

+0

このような場合は、コメントカウントがjavascriptのないクライアントには表示されないため、これは問題ありません – matejcik

関連する問題