Как лучше всего описать день недели? - PullRequest
3 голосов
/ 20 июля 2011

Я планирую свою первую загрузку данных в GAE и очень хочу, чтобы мои утки подряд.Я использую язык Python.Мой вопрос касается хранения временных данных только для чтения в ядре приложения.

У меня есть электронная таблица с ~ 50 тыс. Строк на 30 столбцов.

Это исторические данные, и таблица будет доступна только для чтения.

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

eg.
date, time, dayofweek, event, geolocation, etc
27-02-2009, 08:20:00, 'Friday' ...

Эти дата и время, показанные выше, отражаюткак это происходит из электронной таблицы банкоматов.

Если я собираюсь перейти к проблеме вычисления "dayofweek", что, я полагаю, хорошая идея, и учитывая ваш опыт работы с моделями хранилища данных GAE, я должен:

- просто есть одна дата и время?(и пусть GAE отработает день недели во время будущих сортировок / запросов?) -создать dayofweek, но иметь одну дату?'2009-02-27 08:10:00' - хранить вместо целого дня недели целое число?(0 = понедельник в Python IIRC) вместо даты хранения '2009-02-27'?

Вывод всегда будет английским, а также может быть JSON.Он предназначен для исследования визуализации данных, и некоторая дополнительная временная анимация может быть выполнена на клиенте, но моя главная задача - не допустить, чтобы работа, проделанная в GAE, была недоступна, что, я признаю, может быть просто фетишем.

Ответы [ 4 ]

3 голосов
/ 21 июля 2011

Если вы планируете делать запросы на основе дня недели, т. Е. Вам нужно выбрать несколько пятниц, а не соседние дни, вы должны разбить это на отдельное свойство, так как это сделает возможнымчтобы сделать эффективные запросы для него.

Чтобы выполнить запрос «Пятница в июле», как вы предлагаете, у вас есть несколько вариантов:

  • Без отдельного «дня недели'свойство, вы можете выполнить четыре или пять запросов для каждого из действительных дней
  • . С помощью отдельного свойства "день недели" вы можете выполнить один запрос для дня недели и диапазона дат.При этом будет использоваться ваш фильтр неравенства для диапазона дат, поэтому вы не сможете также выполнить фильтр неравенства для любого другого свойства в этом запросе.
  • С отдельными свойствами «день недели» и «месяц» вы можетевыполните приведенный выше запрос без использования фильтров неравенства.
1 голос
/ 22 июля 2011

Я согласен, что вы определенно хотите разбить дату таким образом, чтобы это имело смысл для запросов.Встраивание части этой информации в ключ может быть полезным, как и предлагалось.Это не всегда возможно, хотя.Например, могут быть конкурирующие проблемы для ключа.Еще один вариант - создать индекс запроса только на основе даты и использовать отношения предок / родитель.Затем вы можете сделать запрос только ключей к объектам, ориентированным на дату, и использовать их, чтобы получить родителей.

И еще одна вещь, которую я рекомендую, однако, если вы укажете дату, do также сохранит дату и время полностью.Вы можете захотеть его позже, если произошла какая-то ошибка или если вы измените свою схему.

1 голос
/ 20 июля 2011

Если вы хотите максимальной производительности, вы можете добавить день вашего года и год в вашем имени ключа.Например, я делаю так, что я создаю ключи следующим образом: analytic: 124: 2011

Тогда довольно просто получить последние 30 дней.Просто создайте генератор списков, который создаст список ключей за 30 последних дней

from datetime import datetime
dof = datetime.now().timetuple()
keys = [db.Key.from_path("Analytic","%i:%i"%(dof-i,2011)) for in in xrange(0,30)]
analytics = db.get(keys)
1 голос
/ 20 июля 2011

У вас должна быть только одна дата / время. Это позволит вашей системе использоваться другими системами по мере необходимости в будущем. Я также считаю, что вычислимые элементы не должны храниться в БД, поскольку параметры некоторых вычислений могут изменяться со временем.

НТН,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...