|
|
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Приветствую всех! Передо мной стоит задача организовать сохранение исторических данных для существующей БД. Организация занимается арендой недвижимости. Есть обычная БД(3НФ) которая содержит список текущих предожений. Вся информация об объектах аренды содержится в основной таблице [Предложения] есть поле Дом(FK) , информация о его номере, местоположении разнесена на таблицы [Дома] , [Улицы] , [Районы] . Таким образом информация об адресе предложения получается запросом с JOINами из этих таблиц. Каким-то образом нужно сохранять историю, чтобы в клиенте оператор мог вывести на графики информацию следующего рода: Как изменялась средняя стоимость аренды 2х-комнатной квартиры на улице X. Как изменялось количество предложений по аренде квартир в доме X. Как изменялось общее количество предложений по аренде квартир площадью больше X. Комбинация может быть любая, и запрос должен иметь приемлемый таймаут. Наверняка есть какие-то паттерны реализации подобного функционала. Как я понял из теории, получается что сейчас есть только БД, а нужно смотреть в сторону понятий OLAP Data Warehouse или Data Mart. Или это это можно реализовать в рамках классической реляционной БД? Какие есть варианты? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:42 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
ValeOFYИли это это можно реализовать в рамках классической реляционной БД? Хранимые агрегаты с нужной гранулярностью и параметрами можно организовать и в "обычной БД". Для твоей задачи, возможно, хватит и materialized view. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:55 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Отлично, 3 новых понятия для изучения. Может посоветуешь ссылку на ресурс с которого можно начать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:18 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, я был бы очень признателен, если бы ты дал немного более развернутый ответ. Мне надо понять, с чего начать изучение данной тематики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 22:07 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Начни с руководства по языку SQL. Наплюнь на "приемлемый таймаут" и добейся, чтобы твои запросы извлекали необходимую информацию из уже существующей БД. Потом будешь читать о их оптимизации. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 22:17 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, в существующей БД есть только данные на текущий момент. Я пытаюсь понять как правильно организовать сохранение истории, чтобы можно было на графике увидеть изменения цены объектов с течением времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 22:44 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
ValeOFYв существующей БД есть только данные на текущий момент. А куда деваются данные за прошедший момент? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 23:09 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, записи из таблицы [Предложения] просто удаляются. На другом форуме(ссылка в личке), мне посоветовали, что можно не удалять записи, а добавить столбцы DateFrom и DateTo , записывать туда когда объект выставили, а когда сняли, таким образом все информация для истории сохранится. Но если просто делать запросы для анализа истории цен к этой таблице, то опасаюсь следующего: ЯОбъемы информации большие. В базе в данный момент времени находится 300К объявлений. Ежедневно она обновляется, возьмем 5% = 15К объявлений добавляется, столько же удаляется. Таким образом за год будет ~ 5.5КК записей в таблице [Предложения] . Таблица [Дома] содержит 140К записей. Скажем, я хочу получить график динамики стоимости аренды 2х-комнатных квартир за 3 года с шагом один месяц. Получается, необходимо 36 запросов к этой БД, каждый из которых должен посчитать среднюю стоимость за месяц, и не просто всех квартир, еще и удовлетворяющих некоторым условиям (2х-комнатные). Я понимаю, что у меня не хватает фундаментальных знаний, и что способов реализации много, но хочу выбрать подходящий подход, чтобы не идти в неправильном направлении. Я уже начал читать про IndexedView's и хранимые агрегаты(как я понял, это хранимые процедуры с агрегатными функциями, гранулярность - что-то типа частоты с которой надо ими делать выборку). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 23:35 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Лички нет. В общем, на сайберфоруме тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 23:36 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 23:40 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
ValeOFYмне посоветовали, что можно не удалять записи, а добавить столбцы DateFrom и DateTo, записывать туда когда объект выставили, а когда сняли, таким образом все информация для истории сохранится. И это совершенно правильное предложение. Собственно, я удивлён, что в этой базе таких полей сейчас нет. ValeOFYПолучается, необходимо 36 запросов к этой БД, каждый из которых должен посчитать среднюю стоимость за месяц Вот именно поэтому я и сказал сначала читать руководство по языку SQL, ибо "36 запросов" это бред. Хотя, конечно, тоже вариант. Причём один из наибыстрейших. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 23:49 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВот именно поэтому я и сказал сначала читать руководство по языку SQL, ибо "36 запросов" это бред. Хотя, конечно, тоже вариант. Причём один из наибыстрейших. =)) Буду изучать. В общем, как я понял, надо оставлять все объявления, добавить период актуальности, а потом уже выбирать инструменты для выборки данных для аналитики. Например, вышеуказанные IndexedViews. Направление определено. Благодарю за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 00:13 |
|
||
|
Правильная организация хранения исторических данных для существующей БД
|
|||
|---|---|---|---|
|
#18+
ValeOFY, для начала нужно организовать наличие необходимой информации. По уровню вопроса могу рекомендовать следующее решение: оставить всё как есть, добавить таблицу История предложений , куда триггером с предложений скидывать всю интересную информацию (когда стояло, было ли успешно закрыто итп). Затем реализовать необходимый функционал запросов к этой истории. Когда и если начнёт подтормаживать - смотреть, как эти запросы ускорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 12:16 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38802874&tid=1540742]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 268ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...