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

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

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

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


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

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

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

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

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


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