2

Google App Engine のデータストアでクエリを使用しようとすると、次のようになります。

user = User.all().filter('name =',userName).get()

次のエラーがあります: DeadlineExceededError

編集: これは私の機能です:

def feeds(request):
    dict = get_user_details()
    search_key = None
    if request.GET.has_key('search_key'):
        search_key = request.GET['search_key']
        dict['search_key']=search_key
    feeds = list()
    if search_key is not None and search_key!="":
        feeds_list = Feed.all().order('-CreatedDate')
        search_string=string.upper(search_key)
        for feed in feeds_list:
            feed_name=string.upper(feed.FeedUrl)
            if search_string in feed_name:
                feeds.append(feed)
            dict['search_key']=search_key
    else:
        feeds = Feed.all().order('-CreatedDate')
    if request.GET.has_key('page'):
        page = request.GET['page']
    try:
        page = int(page) - 1
    except:
        page = 0

    paginator = Paginator(feeds,10)
    if page>=paginator._get_num_pages():
        page = paginator._get_num_pages() - 1

    dict["page_obj"]     = paginator.page(page+1)
    return render_to_response('feed_list.html', dict, context_instance=RequestContext(request))

フィードで検索すると、時間がかかりすぎてDeadlineExceededError.

4

1 に答える 1

1

これはスケーリングしません:

    feeds_list = Feed.all().order('-CreatedDate')
    search_string=string.upper(search_key)
    for feed in feeds_list:
        feed_name=string.upper(feed.FeedUrl)
        if search_string in feed_name:
            feeds.append(feed)

すべてのフィード オブジェクトをデータストアから取得し、検索語に基づいてリストをローカルでフィルター処理します。ページごとに 10 レコードのみを表示する場合はfetch(10)、クエリ オブジェクトに対して a を実行して、1 ページ内のすべてのエンティティを引き戻そうとしないようにします。ページネーションにはクエリ カーソルを使用します。多数のエンティティをフィルタリングする場合は、クエリを満たすデータストア インデックスを事前に定義する必要があります。すべてを取得してローカルでフィルタリングすることは、非常に非効率的です。

于 2011-04-26T20:34:34.760 に答える