Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Прошу помочь со структурой / 25 сообщений из 26, страница 1 из 2
12.01.2006, 11:14
    #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
12.01.2006, 11:18
    #33478271
Prolog
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь со структурой
А почему бы не использовать MS Analisys service?
...
Рейтинг: 0 / 0
12.01.2006, 11:20
    #33478281
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь со структурой
Если глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все.

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

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

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

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

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

Согласен.

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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