добавить строку метки времени для индекса Python - PullRequest
1 голос
/ 07 октября 2019

Я использую Google App Engine, Стандартное окружение, NDB Datastore, Python 2.7. Для каждого проекта существует ограничение в 200 индексов.

Чтобы сократить количество индексов, которые я планирую сделать:

У меня есть три поля: report_type , current_center_urlsafe_key и timestamp_entered в модели. Мне нужно найти все записи в хранилище данных, которое имеет определенные значения для current_center_urlsafe_key и report_type. Мне нужно отсортировать эти значения на основе timestamp_entered (по возрастанию и по убыванию).

Это потребует отдельного составного индекса , и я бы хотел избегать этого. Чтобы выполнить этот запрос, я планирую добавить отдельную сущность для каждой записи, объединив все три значения, например:

center_urlsafe_key_report_type_timestamp    = report_type + "***" + current_center_urlsafe_key + str(current_timestamp_ms)

Затем я планирую выполнить запрос, подобный этому:

            current_timestamp_ms = int(round(time.time() * 1000))
            current_date = date.today()

            date_six_months_back = common_increment_dateobj_by_months(self,current_date, -6)
            six_month_back_timestamp = (date_six_months_back - date(1970, 1, 1)).total_seconds() * 1000             
            center_urlsafe_key_report_type_timestamp    = report_type_selected + "***" + current_center_urlsafe_key + str(six_month_back_timestamp)

            download_reports_forward = download_report_request_model.query(ndb.GenericProperty('center_urlsafe_key_report_type_timestamp') >= center_urlsafe_key_report_type_timestamp).order(ndb.GenericProperty('center_urlsafe_key_report_type_timestamp'))
            download_reports_backward = download_report_request_model.query(ndb.GenericProperty('center_urlsafe_key_report_type_timestamp') >= center_urlsafe_key_report_type_timestamp).order(ndb.GenericProperty('-center_urlsafe_key_report_type_timestamp'))

Мой вопрос: если я добавлю метку времени в виде строки и добавлю префикс report_type + "****" + current_center_urlsafe_key , даст ли фильтр неравенства хранилища данных NDB требуемые результаты?

1 Ответ

2 голосов
/ 07 октября 2019

Есть проблема со стратегией. Вам нужно применить фильтры «> =» и «<=», чтобы убедиться, что вы не извлекаете записи из других значений префикса. Например, скажем, ваши данные выглядят следующим образом: </p>

a-123-20191001
a-123-20190901 
a-123-20190801
b-123-20191001
b-123-20190901
b-123-20190801

Теперь, если вы выполните "ключ> = a-123-20190801", вы получите все данные с 2019/08/01 для префикса«a-123», но вы также получите все данные, начинающиеся с «b-», поскольку «b- *»> = «a-123-20190801». Но если вы введете «key> = a-123-20190801 и key <= a-123-20191001», тогда ваши данные будут принадлежать только этому префиксу. </p>

...