#python #django #postgresql
#python #django #postgresql
Вопрос:
Я использую django 1.10 с PostgresSQL DB.
У меня есть таблица с миллионами и в будущем миллиардами записей. Каждая запись имеет DateTimeField в качестве метки времени. Очевидно, что запрос к этой таблице очень длинный и поэтому требует некоторой индексации, которая у меня есть для нескольких полей (не для метки времени), но когда мне нужно подсчитать все записи за определенный период времени, индексация не помогает.
Интересно, есть ли в django встроенный интеллектуальный способ индексирования DateTimeField на основе разрешений года, месяца, дня, часа. Или мне нужно разделить поле метки времени на несколько полей для каждого разрешения, а затем индексировать каждое из них?
Обновить:
Таблица предназначена для сохранения атрибутов кликов, поэтому, скажем, для каждого клика у меня есть атрибуты id, source, timestamp, user_device, price и is_success.
Теперь, учитывая определенные временные рамки, я хотел бы-
1) подсчитайте все клики, сгенерированные за этот период времени.
2) подсчитайте все успешные за этот период времени.
3) суммируйте цены всех успешных за этот период времени.
4) необязательно группировать по одному или нескольким из- source, user_device, year, month, day, hour.
проблема в 1. для 2,3 у меня есть индекс, а 4 не такой тяжелый.
Спасибо!
Комментарии:
1. Пожалуйста, приведите несколько примеров данных и что именно вы хотите запросить по ним.
2. @KlausD. Добавлено! Дайте мне знать, если вам понадобятся дополнительные данные
3. Хотя группировка в Django ORM немного сложнее, 1) — 4) можно легко выполнить с помощью a
filter()
и обычного индекса наDataTimeField
.4. @KlausD. Но не приведет ли индексация DateTimeField к созданию огромной, неэффективной индексной таблицы? Что, в свою очередь, повредит вставкам больше, чем обычный индекс?
5. Объясните свое предположение!