1

У меня есть объект с более чем 25 свойствами. Из этих 25, 15 свойств отображаются во внешней таблице. Эта таблица позволяет выполнять сортировку (как ASC & DESC) для каждого свойства.Индивидуальный запрос данных для большого количества объектов

Чтобы обработать это в бэкэнд, я проверяю тип заказа и записываю запрос для каждого свойства как для ASC, так и для DESC-заказа. Чтобы обрабатывать сортировку 15 записей, у меня есть много кода строки, который выглядит аналогичным. Единственным отличием является тип заказа.

код выглядит следующим образом:

@classmethod 
def retrieve(cls, order, limit, offset): 
    if order == '-property_1': 
     results = cls.query(ancestor=parent).order(-cls.property_1).fetch(limit, offset=offset) 
    elif order == 'property_1': 
     results = cls.query(ancestor=parent).order(cls.property_1).fetch(limit, offset=offset) 
     . 
     . 
     . 
     . 
    elif order == '-property_15': 
     results = cls.query(ancestor=parent).order(-cls.property_15).fetch(limit, offset=offset) 
    elif order == 'property_15': 
     results = cls.query(ancestor=parent).order(cls.property_15).fetch(limit, offset=offset) 

и ее создание индекса 2 датастора для каждого свойства.

- kind: EntityName 
    ancestor: yes 
    properties: 
    - name: property_1 

- kind: EntityName 
    ancestor: yes 
    properties: 
    - name: property_1 
    direction: desc 

Мой вопрос здесь Есть ли лучший способ справиться с этим делом?

ответ

2

Если параметры вы передаете всегда совпадают ваши имена свойств, то вы можете заменить ваш, если заявления с чем-то вроде:

desc = False 
if order[0] == '-': 
    order = order[1:] 
    desc = True 

query = cls.query(ancestor=parent) 
order = getattr(cls, order) 
if desc: 
    order = -order 

query = query.order(order) 
results = query.fetch(limit, offset=offset) 
1

Нет, вы обрабатываете индексацию в правильном порядке.

Если ваши данные меньше по размеру и относительно ограничены в росте, вы можете переключиться на сортировку на стороне клиента, если хотите избежать создания индексов 15 * 2.

В качестве альтернативы, если количество родителей (групп сущностей) невелико и вы можете жить с возможной согласованностью, вы можете опустить предложение ancestor = parent и просто фильтровать родителем в клиенте. Это позволит вам использовать встроенные индексы для свойств (оба направления заказов) и не требует составных индексов.

+0

Первая строка этого ответа, как представляется, продвижение ненужную кода; очевидно, лучший способ сделать это (см. ответ Грега). – ChrisC73

+0

@ ChrisC73 Я обсуждал только аспекты индексирования/запроса - я обновил первую строку, чтобы отразить это. –

+0

согласовано; потенциальное количество требуемых индексов, безусловно, вызывает озабоченность – ChrisC73

Смежные вопросы