|
|
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Приветствую. Возможно, такие вопросы на форуме уже обсуждались, но найти не смог. По этому прошу или же ответить именно на мой, или же дать ссылку. Проблема в следующем... Сейчас формируется большая система статистики. Состоит она в сборе информации от клиентов компании. Изначально будем пробовать на нескольких клиентах, но уже к лету эта цифра перевалит за тысячу. Приблизительная иерархия следующая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Т.к. это статистика, то по ней придется делать много простых и сложных отчетов - необходима высокая скорость работы. Опустим на данный момент железо - будет неплохой двухпроцессорный сервер. Вопрос в том как лучше хранить данные? Все хранить в одной таблице с указанием ClientID? Таблица будет расти с огромной скоростью. Выборка будет занимать слишком много времени. Создавать для каждого клиента свою таблицу? Да, записей в каждой значительно меньше и запросы становятся проще и быстрее. Однако можно забыть о плюсах хранимых процедур - придется использовать динамический SQL. Кроме того, когда на сервере будет порядка 1000 таблиц с имена вроде Stat1, Stat2, ... - не самое это правильное решение. Делать какие-то сводные таблицы? По идее, можно. Но отчетов очень много - ко всем сводные таблицы не сделаешь. Кроме того, в любом случае придется хранить все данные для детального анализа. Прошу помочь в данном вопросе. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:14 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
А почему бы не использовать MS Analisys service? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:18 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Если глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все. Если глубина дерева заранее неизвестна, то предпочтительнее одна таблица, иерархические отношения в ней будут задаваться внутри (ID, ParentID, foreign key сама на себя). Создавать для каждого клиента свою таблицу - имхо, самый плохой способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:20 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
>А почему бы не использовать MS Analisys service? Поподробней, пожалуйста. > Если глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все. Ну это то понятное дело. Таблицы клиентов, объектов и подобъектов я в данном случае опустил как само собой разумеещееся. Вопрос именно по хранению статистики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:34 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
GreenSunriseЕсли глубина иерархии жестко задана (клиент-объект-подобъект), то три таблицы с отношениями один-ко-многим, кластерные ПК, по которым будет связка выполняться, и все. Если глубина дерева заранее неизвестна, то предпочтительнее одна таблица, иерархические отношения в ней будут задаваться внутри (ID, ParentID, foreign key сама на себя). Создавать для каждого клиента свою таблицу - имхо, самый плохой способ. Согласен. К тому же захочешь скорости - посмотришь в сторону секционирования ;) А вот "неплохой ДВУХПРОЦЕССОРНЫЙ сервер" для 1.3 млн записей в сутки - это ...интересно... Остается только добавить "мощный рэйд из трех дисков" :) ИМХО - маловато будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:39 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Alexey SpirinТаблицы клиентов, объектов и подобъектов я в данном случае опустил как само собой разумеещееся. Вопрос именно по хранению статистики. Так в чем вопрос-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:48 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
авторА вот "неплохой ДВУХПРОЦЕССОРНЫЙ сервер" для 1.3 млн записей в сутки - это ...интересно... :) согласен, что это немного, но для начала пойдет. ПРошу исходить из данных на текущий момент. Еще раз... КАК лучше хранить статистику? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:49 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Вопрос в том как хранить? Статистика идет по каждому ПОДобъекту. У нас пока два варианта - или со всех клиентов хранить в одной таблице, или же в разных, или же..... что-то еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:51 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Alexey SpirinЕще раз... КАК лучше хранить статистику? Статистику не хранят. Хранят ДАННЫЕ!!! А статистику собирают(снимают). Ты должен определить, какие статистические срезы по этим данным тебе будут нужны - и исходя из этого определять стуктуру хранения данных. А дальше уже огромнейшее поле деятельности... Ты или каждый раз можешь обращаться к исходным данным, или (скажем, ночью) подготавливать определенную выборку, оптимизированную под дневные отчеты (т.е. проводить "предварительное" агрегирование и фильтрацию), или придумать что-то еще... Analisys Services - по большому счету унифицированный инструмент, который может облегчить твою работу... Но и он завязнет, если начальные данные будут храниться в виде мусорной кучи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:57 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Alexey SpirinВопрос в том как хранить? Статистика идет по каждому ПОДобъекту. У нас пока два варианта - или со всех клиентов хранить в одной таблице, или же в разных, или же..... что-то еще. Если говорить ТОЛЬКО про клиентов, то ИМХО все-таки лучше в одной таблице, разве что ты на 200% уверен, что никогда не будет вопроса "найди из всех того клиента, который....". И еще если не хочешь возвращаться из отпуска, чтобы завести новую таблицу для нового клиента+все процедуры переделать. Просто по этой одной таблице надо строить правильный кластерный индекс. Сейчас тебе покажется, что правильный индекс - по клиентам... Но пройдет N месяцев - и я посоветую тебе глянуть на индекс по датам (т.е. дата-клиент-...) ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:02 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Уважаемые, никакой мусорной кучи нет. Хранят данные, я не спорю. не в том дело. Проблема в том КАК их хранить? Отчеты могут быть любые. С любой дискретизацией за любой период. Сводных таблиц столько, сколько отчетов, не создашь. Весь этот вопрос я задал только по той причине, что очень большой объем данных. Как строит базы я знаю. Хотелось именно получить совет как поступать в данной ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:03 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Alexey SpirinУважаемые, никакой мусорной кучи нет. Хранят данные, я не спорю. не в том дело. Проблема в том КАК их хранить? Отчеты могут быть любые. С любой дискретизацией за любой период. Сводных таблиц столько, сколько отчетов, не создашь. Весь этот вопрос я задал только по той причине, что очень большой объем данных. Как строит базы я знаю. Хотелось именно получить совет как поступать в данной ситуации. Ну тогда будем считать, что я постарался помочь :) Кстати, я не говорил про "таблицу для каждого отчета"... Но как показывает практика, всегда есть какой-либо отвратительно тяжелый отчет, данные для которого можно подготавливать ночью... Или же все равно 70% отчетов захватывают лишь часть данных базы, поэтому можно попробовать выносить их в какие-либо отдельные таблицы... Т.е. приемов существует множество, но их применение диктуется спецификой каждой конкретной ситуации. И Вашу ситуацию навряд ли кто-то из нас будет знать лучше, чем Вы сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:11 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за ответы. Полностью согласен по поводу наиболее часто используемых отчетов и выноса их в отдельные таблицы. Но все-таки исходные данные с дискретностью в минуту как нам лучше хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:18 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Мне кажется, вопрос в том, в каком порядке определять поля в кластерном индексе. Сначала всякие id по объектам, а потом дата или наоборот, сначала дата, а потом всякие id. Я для двух форм ажно копию таблицы ночью делаю как раз ради того, что в одной форме используется порядок дата-id, а в другой срез по id для разных дат (динамика так сказать). Правда объем меньше - всего 2.5 млн записей. Открываются формы одна из другой за несколько секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:26 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Эта штука называется MQT - материализованные таблицы запросов. Подобные вещи поддерживаются во многих базах в том числе и Oracle,DB2. просто у каждой это реализовано немножко по-своему. MQT могут заполняться как автоматически, так и позльзователем или с помощью промежуточных таблиц. Принцип использования один - существует готовая выборка с агрегированными значениями. И, когда идет запрос к рабочей таблице оптимизатор строит план доступа исходя из наличия MQT . А в MQT уже лежат готовенькие данные. Типа вам надо найти MAX по какому-то полю по которому нет индекса. Следовательно нужно просканировать всю табличку. А если есть MQT определенная как select oper_date,sum(..),max(..),min(..) from you_table в которой уже всё сгруппировано по датам, то )) чабы выташить максимальное значение за год вам придется просканировать всего лишь 365 записей, а не поднимать все миллионы с диска. Т.е. перфоменс может вырасти в десятки и даже тысячи раз. И, чтобы все это знать и использовать не нужно быть великим специалистом по DWH и OLAP. Понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:31 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Я бы сделал так. Все данные в отдельной таблице. Свяжите ее со справочниками клиентов, объектов, подъобъектов - это структура будет "сбоку", формируйтие как нравится, но я бы сделал в отдельных справочниках и три FK на таблицу данных. Это позволит крутить любую аналитику. И расширяемость получится нормальная. Насколько я понял, данные потом дополнительно обрабатываются? Тогда создайте две таблицы данных - для предварительных и обработанных. Обработка ночью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:31 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Вполне понятно. Вы сейчас говорите о сводных таблицах. Т.е. таблицах с меньшей дискретизацией. Они - это отдельный разговор. Понятно, что их будет необходимо создавать. Но. Исходные то данные все равно нужно как-то хранить. Еще идея поступила хранить исходные данные по месяцам в разных таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:36 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Alexey SpirinВполне понятно. Вы сейчас говорите о сводных таблицах. Т.е. таблицах с меньшей дискретизацией. Они - это отдельный разговор. Понятно, что их будет необходимо создавать. Но. Исходные то данные все равно нужно как-то хранить. Еще идея поступила хранить исходные данные по месяцам в разных таблицах. Если иерархия состоит всего лишь из 3 уровней, то полчается всего лишь 4 таблицы. Клиенты, Объекты,Подобъекты, Статистические по подобъектам. Причем первые три будут относительно маленькими. А четвертую можно секционировать. А сводные таблицы - отдельная история. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:42 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Я как раз про исходные данные. Не имеет смысла разбивать по отдельным таблицам. Сегментируйте одну таблицу например по дате. Вообще одну табицу проще оптимизировать и поддерживать, чем 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:49 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
gardenmanЕсли иерархия состоит всего лишь из 3 уровней, то полчается всего лишь 4 таблицы. Клиенты, Объекты,Подобъекты, Статистические по подобъектам. Причем первые три будут относительно маленькими. А четвертую можно секционировать. А сводные таблицы - отдельная история. Именно так. о чем я и говорил с самого начала. 2Титов Александр: Представим себе, что через некоторое время будем 50 млн записей. Сколько будет идти поиск определенной записи по такой таблице? Думаю, что очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 13:42 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Если в условие поиска включить все id объектов и дату, то при наличии кластерного индекса на них же наверное не очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 13:53 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Alexey Spirin Титов Александр:Я как раз про исходные данные. Не имеет смысла разбивать по отдельным таблицам. Сегментируйте одну таблицу например по дате. Вообще одну табицу проще оптимизировать и поддерживать, чем 100. 2Титов Александр: Представим себе, что через некоторое время будем 50 млн записей. Сколько будет идти поиск определенной записи по такой таблице? Думаю, что очень долго. Вам уже НЕОДНОКРАТНО тут говорили - стройте индекс правильный!!! Или используйте секционирование (термин знакомый ведь? если нет - почитайте - многие вопросы снимутся) При правильном индексе и адекватных условиях поиска запись будет искаться СРАВНИТЕЛЬНО быстро (надеюсь, ни у кого нет иллюзий, что в 100гигабайтной таблице время любой операции не должно превышать 1нс?). А вот при наличии 100 таблиц представим себе, что Вы вдруг (не дай Бог, конечно), бьетесь головой о дверь и на полдня теряете память (или, что более реально, меняется сотрудник). Сможет человек с нуля разобраться, в какой таблице что? И сколько это займет времени? Или вдруг из двух клиентов надо сделать одного - будете сливать вместе две таблицы? Или еще лучше - ваши клиенты реорганизуются в кучу мелких дочерних фирм - будете делать 500 новых таблиц? А если они в течение месяца будут то делиться, то объединяться - что тогда??? Резюме - ИДЕОЛОГИЯ базы должна предусматривать масштабируемость. Если что-то тормозит - улучшайте железо, меняйте алгоритмы обработки - но не жертвуйте возможностями дальнейшего развития базы. Иначе вместо покупки еще двух процессоров завтра через месяц придется брать пять человек (и скорее всего, ДОРОГИХ человек) на поддержку и развитие, потому что один уже не сможет физически обслуживать постоянно растущее число табличек... ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 14:00 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Ок, всем огромное спасибо за ответы, обязательно учтем. Как систему запустим - напишу, как чего сделали - может кому интересно будет. Еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 14:28 |
|
||
|
Прошу помочь со структурой
|
|||
|---|---|---|---|
|
#18+
Очень интересно будет. Можешь даже в почту кинуть, что получилось, а то вдруг ветка забудется уже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 14:33 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=33478247&tid=1544271]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
173ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 459ms |

| 0 / 0 |
