|
|
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Тестирую EAV модель для своей задачи. Перечитал много чего про EAV, но в основном тема обсуждается при запросе одной или нескольких сущностей за раз и выборке по ним значений (например, инфо по товару в магазине). А что делать, если за раз запрашивается множество сущностей? Вот структура БД: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Стандартный запрос данных имеет такой: Код: sql 1. Благодаря составному ключу "sensor_time" запрос работает очень быстро. Получается что за 1 запрос пользователь запрашивает множество сущностей, и потом приходится для каждой из них лезть в таблицу measure_tag и, примерно таким запросом, получать данные по нужным тегам: Код: sql 1. Волнует что первый запрос может возвращать десятки тысяч строк, и потом приходится делать столько же одиночных запросов к таблице значений "measure_tag" для формирования ответа одному пользователю системы по одному датчику! Даже на тестовых данных страшно заглянуть в лог sql запросов. Существуют ли пути решения это проблемы с сохранением гибкости атрибут-значение? БД MySQL 5.5 MyISAM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 08:46 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Yed Существуют ли пути решения это проблемы с сохранением гибкости атрибут-значение? БД MySQL 5.5 MyISAM Взять PostgreSQL 9.4 и использовать тип JSONB <:o) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:01 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
mad_nazgulВзять PostgreSQL 9.4 и использовать тип JSONB у JSONB много избыточной информации. Данных достаточно много (для entity это десятки миллионов), для значений сотни миллионов. Пытаюсь делать как можно компактнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:06 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Yedmad_nazgulВзять PostgreSQL 9.4 и использовать тип JSONB у JSONB много избыточной информации. Данных достаточно много (для entity это десятки миллионов), для значений сотни миллионов. Пытаюсь делать как можно компактнее. Какая избыточная информация в JSONB? Структура вашего JSON-а будет: {"key" : value} Причем используя PostgreSQL вы сможете на "key" навесить индексы. А формат JSONB "сожмет" данные (представив их в бинарном виде) Хотя по идее вообще можно избавиться от key-value, а хранить сущность "как есть". P.S. сейчас PostgreSQL очень интересная альтернатива, для различных key-value и NoSQL хранилищ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 09:51 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
mad_nazgulP.S. сейчас PostgreSQL очень интересная альтернатива, для различных key-value и NoSQL хранилищ. Спасибо, я почитаю подробнее про эту технологию. Но к сожалению нет под рукой специалиста со знанием нюансов PostgreSQL, чтобы разом все протестировать и если что перевести на эту СУБД рабочую систему. Но в принципе такой перевод возможен, архитектура позволяет вообще не трогать клиентов. Поэтому пока ставка на используемую СУБД MySQL. Если никак, то буду смотреть шире. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 10:09 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
YedВолнует что первый запрос может возвращать десятки тысяч строк, и потом приходится делать столько же одиночных запросов к таблице значений "measure_tag" для формирования ответа одному пользователю системы по одному датчику! Зачем Вам делать кучу одиночных запросов, почему не вытащить все разом? Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 11:16 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинЗачем Вам делать кучу одиночных запросов, почему не вытащить все разом? Работает, но просматривает всю таблицу "measure_tag", индексы использовать не хочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 11:27 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
YedКот МатроскинЗачем Вам делать кучу одиночных запросов, почему не вытащить все разом? Работает, но просматривает всю таблицу "measure_tag", индексы использовать не хочет. Вполне возможно, что это разумная стратегия (зависит от статистического распределения Ваших данных) - укажите ему хинтами насильно использовать индексы (MySQL это умеет, надеюсь?) и сравните стоимости запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 11:42 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
YedРаботает, но просматривает всю таблицу "measure_tag", индексы использовать не хочет. А если использовать JOIN?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 12:00 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovYedРаботает, но просматривает всю таблицу "measure_tag", индексы использовать не хочет. А если использовать JOIN?.. а что in не преобразуется в join хоть в одной из существующих в нашей обитаемой части вселенной рсубд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 12:07 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Ivan Durakа что in не преобразуется в join хоть в одной из существующих в нашей обитаемой части вселенной рсубд? Нет, потому что это принципиально разные конструкции. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 12:15 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovIvan Durakа что in не преобразуется в join хоть в одной из существующих в нашей обитаемой части вселенной рсубд? Нет, потому что это принципиально разные конструкции. покажи план с оператором "in" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 12:22 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинВполне возможно, что это разумная стратегия (зависит от статистического распределения Ваших данных) - укажите ему хинтами насильно использовать индексы (MySQL это умеет, надеюсь?) и сравните стоимости запросов. MySQL игнорирует подобные запросы на использование индексов в данном случае. Dimitry SibiryakovА если использовать JOIN?.. Был такой вариант, но получается для каждого найденного тега ( tag_id IN (1,9) ) дублируется строка из основной таблицы с одинаковым measure_id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 13:29 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Yedполучается для каждого найденного тега ( tag_id IN (1,9) ) дублируется строка из основной таблицы с одинаковым measure_id. И?.. В чём проблема-то?.. На скорость запроса это дублирование не влияет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 13:39 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovИ?.. В чём проблема-то?.. На скорость запроса это дублирование не влияет. Я вижу такую - если тегов не 2, а 10 и основная выборка строк тысяч 20, то клиенту (в моем случае php) еще придется все это переварить и отдать вопрошающему в нормальном виде - на одну уникальную строку набор ее тегов и значений. Но я признаю, что не пробовал сам вариант, может и раздуваю проблему. Просто прикинул постобработку и решил пока поискать другие идеи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 14:20 |
|
||
|
EAV - выборка большого числа Entity раз
|
|||
|---|---|---|---|
|
#18+
YedЯ вижу такую - если тегов не 2, а 10 и основная выборка строк тысяч 20, то клиенту (в моем случае php) еще придется все это переварить и отдать вопрошающему в нормальном виде Если выборка 20 тысяч строк, то вопрошающий сдохнет раньше, чем сумеет её прочитать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2015, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38869041&tid=1540657]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 253ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...