|
|
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо за советы и рекомендации. Премного благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 09:36 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonЕдинственная проблема, что таких таблиц может получиться очень много, а так же использование динамического sql А при EAV будет 2 таблицы на все и статический sql. март, Москва, Вася Пупкин, такси - 2000 затраты 1 количество 2000 затраты 1 месяц март затраты 1 город Москва затраты 1 персона Вася Пупкин затраты 1 транспорт такси где затраты - имя сущности (объекта) 1 - objectID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 09:41 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
моди статический sql. Который не влезет в ограничения парсера на максимальную длину запроса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 10:10 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
softwarerКоторый не влезет в ограничения парсера на максимальную длину запроса :) Смотря как писать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 10:41 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
мод softwarerКоторый не влезет в ограничения парсера на максимальную длину запроса :) Смотря как писать :) Кодогенерацию для таких случаев никто не отменял. Работает отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 12:01 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
RA\/ENКодогенерацию для таких случаев никто не отменял. Работает отлично. Ессно, не руками же писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 12:19 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
мод RA\/ENКодогенерацию для таких случаев никто не отменял. Работает отлично. Ессно, не руками же писать Имелась ввиду генерация объектов БД (процедур, пакетов, вьюшек) которые содержать большие выборки, "не пролезающие" через парсер запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 13:43 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonОпять же для примера. Для набора (месяцы, города, типы расходов) у нас записи будут такие: март, Москва, такси - 1000 апрель, Москва, гостиница - 5000 Для набора (месяцы, города, сотрудники, типы расходов) у нас будет так: март, Москва, Вася Пупкин, такси - 2000 апрель, Питер, Коля Петров, гостиница - 6000 и т.п. как это укладывается в схему (objectid, propertyid, value) как я понял здесь propertyid - это координата. или вы имели ввиду другое? Я бы сложил все справочники в одну таблицу (пока не видно сильных различий между ними). Дальше сделал работу похожей на EAV, но через промежуточную многие-ко-многим. Пример: Словарь справочников. spravka: id int, type_id int, name varchar(50). Типы справочников. types: id int, type_name varchar(50) Значения: values: id, value. Множество ключей (определяет размерность куба динамически): links: spravka_id, values_id. Тогда март, Москва, такси - 1000 это types: 1, месяц; 2, город; 3, на_что_потрачено. spravka: 1, 1, март; 2, 2, Москва; 3, 3, такси. values: 1, 1000. links: 1, 1; 2, 1; 3, 1. Вносим март, Москва, Вася Пупкин, такси - 2000. дополнительно получаем: types: 4, ФИО. spravka: 4, 4, Вася Пупкин. values: 2, 2000. links: 1, 2; 2, 2; 3, 3; 4, 2. PS ИМХО это система удобна чтобы не заводить новые таблицы при добавлении новых "граней" куба. но нужно будет програмно следить за целостностью. Ваши замечания коллеги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 15:13 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
А если, например, ограничить размерность куба 20 измерениями и создать таблицу вида: object_id, type1_id, type1_value, type2_id, type2_value, ..., type20_id, type20_value, value и сохранять все записи в ней. Для не используемых типов хранить null. Получиться одна большая таблица на все случаи :-) Минус в том, что ссылочную целостность придется контролировать программно. Эффективнее ли это, чем примеры с EAV, приведенные ранее? И еще, у меня value - на самом деле несколько значений. Т.е. каждая ячейка куба может содержать или одно значение, или множество значений. Например, ячейка (март, Москва, такси) - 1000 руб, 12 числа, комментарий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 16:01 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
и рядом: ячейка (Москва, март, такси) ячейка (март, такси, Москва) Вряд ли это приемлемо для кубов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 16:48 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
ModelRи рядом: ячейка (Москва, март, такси) ячейка (март, такси, Москва) Вряд ли это приемлемо для кубов. Проблемы есть, согласен. А в плане скорости работы с базой что лучше? Одно большая разряженная таблица или же вариант с EAV? C EAV для каждой координаты будет n + m строк в таблице, где n - размерность куба, а m - колличество значений для координаты. Т.е. для полного куба количество строк будет (кол-во элементов в словаре 1)*...*(кол-во элементов в словаре n)*(m+n). В случае же с одной большой таблицей будет много неиспользуемых ячеек при мало-размерных кубах, но зато строк в таблице будет (кол-во элементов в словаре 1)*...*(кол-во элементов в словаре n) Или это не существенно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 17:15 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
paxmeleonА если, например, ограничить размерность куба 20 измерениями и создать таблицу вида: object_id, type1_id, type1_value, type2_id, type2_value, ..., type20_id, type20_value, value и сохранять все записи в ней. Для не используемых типов хранить null. Получиться одна большая таблица на все случаи :-) Минус в том, что ссылочную целостность придется контролировать программно. Эффективнее ли это, чем примеры с EAV, приведенные ранее? И еще, у меня value - на самом деле несколько значений. Т.е. каждая ячейка куба может содержать или одно значение, или множество значений. Например, ячейка (март, Москва, такси) - 1000 руб, 12 числа, комментарий Если ячейка куба должна содержать множество значений (наверное есть словарь типов или чего-то близкого), то система изменится: values выродится в id. values_many: id, value_id, data. values: 5; values_many: 7, 5, 1000 рублей; 8, 5, 12 числа; 9, 5, комментарий. Основной принцип тот же: у нас есть множество словарей описываемое slovary и множество links которые позиционируют нашу ячейку относительно измерений. А дальше сама ячейка может быть любой конструкцией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 17:21 |
|
||
|
Хранение многомерного куба (с динамическим количеством измерений) в базе
|
|||
|---|---|---|---|
|
#18+
VoDA Если ячейка куба должна содержать множество значений (наверное есть словарь типов или чего-то близкого), то система изменится: values выродится в id. values_many: id, value_id, data. values: 5; values_many: 7, 5, 1000 рублей; 8, 5, 12 числа; 9, 5, комментарий. Основной принцип тот же: у нас есть множество словарей описываемое slovary и множество links которые позиционируют нашу ячейку относительно измерений. А дальше сама ячейка может быть любой конструкцией. Это понятно. Я хочу узнать по опыту здесь присутствующих, что лучше? Использовать EAV в таком виде или ввести ограничение на размерность куба и количество значений и хранить все в одной таблице в виде: objectid, type1id, type1value, ..., type20id, type20value, value1id, value1value, ..., value10id, value10value Просто судя по существующим решениям и бизнес-области, можно ввести разумные ограничения, например размерность не более 20, количество значений не более 10. Получаем одну разряженную таблицу с большим количеством столбцов. В плане нагрузки на сервер и скорости вставки/модификации/чтения данных какой из двух подходов оптимальнее? Может кто-нибудь проводил сравнения или видел какую-либу инфу на этот счет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2007, 12:45 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34804130&tid=1544291]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 260ms |
| total: | 433ms |

| 0 / 0 |
