Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / быстрое получение остатков на дату / 25 сообщений из 51, страница 1 из 3
28.11.2007, 01:02
    #34970365
DobPilot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Дано таблица, в которой будут часто делаться запросы на получение остатка на дату, вида

select summ(balance) from table where date < :beginDate group by userAccount;

Возникает мысль, с увеличением числа строк в таблице будут медленнее выполняться запросы. -)

Вопрос позновательный, как бытовую проблему можно решить на различных СУБД? Заодно можно и тестики поделать, различных решений. )


з.ы.
Сам пользую postreSQL и задал вопрос в соотв. топике.
...
Рейтинг: 0 / 0
28.11.2007, 01:55
    #34970415
Yo.!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
в оракле для такой задачи есть materialized view, которое будет хранить агрегты (например на день) и подсовывать оптимизатору это вью вместо оригинальной таблички.
...
Рейтинг: 0 / 0
28.11.2007, 10:02
    #34970750
Apex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Думаю эта задача во всех СУБД решается с помощью триггера и еще одной таблицы. В случае Оракла - триггер и таблица системные, что несомненно красивее.
-------------------------------------------------------
Автор благодарит алфавит за любезно предоставленные ему буквы.
...
Рейтинг: 0 / 0
28.11.2007, 10:27
    #34970832
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
В MS SQL задача решается с помощью построения indexed view. Оптимизатор сможет использовать это представление и без переписывания оригинального запроса на использование представления в нем вместо базовой таблицы.
...
Рейтинг: 0 / 0
28.11.2007, 11:31
    #34971090
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Завести себе фиксированные остатки.
Тогда с ростом таблицы скорость запроса не будет расти выше
определенного уровня.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.11.2007, 13:07
    #34971498
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
DobPilotВозникает мысль, с увеличением числа строк в таблице будут медленнее выполняться запросы. -)...
Для этих целей, как Вам правильно подсказали выше - используется подход DataWarehouse...

Good luck!
...
Рейтинг: 0 / 0
18.12.2007, 10:23
    #35016715
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Крутая у вас таблица получится.... Кол-во номенклатур * Кол-во дат.... = ? Со временем таблица еще больше получится....
...
Рейтинг: 0 / 0
18.12.2007, 10:55
    #35016836
Гликоген
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Не зависит от СУБД.
В тупых учетных системах - только движения и начальный+текущий остаток.
В чуть более продвинутых (1С) - снимок остатка на каждый отчетный период (обычно месяц) + движения между.
В хранилищах данных - как правило, на каждый день.
...
Рейтинг: 0 / 0
18.12.2007, 11:04
    #35016860
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
мне кажется это вопрос больше в тему "Проектирование БД"
...
Рейтинг: 0 / 0
18.12.2007, 11:20
    #35016930
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTКрутая у вас таблица получится.... Кол-во номенклатур * Кол-во дат.... = ? Со временем таблица еще больше получится....Ну если по большей части номенклатур остатки меняются относительно редко, то и не надо по ним остатки на каждую дату хранить. Добавлять записи, только при изменении остатка. Табличка будет не больше, чем таблица движений, а остатки безо всякого суммирования будут получаться.
...
Рейтинг: 0 / 0
18.12.2007, 12:19
    #35017180
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Если остатки меняются редко, то и записей о движении будет немного, а следовательно и
select sum(...) будет работать недолго....ИМХО... Зачем огород городить?
...
Рейтинг: 0 / 0
18.12.2007, 12:35
    #35017268
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTЕсли остатки меняются редко, то и записей о движении будет немного, а следовательно и
select sum(...) будет работать недолго....ИМХО... Зачем огород городить?затем чтобы не суммировать все данные, а взять одну нужную
...
Рейтинг: 0 / 0
18.12.2007, 13:02
    #35017355
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTЕсли остатки меняются редко, то и записей о движении будет немного, а следовательно и
select sum(...) будет работать недолго....ИМХО... Зачем огород городить?
Типичная структура движений такова: из 10-20 тысноменклатурных единиц по 95 процентам движения происходят пару раз в месяц. Процентам по 4 - раз в два-три дня, а по оставшимся - несколько раз в день. Соответственно для 95 процентов вполне можно и суммировать (за год накопится 20-30 записей), но вот по этому проценту (а именно по нему остатки нужны наиболее часто) суммировть потребуется уже довольно много. Соответственно имея записи об остатках на моменты движений мы не раздуваем существенно таблицу остатков, но зато время получения остатка не зависит от активности номенклатуры.
...
Рейтинг: 0 / 0
18.12.2007, 13:07
    #35017380
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Если я правильно понял, то Вам придется хранить остатки товара на каждый день, в независимости от того было по нему движение в этот день или нет... Соответственно и таблица у вас будет размером Кол-во товаров * Кол_во дней = Много. А иначе Вам придется все равно по движению суммировать данные... КМК, нет смысла делать такую таблицу... Поправьте меня, если я заблуждаюсь...
...
Рейтинг: 0 / 0
18.12.2007, 13:10
    #35017388
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Быть может я не правильно понимаю уровень группировки(день, месяц, год) данных? Но по-поему это не играет никакой роли... Либо Вы храните остатки по всем! товарам на каждый день!...Либо СУБД проще и быстрее будет делать select sum(...)
...
Рейтинг: 0 / 0
18.12.2007, 13:30
    #35017436
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTПоправьте меня, если я заблуждаюсь...Поправляю.

Имеем таблицу
Код: plaintext
1.
2.
3.
4.
Остатки
Номенклатура ссылка
Значение число
Начало дата
Конец дата
При совершении движения в этой таблице у текущей записи по номенклатуре выставляется "Конец" и добавляется новая. Если в один день происходит несколько двжиений, то мы просто модифицируем запись текущую запись.
Таким образом число записей не превышает количества движений, а остаток на любой день достается запросом без суммирования:
Код: plaintext
select Значение from Остатки where Номенклатура=:id and Начало <= :data and Конец > :data
Наличие индексов делает запрос быстрым. Особые эстеты могут его оптимизировать.
Я не говорю, что это единственное верное решение, но в некоторых случаях оно работает очень хорошо.
...
Рейтинг: 0 / 0
18.12.2007, 13:43
    #35017496
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Я не совсем понимаю зачем Начало и Конец... Поясните, если не трудно...
...
Рейтинг: 0 / 0
18.12.2007, 13:57
    #35017561
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTЯ не совсем понимаю зачем Начало и Конец... Поясните, если не трудно...Для того чтобы не делать sum и не хранить остатки за все даты.
...
Рейтинг: 0 / 0
18.12.2007, 13:58
    #35017571
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTЯ не совсем понимаю зачем Начало и Конец... Поясните, если не трудно...Да, я понял - вы хотите сказать, что можно обойтись только Началом. Можно, но в этом случае запрос для получения значения будет более сложным - без подзапроса не обойтись.
...
Рейтинг: 0 / 0
18.12.2007, 13:59
    #35017576
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Спасибо за подробное пояснение... Но все-таки хотелось бы уточнить... Таким образом Вы предлагаете хранить интервалы, на которых остатки были неизменными? Я правильно понял? Вы тестировали данный подход? Если не серк
...
Рейтинг: 0 / 0
18.12.2007, 13:59
    #35017581
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Если не секрет на каой СУБД? Какой интервал движения? И какое кол-во номенклатур?
...
Рейтинг: 0 / 0
18.12.2007, 14:01
    #35017589
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Интересен механиз реализации этого подхода...
...
Рейтинг: 0 / 0
18.12.2007, 14:09
    #35017620
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTСпасибо за подробное пояснение... Но все-таки хотелось бы уточнить... Таким образом Вы предлагаете хранить интервалы, на которых остатки были неизменными? Я правильно понял? Да, правильно.

TORTВы тестировали данный подход? Если не серкНе только тестировал, но и промышленно эксплуатировал. :)

TORTЕсли не секрет на каой СУБД? Какой интервал движения? И какое кол-во номенклатур?О СУБД вы могли из моего профиля догадаться - Oracle. Но думаю, что такой подход мог бы на любой СУБД использоваться.
Количественные характеристики: из реально работающих есть примеры в которых более 100 тысяч учетных единиц и сотни тысяч движений в день. Но это мало о чем говорит, так как надо учитывать используемую технику и то, что реальные системы не только движения учитывают. Голый тестовый пример для сравнения этой модели с другими я не собирал.
...
Рейтинг: 0 / 0
18.12.2007, 14:19
    #35017674
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
Вопрос с реализацией? Как формируется такая таблица? Триггеры, специальная ХП, клиентское приложение?
...
Рейтинг: 0 / 0
18.12.2007, 15:22
    #35017894
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
быстрое получение остатков на дату
TORTВопрос с реализацией? Как формируется такая таблица? Триггеры, специальная ХП, клиентское приложение?Триггеры или ХП - это не очень интересный вопрос. У нас было несколько реализаций. Стандартно была процедура, добавляющая движения, она же и остатком занималась. Но в триггере это выглядело бы точно так же.
Гораздо более интересный вопрос с обеспечением сериализации - если несколько сеансов одновременно делают движения по одной и той же учетной единице. В общем-то обычная блокировка здесь помогает, но был у нас один исключительный случай, когда учетных единиц было мало (порядка сотни), а конкурирующих транзакций - много (до полусотни процессов и десятки тысяч операций в час у каждого). Тут задержки на блокировках становятся посущественней. Для этого случая был другой вариант, когда заполнением этой таблицы занимался отдельный фоновый процесс.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / быстрое получение остатков на дату / 25 сообщений из 51, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]