|
|
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
Наверное, такие вопросы на интервью задают...но хотелось бы услышать мнение коллективного разума. Скажем, база данных по всем автомобилям. Каждый автомобиль описывается, например, 1000-ю элементами, в виде имя_элемента - значение. Имеем вертикальную таблицу с тремя колонками: id, element_name, element_value id это уникальный идентификатор автомобиля, и дальше имя и значение всех элементов этого автомобиля. Количество элементов на автомобиль может быть разным, но общий набор всех возможных элементов составляет, скажем, тысячу значений. Более того, элементы могут со временем (скажем, раз в месяц) добавляться или убираться в том числе и в этот базовый набор. Например, элементы: цвет пробег год выпуска наличие кондиционера и пр. И запрос: найти все автомобили красного цвета с пробегом не больше 100000км года выпуска 1995 с кондиционером. Получается, self-join таблицы 4 раза. А если нужно отфильтровать по комбинации 100 элементов, то self-join 100 раз. Размер таблицы, скажем, 50 000 000 записей. Какие способы могут быть для улучшения таких запросов? Например, у нас созданы pivot view вида ряд - id автомобиля и колонка - имя элемента. А еще что-то можно предложить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 00:30 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
погуглив, нашел хорошее определение этой проблемы - 'name-value curse', с общей рекомендацией - 'don't do it!' Но как, черт побери, хранить данные об объектах с произвольным числом аттрибутов?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 01:05 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
ХБКакие способы могут быть для улучшения таких запросов?Базу ВСЕХ автомобилей так не хранят. Только базу школьного автобуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 01:06 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
ХБ, group by+having. А вообще имхо лучше уж в json или xml хранить и искать например так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 01:09 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
пивот животворящийХБКакие способы могут быть для улучшения таких запросов?Базу ВСЕХ автомобилей так не хранят. Только базу школьного автобуса. почему не хранят? Например, база данных железнодорожных вагонов. Фирма владеет скажем полумиллионом вагонов и должна учитывать их техническое состояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 01:53 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
xtenderХБ, group by+having. А вообще имхо лучше уж в json или xml хранить и искать например так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. т.е. по сути слить(конкатенировать) все пары элемент-value в одну строку и искать любым из существующих парсингов текстовой строки, так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 01:59 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
ХБ, нет, просто подсчитать кол-во совпадений Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 02:06 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
xtenderХБ, нет, просто подсчитать кол-во совпадений Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. O! круто, спасибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 02:19 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
ХБxtenderХБ, нет, просто подсчитать кол-во совпадений Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. O! круто, спасибки.намберы-даты лучше в отдельных колонках чтобы не спрашивали, откуда 01722 и уникальность не забыть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 07:20 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
Размер таблицы, скажем, 50 000 000 записей. маловато будет, у нас столько только самих автомобилей, а тут надо еще на 10-20 умножить. Какие способы могут быть для улучшения таких запросов? способ элементарный и тот же самый - создать все необходимые индексы для запроса. тут конкретно необходимы как индексы по атрибутам , так и индексы по идентификатору авто. более ничего не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 08:15 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
MasterZiv Какие способы могут быть для улучшения таких запросов? способ элементарный и тот же самый - создать все необходимые индексы для запроса. тут конкретно необходимы как индексы по атрибутам , так и индексы по идентификатору авто. более ничего не нужно. Если таблица более менее статична - сделать bitmap индексы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 09:06 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
to xtender: фиг знает, я бы поостерёгся юзать в оракле json для чего-то сложнее чем хранение конфигов. он там очень сырой. быстрый только с индексами, но они сурово глючат (например, там тупо не работает or). более того, они уже сделали 2 json bundle fix ибо куча багов, но они конфликтуют с другими патчами, мы им об этом написали и oracle слёзно божится, что мол всё исправят, но за 2 недели ничего не произошло :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 09:37 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
имхо, если физически кластеризовать все items вокруг id то будет польза. да, вставка будет тупить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2016, 10:36 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
xtenderХБ, нет, просто подсчитать кол-во совпадений Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. давно поднимал этот вопрос, получил от xtender дельный совет и вот пришло время это реализовать. И сразу вылезла бяка, может быть ув.xtender опять подскажет? Бяка такая: оказалось, element_name и element_value для данного id _не уникальны_. т.е. для какого-то id есть: одна запись с element_name = 'color' and element_value = 'red'; две(!) записи с element_name = 'mileage' and to_number(element_value) < 100000 и ни одной(!!) записи с element_name = 'year' and to_number(element_value) >= 1995 А в сумме получается 3 и этот id считается удовлетворившим условию, хотя это не так. Есть какой-нибудь trick это обойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 23:46 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
ХБ, допустим у тебя есть такая таблица Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вариант 1. Это тупо повесить уникальный ключ на id,element_name. Вариант 2. Чисто SQL: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Вариант 3. Виртуальные столбцы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 00:09 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
забыл добавить, что лучше раскомментировать invisible если ты на 12с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 00:10 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
xtenderХБ, допустим у тебя есть такая таблица Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вариант 1. Это тупо повесить уникальный ключ на id,element_name. Вариант 2. Чисто SQL: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Вариант 3. Виртуальные столбцы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Спасибо, буду думать. Естественно, остальные варианты не катят потому что "котлеты с рисом, тефтели с картошкой, менять нельзя!" Т.е. никакие изменения в архитектуре не разрешены, только SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 00:23 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
ХБпивот животворящийпропущено... Базу ВСЕХ автомобилей так не хранят. Только базу школьного автобуса. почему не хранят? Например, база данных железнодорожных вагонов. Фирма владеет скажем полумиллионом вагонов и должна учитывать их техническое состояние. Фирма на каждую учитываемую характеристику вагона создаст отдельное поле в таблице и сведет задачу к уже решенным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 11:25 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
schi, Больше 1000 - нельзя, больше 255 - не стоит(row piece может хранить не больше 255, дальше начинается intra-block chaining, даже если есть куча нуллов в промежуточных полях), поэтому eav не так уж плох порой, чем вынос атрибутов по куче дополнительных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 12:35 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
Тюнил как-то базу где основная таблица откуда большинство запросов читали, содержала больше 750 полей (кажется 756), так это была полная ж... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 12:39 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
xtender, поделитесь методами тюнинга :) конструктор? а то тут тема всплывала подобная таблица жуткая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 12:47 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
K790, С телефона лень писать, но там действительно был конструктор и генератор запросов, поэтому столбцы тупо добавляли в GUI. Достаточно было вынести лишнее в другие таблицы и изменить метаданные этого конструктора, генератор остальное сам делал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 15:00 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
xtenderschi, Больше 1000 - нельзя, больше 255 - не стоит(row piece может хранить не больше 255, дальше начинается intra-block chaining, даже если есть куча нуллов в промежуточных полях), поэтому eav не так уж плох порой, чем вынос атрибутов по куче дополнительных таблиц. В реальной жизни столько важных характеристик в предметной области и не встречается, потому что нельзя объять необъятное в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 16:47 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
Уточню - мне не встречалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2017, 16:47 |
|
||
|
Запрос к вертикальной таблице - все авто красного цвета
|
|||
|---|---|---|---|
|
#18+
schixtenderschi, Больше 1000 - нельзя, больше 255 - не стоит(row piece может хранить не больше 255, дальше начинается intra-block chaining, даже если есть куча нуллов в промежуточных полях), поэтому eav не так уж плох порой, чем вынос атрибутов по куче дополнительных таблиц. В реальной жизни столько важных характеристик в предметной области и не встречается, потому что нельзя объять необъятное в одной таблице. Да возьмите любой интернет магазин. Количество атрибутов у товаров ОЧЕНЬ большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2017, 13:01 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=176&tid=1886451]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 358ms |

| 0 / 0 |
