1

SimpleDBドメインにクエリを実行して、特定の条件に一致するレコードの数を取得したいと思います。このようにできること:

rs = appsDomain.select( "SELECT count(*)FROM%s WHERE(%s ='%s' or%s ='%s')and%s!='%s'"%(APPS_SDBDOMAIN、XML_APPNODE_NAME_ATTR、appName 、XML_APPNODE_RESERVED_NAME_ATTR、appName、XML_EMAIL_NODE、thisSession.email)、None、True)

いくつか読んだ後、SDBManager countメソッドを介してSimpleDBからクエリカウントを取得する方が、単純な「count(*)」スタイルのクエリを実行するよりも効率的である可能性があることがわかりました。さらに、必要な行と列が1つしかないことがわかっている場合でも、結果セットをループする必要はありませんが、これも避けたいと思います。

count = int(rs。iter(). next()['Count'])

SDBManagerの方が効率的であるというのは本当ですか?もっと良い方法はありますか?SDBManagerが最善の方法である場合、私は完全に失敗したので、誰かがそれを使用する方法を教えてもらえますか?

前もって感謝します!

4

1 に答える 1

1

さて、私は怠け者になるのをやめて、単にソースに行って答えを得ました (FROM: boto-2.6.0-py2.7.egg/boto/sdb/db/manager/sdbmanager.py)

def count(self, cls, filters, quick=True, sort_by=None, select=None):
"""
Get the number of results that would
be returned in this query
"""
query = "select count(*) from `%s` %s" % (self.domain.name, self._build_filter_part(cls, filters, sort_by, select))
count = 0
for row in self.domain.select(query):
    count += int(row['Count'])
    if quick:
        return count
return count

ご覧のとおり、sdbmanager.count メソッドは特別なことは何もせず、実際、'Count' 値を取得するためだけにレコード ストアをループするという、私が避けたかったことを実行します。

したがって、SDBManager を使用すると、実際には多くのオーバーヘッドが発生するため、このメソッドを自分で実装するだけで済みます。私の場合は、それだけの価値はありません。

ありがとう!

于 2012-11-22T03:43:04.597 に答える