Долгое время выборки из базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 16 апреля 2019

Я использую базу данных Firebase Realtime с Django, используя pyrebase. Когда я делаю несколько запросов в одном представлении, получение данных занимает много времени.

Я попытался извлечь базу данных одновременно, что значительно ускоряет загрузку, но в базе данных есть дочерние «Транзакции», в которых хранятся прошлые транзакции. Таким образом, выборка всей базы данных приведет к получению данных (увеличивая сверхурочные), которые не требуются.

def post_menu(request):
    vendors = database.child('Vendors').shallow().get().val()
    curr_vendor_list = [i for i in vendors if database.child('Vendors').child(i).child('email').get().val() == request.user.email]
    if curr_vendor_list:
        curr_vendor = curr_vendor_list[0]
    else:
        error_msg = {'msg': "You are not a registered Vendor!"}
        return render(request, 'Authentication/login.html', error_msg)

    if request.method == 'POST':
        category = request.POST.get('category')
        if category == 'new':
            category_name = request.POST.get('category_input')
        elif category == 'existing':
            category_name = request.POST.get('category_select')
        else:
            return redirect('Vendor:reviews')

        item_name = request.POST.get('item')
        ingredients = request.POST.get('ingredients')
        mark = request.POST.get('mark')
        price = request.POST.get('price')
        dict_item_properties = {'ingredients': ingredients, 'mark': mark, 'price': price}

        if category == 'new':
            dict_item = {item_name: dict_item_properties}
            database.child('Menus').child(curr_vendor).child(category_name).set(dict_item)
        elif category == 'existing':
            database.child('Menus').child(curr_vendor).child(category_name).child(item_name).set(dict_item_properties)
        return redirect('Vendor:menu')
    return redirect('Vendor:reviews')

...