powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Прошу помочь со структурой
25 сообщений из 26, страница 1 из 2
Прошу помочь со структурой
    #33478247
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую.
Возможно, такие вопросы на форуме уже обсуждались, но найти не смог. По этому прошу или же ответить именно на мой, или же дать ссылку.
Проблема в следующем...
Сейчас формируется большая система статистики. Состоит она в сборе информации от клиентов компании. Изначально будем пробовать на нескольких клиентах, но уже к лету эта цифра перевалит за тысячу.
Приблизительная иерархия следующая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Клиент  1 
 - Объект  1 
    - Подобъект  1 
    - Подобъект  2 
 - Объект  2 
    - Подобъект  1 
 - Объект  3 
    - Подобъект  1 
Статистика идет по ПОДобъектам. Объекты и клиенты условно можно назвать фиксированными величинами. Каждый ПОДобъект в сутки генерирует 60 * 24 = 1440 записей - подробная поминутная статистика. У каждого клиента может быть много ~(1 .. 50) объектов, у каждого объекта ~(1 .. 10) ПОДобъектов. Таким образом, имея, к примеру, 50 клиентов с 5 объектами и 5 подобъектами, мы получаем в сутки 50 * 5 * 5 * 1024 = 1,280,000 записей в сутки. Пусть даже половина из них будут во внерабочее время (нулевыми) - т.е. их можно будет удалить. Но все равно - темпы роста большие.
Т.к. это статистика, то по ней придется делать много простых и сложных отчетов - необходима высокая скорость работы. Опустим на данный момент железо - будет неплохой двухпроцессорный сервер. Вопрос в том как лучше хранить данные?

Все хранить в одной таблице с указанием ClientID?
Таблица будет расти с огромной скоростью. Выборка будет занимать слишком много времени.

Создавать для каждого клиента свою таблицу?
Да, записей в каждой значительно меньше и запросы становятся проще и быстрее. Однако можно забыть о плюсах хранимых процедур - придется использовать динамический SQL. Кроме того, когда на сервере будет порядка 1000 таблиц с имена вроде Stat1, Stat2, ... - не самое это правильное решение.

Делать какие-то сводные таблицы?
По идее, можно. Но отчетов очень много - ко всем сводные таблицы не сделаешь. Кроме того, в любом случае придется хранить все данные для детального анализа.

Прошу помочь в данном вопросе. Спасибо.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478271
Prolog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы не использовать MS Analisys service?
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478281
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все.

Если глубина дерева заранее неизвестна, то предпочтительнее одна таблица, иерархические отношения в ней будут задаваться внутри (ID, ParentID, foreign key сама на себя).

Создавать для каждого клиента свою таблицу - имхо, самый плохой способ.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478359
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>А почему бы не использовать MS Analisys service?
Поподробней, пожалуйста.

> Если глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все.
Ну это то понятное дело. Таблицы клиентов, объектов и подобъектов я в данном случае опустил как само собой разумеещееся. Вопрос именно по хранению статистики.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478389
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GreenSunriseЕсли глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все.

Если глубина дерева заранее неизвестна, то предпочтительнее одна таблица, иерархические отношения в ней будут задаваться внутри (ID, ParentID, foreign key сама на себя).

Создавать для каждого клиента свою таблицу - имхо, самый плохой способ.

Согласен.

К тому же захочешь скорости - посмотришь в сторону секционирования ;)
А вот "неплохой ДВУХПРОЦЕССОРНЫЙ сервер" для 1.3 млн записей в сутки - это ...интересно...
Остается только добавить "мощный рэйд из трех дисков" :)
ИМХО - маловато будет...
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478432
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey SpirinТаблицы клиентов, объектов и подобъектов я в данном случае опустил как само собой разумеещееся. Вопрос именно по хранению статистики.
Так в чем вопрос-то?
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478445
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА вот "неплохой ДВУХПРОЦЕССОРНЫЙ сервер" для 1.3 млн записей в сутки - это ...интересно...
:) согласен, что это немного, но для начала пойдет.
ПРошу исходить из данных на текущий момент.
Еще раз... КАК лучше хранить статистику?
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478457
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в том как хранить?
Статистика идет по каждому ПОДобъекту.
У нас пока два варианта - или со всех клиентов хранить в одной таблице, или же в разных, или же..... что-то еще.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478483
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey SpirinЕще раз... КАК лучше хранить статистику?

Статистику не хранят. Хранят ДАННЫЕ!!! А статистику собирают(снимают).
Ты должен определить, какие статистические срезы по этим данным тебе будут нужны - и исходя из этого определять стуктуру хранения данных. А дальше уже огромнейшее поле деятельности... Ты или каждый раз можешь обращаться к исходным данным, или (скажем, ночью) подготавливать определенную выборку, оптимизированную под дневные отчеты (т.е. проводить "предварительное" агрегирование и фильтрацию), или придумать что-то еще...
Analisys Services - по большому счету унифицированный инструмент, который может облегчить твою работу... Но и он завязнет, если начальные данные будут храниться в виде мусорной кучи...
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478515
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey SpirinВопрос в том как хранить?
Статистика идет по каждому ПОДобъекту.
У нас пока два варианта - или со всех клиентов хранить в одной таблице, или же в разных, или же..... что-то еще.

Если говорить ТОЛЬКО про клиентов, то ИМХО все-таки лучше в одной таблице, разве что ты на 200% уверен, что никогда не будет вопроса "найди из всех того клиента, который....". И еще если не хочешь возвращаться из отпуска, чтобы завести новую таблицу для нового клиента+все процедуры переделать.
Просто по этой одной таблице надо строить правильный кластерный индекс. Сейчас тебе покажется, что правильный индекс - по клиентам... Но пройдет N месяцев - и я посоветую тебе глянуть на индекс по датам (т.е. дата-клиент-...) ;)
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478519
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, никакой мусорной кучи нет.
Хранят данные, я не спорю. не в том дело.
Проблема в том КАК их хранить?
Отчеты могут быть любые. С любой дискретизацией за любой период.
Сводных таблиц столько, сколько отчетов, не создашь.
Весь этот вопрос я задал только по той причине, что очень большой объем данных. Как строит базы я знаю. Хотелось именно получить совет как поступать в данной ситуации.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478568
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey SpirinУважаемые, никакой мусорной кучи нет.
Хранят данные, я не спорю. не в том дело.
Проблема в том КАК их хранить?
Отчеты могут быть любые. С любой дискретизацией за любой период.
Сводных таблиц столько, сколько отчетов, не создашь.
Весь этот вопрос я задал только по той причине, что очень большой объем данных. Как строит базы я знаю. Хотелось именно получить совет как поступать в данной ситуации.

Ну тогда будем считать, что я постарался помочь :)

Кстати, я не говорил про "таблицу для каждого отчета"... Но как показывает практика, всегда есть какой-либо отвратительно тяжелый отчет, данные для которого можно подготавливать ночью... Или же все равно 70% отчетов захватывают лишь часть данных базы, поэтому можно попробовать выносить их в какие-либо отдельные таблицы...
Т.е. приемов существует множество, но их применение диктуется спецификой каждой конкретной ситуации. И Вашу ситуацию навряд ли кто-то из нас будет знать лучше, чем Вы сами.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478612
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответы.
Полностью согласен по поводу наиболее часто используемых отчетов и выноса их в отдельные таблицы. Но все-таки исходные данные с дискретностью в минуту как нам лучше хранить?
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478641
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, вопрос в том, в каком порядке определять поля в кластерном индексе. Сначала всякие id по объектам, а потом дата или наоборот, сначала дата, а потом всякие id.

Я для двух форм ажно копию таблицы ночью делаю как раз ради того, что в одной форме используется порядок дата-id, а в другой срез по id для разных дат (динамика так сказать).

Правда объем меньше - всего 2.5 млн записей. Открываются формы одна из другой за несколько секунд.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478664
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта штука называется MQT - материализованные таблицы запросов.
Подобные вещи поддерживаются во многих базах в том числе и Oracle,DB2.
просто у каждой это реализовано немножко по-своему. MQT могут заполняться как автоматически, так и позльзователем или с помощью промежуточных таблиц. Принцип использования один - существует готовая выборка с агрегированными значениями. И, когда идет запрос к рабочей таблице оптимизатор строит план доступа исходя из наличия MQT . А в MQT уже лежат готовенькие данные. Типа вам надо найти MAX по какому-то полю по которому нет индекса. Следовательно нужно просканировать всю табличку. А если есть MQT определенная как select oper_date,sum(..),max(..),min(..) from you_table в которой уже всё сгруппировано по датам, то )) чабы выташить максимальное значение за год вам придется просканировать всего лишь 365 записей, а не поднимать все миллионы с диска. Т.е. перфоменс может вырасти в десятки и даже тысячи раз. И, чтобы все это знать и использовать не нужно быть великим специалистом по DWH и OLAP.

Понятно?
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478666
Я бы сделал так. Все данные в отдельной таблице. Свяжите ее со справочниками клиентов, объектов, подъобъектов - это структура будет "сбоку", формируйтие как нравится, но я бы сделал в отдельных справочниках и три FK на таблицу данных. Это позволит крутить любую аналитику. И расширяемость получится нормальная. Насколько я понял, данные потом дополнительно обрабатываются? Тогда создайте две таблицы данных - для предварительных и обработанных. Обработка ночью.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478686
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вполне понятно. Вы сейчас говорите о сводных таблицах. Т.е. таблицах с меньшей дискретизацией. Они - это отдельный разговор. Понятно, что их будет необходимо создавать. Но. Исходные то данные все равно нужно как-то хранить. Еще идея поступила хранить исходные данные по месяцам в разных таблицах.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478698
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey SpirinВполне понятно. Вы сейчас говорите о сводных таблицах. Т.е. таблицах с меньшей дискретизацией. Они - это отдельный разговор. Понятно, что их будет необходимо создавать. Но. Исходные то данные все равно нужно как-то хранить. Еще идея поступила хранить исходные данные по месяцам в разных таблицах.

Если иерархия состоит всего лишь из 3 уровней, то полчается всего лишь 4 таблицы. Клиенты, Объекты,Подобъекты, Статистические по подобъектам.
Причем первые три будут относительно маленькими. А четвертую можно секционировать. А сводные таблицы - отдельная история.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478729
Я как раз про исходные данные. Не имеет смысла разбивать по отдельным таблицам. Сегментируйте одну таблицу например по дате. Вообще одну табицу проще оптимизировать и поддерживать, чем 100.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478950
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenmanЕсли иерархия состоит всего лишь из 3 уровней, то полчается всего лишь 4 таблицы. Клиенты, Объекты,Подобъекты, Статистические по подобъектам.
Причем первые три будут относительно маленькими. А четвертую можно секционировать. А сводные таблицы - отдельная история.
Именно так. о чем я и говорил с самого начала.

2Титов Александр: Представим себе, что через некоторое время будем 50 млн записей. Сколько будет идти поиск определенной записи по такой таблице? Думаю, что очень долго.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33478996
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в условие поиска включить все id объектов и дату, то при наличии кластерного индекса на них же наверное не очень долго.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33479024
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Spirin

Титов Александр:Я как раз про исходные данные. Не имеет смысла разбивать по отдельным таблицам. Сегментируйте одну таблицу например по дате. Вообще одну табицу проще оптимизировать и поддерживать, чем 100.

2Титов Александр: Представим себе, что через некоторое время будем 50 млн записей. Сколько будет идти поиск определенной записи по такой таблице? Думаю, что очень долго.


Вам уже НЕОДНОКРАТНО тут говорили - стройте индекс правильный!!! Или используйте секционирование (термин знакомый ведь? если нет - почитайте - многие вопросы снимутся)
При правильном индексе и адекватных условиях поиска запись будет искаться СРАВНИТЕЛЬНО быстро (надеюсь, ни у кого нет иллюзий, что в 100гигабайтной таблице время любой операции не должно превышать 1нс?).

А вот при наличии 100 таблиц представим себе, что Вы вдруг (не дай Бог, конечно), бьетесь головой о дверь и на полдня теряете память (или, что более реально, меняется сотрудник). Сможет человек с нуля разобраться, в какой таблице что? И сколько это займет времени? Или вдруг из двух клиентов надо сделать одного - будете сливать вместе две таблицы? Или еще лучше - ваши клиенты реорганизуются в кучу мелких дочерних фирм - будете делать 500 новых таблиц? А если они в течение месяца будут то делиться, то объединяться - что тогда???
Резюме - ИДЕОЛОГИЯ базы должна предусматривать масштабируемость. Если что-то тормозит - улучшайте железо, меняйте алгоритмы обработки - но не жертвуйте возможностями дальнейшего развития базы. Иначе вместо покупки еще двух процессоров завтра через месяц придется брать пять человек (и скорее всего, ДОРОГИХ человек) на поддержку и развитие, потому что один уже не сможет физически обслуживать постоянно растущее число табличек...
ИМХО.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33479110
Alexey Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, всем огромное спасибо за ответы, обязательно учтем.
Как систему запустим - напишу, как чего сделали - может кому интересно будет.
Еще раз спасибо.
...
Рейтинг: 0 / 0
Прошу помочь со структурой
    #33479131
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень интересно будет.
Можешь даже в почту кинуть, что получилось, а то вдруг ветка забудется уже :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Прошу помочь со структурой
    #34844788
Фотография dvska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey SpirinКак систему запустим - напишу, как чего сделали - может кому интересно будет.
Ждём-с..
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Прошу помочь со структурой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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