<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_13_thread_37429"  />
<title>rulinux.net - Форум - Web-development - EAV, сложные запросы.</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Web-development - EAV, сложные запросы.</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144295</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144295</guid>
<pubDate>Wed, 20 Jun 2012 11:03:07 +0400</pubDate>
<description><![CDATA[<p>Это почему?</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144262</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144262</guid>
<pubDate>Wed, 20 Jun 2012 09:02:21 +0400</pubDate>
<description><![CDATA[<p><i>>если у него проц загружен на 100%, и при этом львиную долю отъедает MySQL - то что в этом случае?</i><br> такого не может быть, чтобы mysql упиралась в проц а не в дисковые операции</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144205</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144205</guid>
<pubDate>Tue, 19 Jun 2012 17:08:47 +0400</pubDate>
<description><![CDATA[<p>&gt; Если ничего не загружено на 100% то хз
<br>
<br>
Хорошо, а вот, допустим, если у него проц загружен на 100%, и при этом львиную долю отъедает MySQL - то что в этом случае?</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144195</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144195</guid>
<pubDate>Tue, 19 Jun 2012 16:55:43 +0400</pubDate>
<description><![CDATA[<p><i>>Деньги не пахнут же:)</i><br> Ну судя по всему тебе так обломятся такие же деньги как тем киргизам которые плитку кладут. Так зачем голову морочить если плитку класть проще и по деньгам столько же?<br><br>А не пахнут вот такие деньги http://sport.mail.ru/football2012/news/9320381 и за такие конечно голову понапрягать я бы согласился<br><br><i>>Мне интересно, что можно придумать именно в данных условиях.</i><br> серебряной пули нет. для начала хотя бы поставить профилировщики и посмотреть что грузится на 100%, проц или диск, или постоянный своп из-за 100% загрузки памяти, т.е. поискать бутылочное горло. Если ничего не загружено на 100% то хз, CMS же ты твикать не будешь, а как можно курочить базу сверху которой cms на php?</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144193</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144193</guid>
<pubDate>Tue, 19 Jun 2012 16:51:13 +0400</pubDate>
<description><![CDATA[<p>&gt; известный отечественный php cms
<br><br>
Почитал что пишут о йом благодарные пользователи.. Отзывы какбэ намекают, что надо менять систему...</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144178</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144178</guid>
<pubDate>Tue, 19 Jun 2012 14:48:43 +0400</pubDate>
<description><![CDATA[<p>&gt; по item_id, и по property_id, и по value
<br><br>
А по value_numeric и пр?</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144174</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144174</guid>
<pubDate>Tue, 19 Jun 2012 14:08:00 +0400</pubDate>
<description><![CDATA[<p>&gt; Да, индексы есть.
<br><br>
Тогда, наверное, MySQL на свалку. Привёл бы хоть полный пример запроса штоле.
<br><br>
&gt; Предусмотрели только мускуль и оракл.
<br><br>
Есть такая штука как <a href="http://www.oracle.com/technetwork/licenses/database-11g-express-license-459621.html">Oracle for nischebrodes</a> - если тебе не требуется хранить больше 11Гб данных, а для задачи хватает 1Гб памяти и одного ядра процессора - можно легально поставить его. Хотя что-то мне сдаётся, что к системе, которая работает и с мускулем и с ораклом, постгрес должен прикручиваться тоже как-то несложно.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144171</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144171</guid>
<pubDate>Tue, 19 Jun 2012 13:52:55 +0400</pubDate>
<description><![CDATA[<p><i>> Странно это вообще обсуждать сейчас, спустя 10 лет после описываемых событий, когда время уже расставило всё по своим местам</i><br><br><br>Ничего странного))) Систем нашел древний артефакт, спросил как его распилить. Даем советы)))</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144170</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144170</guid>
<pubDate>Tue, 19 Jun 2012 13:50:01 +0400</pubDate>
<description><![CDATA[<p><i>>Индексы построены по полям, участвующим в критериях?</i><br> Да, индексы есть. И по item_id, и по property_id, и по value.<br><br><i>>И что мешает попробовать поднять это на постгресе? Разработчеги не предусмотрели абстракции от БД?</i><br> Предусмотрели только мускуль и оракл.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144169</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144169</guid>
<pubDate>Tue, 19 Jun 2012 13:48:27 +0400</pubDate>
<description><![CDATA[<p>&gt; Сначало это работало просто замечательно и красиво. Но со временем когда объектов набиралось от 5-10 тыщ всё это начинало жутко тормозить и ничего, ничего нельзя было с этим поделать. И дальше хуже и хуже. Как-то так)))
<br><br>
Мне кажется что разработчиков объектов не следует допускать к архитектуре хранилищ БД, не говоря уже о настройки их производительности. Во-первых все объектно-ориентированные программасты склонны верить в чудеса - например они почему-то все уверены, что скорость доступа к данным упирается не в скорость самого медленного устройства в компьютере каковым по праву считается дисковый накопитель, и не в их изуродованный разум, неспособный спроектировать нормально работающую, не дефективную by design систему, а в архитектуру той или иной реализации СУБД. Странно это вообще обсуждать сейчас, спустя 10 лет после описываемых событий, когда время уже расставило всё по своим местам и в продакшене сейчас везде нормально работает ОРМ над традиционной плоской архитектурой, а иерархические СУБД интересны лишь редким криворуким маргиналам.
<br><br>
&gt; Я здесь я не понял &quot;глубину вашей мысли&quot; уважаемый анонимус)))
<br><br>
Я спросил в чём профит от перехода на плоские таблицы если рассматривать вопрос в отрыве от <s>фека</s> реалий MySQL.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144163</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144163</guid>
<pubDate>Tue, 19 Jun 2012 13:41:15 +0400</pubDate>
<description><![CDATA[<p><i>> Я бы за такую работу не брался дешевле чем за $15000 в месяц после уплаты налогов.</i><br> ЕГЭ сдай сначала))) </p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144161</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144161</guid>
<pubDate>Tue, 19 Jun 2012 13:38:19 +0400</pubDate>
<description><![CDATA[<p><i>>&gt;говно в говне на говне и говном погоняет. а ты впрягаешься ассенизатором. </i><br><i>> Деньги не пахнут же:)</i><br><br><br>Систем я тебе удивляюсь, человек явно бредит, но ты всё равно пытаешься с ним беседовать)))</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144160</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144160</guid>
<pubDate>Tue, 19 Jun 2012 13:36:38 +0400</pubDate>
<description><![CDATA[<p><i>>&gt; ОМГ! Это же еще в конце 90-х прокляли </i><br><i>> Кто проклял? Мускулевцы? </i><br><br><br>Все кто это пробовал, и я в том числе. Тогда модно было пережевывать за бутылочкой пива тему объектно-ориентирных БД, а ничего похожего на Монгу не было даже в проекте. И народ пробовал через такую схему замутить аля ООБД.<br><br>Сначало это работало просто замечательно и красиво. Но со временем когда объектов набиралось от 5-10 тыщ всё это начинало жутко тормозить и ничего, ничего нельзя было с этим поделать. И дальше хуже и хуже. Как-то так)))<br><br> <i>>&gt; втихаря перевести на плоские таблицы </i><br><i>> Не знаю как для мускуля, но с Т.З. нормальной БД - в чём профит??</i><br>Я здесь я не понял &quot;глубину вашей мысли&quot; уважаемый анонимус)))</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144158</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144158</guid>
<pubDate>Tue, 19 Jun 2012 13:32:46 +0400</pubDate>
<description><![CDATA[<p>Индексы построены по полям, участвующим в критериях? И что мешает попробовать поднять это на постгресе? Разработчеги не предусмотрели абстракции от БД?</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144157</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144157</guid>
<pubDate>Tue, 19 Jun 2012 13:32:03 +0400</pubDate>
<description><![CDATA[<p><i>>говно в говне на говне и говном погоняет. а ты впрягаешься ассенизатором.</i><br> Деньги не пахнут же:)<br><br>Я прекрасно понимаю всю эту ситуацию, однако это уже оффтоп. Мне интересно, что можно придумать именно в данных условиях.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144156</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144156</guid>
<pubDate>Tue, 19 Jun 2012 13:30:10 +0400</pubDate>
<description><![CDATA[<p><i>>Давай определимся - ты можешь быстро найти ИД объекта(ов) по критерию или нет?</i><br> Не могу. У меня тормозят sql-запросы, в которых множество JOIN-ов, через которые я получаю список нужных товаров по данным критериям. </p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144153</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144153</guid>
<pubDate>Tue, 19 Jun 2012 13:11:21 +0400</pubDate>
<description><![CDATA[<p><i>>&quot;нет возможности&quot;. Проект, мягко говоря, низкобюджетный, Владелец же не имеет у себя придворного разработчика, который на каждый чих будет лазить в код и допиливать его под новую структуру. Тогда сломается всё остальное, и нет ресурсов, чтобы всё это чинить.</i><br> говно в говне на говне и говном погоняет. а ты впрягаешься ассенизатором.<br><br><i>>&quot;нет возможности&quot;</i><br> нет возможности у них значит нет возможности и у нас. &quot;нищим милостыню не подаю&quot;(С)</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144152</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144152</guid>
<pubDate>Tue, 19 Jun 2012 13:07:24 +0400</pubDate>
<description><![CDATA[<p><i>>Какие есть варианты, кроме как доставать всю огромную кучу товаров простым запросом и заниматься фильтрацией в приложении? </i><br> есть вариант самому обратиться к авторам CMS. или перевести на них стрелки</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144151</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144151</guid>
<pubDate>Tue, 19 Jun 2012 13:04:59 +0400</pubDate>
<description><![CDATA[<p><i>>Для плоской таблицы нужно будет возиться с ALTER TABLE, а это тоже большой удар по производительности. Я встречал таблицы, где alter по 20 минут отрабатывал. </i><br> ох уж эти мне инженегры от сохи. Ты бредишь. У тебя или 15000 строк в номенклатуре или таблицы которые по 20 минут обрабатываются, ты уж определись. Таблица с 15000 строк даже на одном IDE жестком диске обрабатывается за 1,5 сек</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144149</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144149</guid>
<pubDate>Tue, 19 Jun 2012 12:52:22 +0400</pubDate>
<description><![CDATA[<p><i>>Это, естественно, не вариант, так как нужно, чтобы всё летало. Хардвар менять нельзя, БД менять нельзя, структуру портить нельзя (впрочем, можно добавить лишнюю таблицу, например), а скорость повысить нужно. </i><br> Уволься. Или убейся. Я бы за такую работу не брался дешевле чем за $15000 в месяц после уплаты налогов. А иначе пусть другого ассенизатора ищут</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144148</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144148</guid>
<pubDate>Tue, 19 Jun 2012 12:48:46 +0400</pubDate>
<description><![CDATA[<p>&gt; Возможно. А разбирать товары на подходящие и неподходящие уже в приложении? Или как-то силами БД?
<br><br>
Минуточку, ты говорил, что у тебя тормоза с извлечение уже найденного объекта. Давай определимся - ты можешь быстро найти ИД объекта(ов) по критерию или нет?
<br><br>
&gt; Я просто не очень знаю, можно ли через мускулевый xpath делать какие-нибудь запросы с типом, вроде x &gt; value &gt; y. Тут у меня в знаниях пробел.
<br><br>
А я даже не знаю есть ли в мускуле xpath.
<br><br>
Просто если у тебя идёт поиск объекта по значениям каких-то свойств, то по идее обычно можно построить индексы по тому, что ты ищешь, вплоть до full text search или что там в мускуле и играть чисто на индексах, без сквозного сканирования всех таблиц, участвующих в этом безобразии. А уже потом, когда идентификаторы объектов, извиняюсь за тавтологию, идентифицированы - тогда уже вытащить с диска только те блоки данных, которые содержат интересующие тебя данные. При этом индексы и данные лежат обычно на разных файловых системах, индексы помещаются в собственном кеше БД или ОС и удерживаются там дольше данных поскольку постоянно используются и как-то подразумевается, что тормоза возникают именно как ты сказал при извлечении объекта, при чём с мержем данных из множества таблиц. Нормальная БД всё это сделает в одном запросе, а про мускул у меня какие-то смутные подозрения.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144147</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144147</guid>
<pubDate>Tue, 19 Jun 2012 12:35:24 +0400</pubDate>
<description><![CDATA[<p>&gt; Не &quot;нет желания&quot;, а &quot;нет возможности&quot;.
<br><br>
Возможность есть всегда. Просто производительность системы не настолько важно для заказчика, чтобы тратиться на неё. Т.е. нет желания.
<br><br>
&gt; Проект, мягко говоря, низкобюджетный, так что заказывать маркетинговое исследование на тему &quot;по каким параметрам пользователь будет чаще искать&quot; никто не будет. На глаз - неясно. 
<br><br>
Владельцу лучше заняться другим бизнесом. Тем, где он понимает что клиенту надо и, соответственно, он в состоянии сформулировать юзкейсы и отобрать наиболее важные из них (ведь оптимизация подразумевает специализацию).
<br><br>
&gt; Хуже того, возможность владельцу через админку стирать и добавлять свойства остаётся, так что хардкодить некоторые запросы тоже не так хорошо. Владелец же не имеет у себя придворного разработчика, который на каждый чих будет лазить в код и допиливать его под новую структуру.
<br><br>
Само по себе это, наверное, не проблема
<br><br>
&gt; Предложи что-нибудь другое, кроме кучи JOIN-ов для данной схемы. Проблема ещё в том, что данный поиск - отнюдь не единственная задача всего приложения, и переделывать всю структуру, соответственно, нельзя. Тогда сломается всё остальное, и нет ресурсов, чтобы всё это чинить.
<br><br>
А я ебу что там в этом мускуле может работать эффективно, с использованием индексов? Я подозреваю он у тебя будет тормозить даже если ты его таблицы все целиком закешируешь. Чтобы профита добиццо, кеш должен быть умный, он должен кешировать объекты на уровне приложения, предоставляя параллельный доступ к ним разным сессиям, выполняющимся одновременно. Однако функциональность приложения анализировать всё равно придётся и, грубо говоря, заменять все компоненты.
</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144146</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144146</guid>
<pubDate>Tue, 19 Jun 2012 12:20:57 +0400</pubDate>
<description><![CDATA[<p><i>>Храни в текстовом поле ХМЛ-ку с описанием всех свойств объекта и вытягивай только её.</i><br> Возможно. А разбирать товары на подходящие и неподходящие уже в приложении? Или как-то силами БД?<br><br>Я просто не очень знаю, можно ли через мускулевый xpath делать какие-нибудь запросы с типом, вроде x &gt; value &gt; y. Тут у меня в знаниях пробел.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144145</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144145</guid>
<pubDate>Tue, 19 Jun 2012 12:15:23 +0400</pubDate>
<description><![CDATA[<p><i>>нет желания поставить нормальную БД, нет желания экстенсивно увеличить производительность системы за счёт апгрейда железа</i><br> Не &quot;нет желания&quot;, а &quot;нет возможности&quot;.<br><br><i>>нет желания выявлять паттерны использования системы</i><br> Проект, мягко говоря, низкобюджетный, так что заказывать маркетинговое исследование на тему &quot;по каким параметрам пользователь будет чаще искать&quot; никто не будет. На глаз - неясно. Хуже того, возможность владельцу через админку стирать и добавлять свойства остаётся, так что хардкодить некоторые запросы тоже не так хорошо. Владелец же не имеет у себя придворного разработчика, который на каждый чих будет лазить в код и допиливать его под новую структуру.<br><br><i>>и даже нет желания оптимизировать запросы вручную</i><br> Предложи что-нибудь другое, кроме кучи JOIN-ов для данной схемы. Проблема ещё в том, что данный поиск - отнюдь не единственная задача всего приложения, и переделывать всю структуру, соответственно, нельзя. Тогда сломается всё остальное, и нет ресурсов, чтобы всё это чинить.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144144</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144144</guid>
<pubDate>Tue, 19 Jun 2012 12:07:26 +0400</pubDate>
<description><![CDATA[<p>&gt; Тормоза именно на шаге получении объектов из БД с заданными свойствами, и этот шаг в обоих случаях будет.
<br><br>
Мы же тут вроде обсуждали, что мускуль работает с джойнами как последний пидорас. Храни в текстовом поле ХМЛ-ку с описанием всех свойств объекта и вытягивай только её.. Думаю будет быстрее.. Но это опять же противоречит нежеланию что-то менять ручками.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144143</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144143</guid>
<pubDate>Tue, 19 Jun 2012 12:01:55 +0400</pubDate>
<description><![CDATA[<p>Ты извини, но всем требованиям удовлетворить ИМХО невозможно: нет желания выявлять паттерны использования системы, нет желания поставить нормальную БД, нет желания экстенсивно увеличить производительность системы за счёт апгрейда железа и даже нет желания оптимизировать запросы вручную (что, впрочем, бесполезно в виду нежелания 1).
<br><br>
&gt; Или, всё же, что-то придумать с кэшем?
<br><br>
По-моему это противоречит нежеланиям 1 и 3.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144142</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144142</guid>
<pubDate>Tue, 19 Jun 2012 11:56:53 +0400</pubDate>
<description><![CDATA[<p>&gt; ОМГ! Это же еще в конце 90-х прокляли
<br><br>
Кто проклял? Мускулевцы?
<br><br>
&gt; втихаря перевести на плоские таблицы
<br><br>
Не знаю как для мускуля, но с Т.З. нормальной БД - в чём профит??</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144140</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144140</guid>
<pubDate>Tue, 19 Jun 2012 11:22:37 +0400</pubDate>
<description><![CDATA[<p><i>>ОМГ! Это же еще в конце 90-х прокляли.</i><br> Видимо нету другого варианта хранить неизвестное заранее количество свойств в реляционной БД. Впрочем, от этого не легче.<br><br><i>>Или втихаря перевести на плоские таблицы</i><br> Там выходит по 500 колонок, меня такая вещь пугает. Проблема ещё в том, что EAV там не просто так, а потому что пользователь может мышкой через админку создать новое свойство, удалить старое и устраивать всякие преобразования. Для плоской таблицы нужно будет возиться с ALTER TABLE, а это тоже большой удар по производительности. Я встречал таблицы, где alter по 20 минут отрабатывал. Не вариант, увы.<br><br><i>>или на Монгу если не получится структурировать. Клиенты сказать, что это КЭШ))) А его структуру реплицировать по крону периодически)))</i><br> Похоже, что придётся что-то такое устраивать. Тоже не самый приятный вариант, так как владельцы сервера - совсем левые люди, которые очень медленно реагируют на просьбы, да и, наверное, не в курсе, как ставить mongodb. Но это уже другая история.<br><br><i>>Прочитал еще раз, не понял ты собираешься кэшировать запросы БД что ли? По моему надо готовые объекты кэшировать, </i><br> Я пока ничего не собираюсь, я только рассматриваю варианты:) <br><br>Можно кэшировать результаты запросов, это просто реализуется (уже есть, на самом деле), но их уж очень много. В смысле, можно кэшировать и SQL, и результаты запросов в виде объектов, но выходит примерно то же самое. Тормоза именно на шаге получении объектов из БД с заданными свойствами, и этот шаг в обоих случаях будет.<br><br>Можно кэшировать просто все объекты, да. Тогда у нас уже будет простой sql-запрос, но придётся уже в приложении разбираться, какой объект подходит под нужный критерий, какой - нет. Меня смущает перекладывание все работы по поиску на несчастный php. Будет огромный цикл c if-ами.</p>]]></description>
</item>
<item>
<title>Re:EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144139</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144139</guid>
<pubDate>Tue, 19 Jun 2012 10:59:36 +0400</pubDate>
<description><![CDATA[<p><i>> хранится по схеме entity-attribute-value (она же vertical database model)</i><br> ОМГ! Это же еще в конце 90-х прокляли. По моему только КЭШ. Или втихаря перевести на плоские таблицы или на Монгу если не получится структурировать. Клиенты сказать, что это КЭШ))) А его структуру реплицировать по крону периодически))) <br><br> Прочитал еще раз, не понял ты собираешься кэшировать запросы БД что ли? По моему надо готовые объекты кэшировать, ведь учитывая примененную схему, пытались объектно-ориентированную БД сэмулировать нее?</p>]]></description>
</item>
<item>
<title>EAV, сложные запросы.</title>
<link>https://rulinux.net/message.php?newsid=37429&amp;page=1#144138</link>
<guid>https://rulinux.net/message.php?newsid=37429&amp;page=1#144138</guid>
<pubDate>Tue, 19 Jun 2012 10:41:06 +0400</pubDate>
<description><![CDATA[<p>Есть MySQL, один известный отечественный php cms, в базе хранится каталог товаров, товаров ~15к штук. Всё это счастье хранится по схеме entity-attribute-value (она же vertical database model), то есть есть таблица для товаров, таблица для свойств и таблица для значений этих свойств.<br><br>То есть (названия упрощены для читабельности):<br><br>items -- id, name, date_created, ...<br><br>properties -- id, type, name, sort, ....<br><br>property_values -- id, item_id, property_id, value, value_numeric, ...<br><br>Свойств дохренища (суммарно - примерно 600), но у конкретного типа товара примерно 50. Типов много, свойства для разных типов пересекаются. <br><br>И по всему этому аду оказалось нужно делать поиск по свойствам, поиск делается пользователем, угадать его намерения невозможно. ORM для запроса по десятку свойств генерит десяток JOIN-ов, что выглядит очень забавно, и выполянется по 10 секунд. Это, естественно, не вариант, так как нужно, чтобы всё летало. Хардвар менять нельзя, БД менять нельзя, структуру портить нельзя (впрочем, можно добавить лишнюю таблицу, например), а скорость повысить нужно. Вручную делать тоже не очень, т.к. ничего кроме JOIN-ов в голову не приходит.<br><br>Кэшировать все запросы заранее не так просто, т.к. некоторые свойства - числовые. Например, с диапазоном от 1 до 30000. Соответственно, может быть 30 тысяч вариантов запросов только с этим свойством. И этих свойств много.<br><br>Какие есть варианты, кроме как доставать всю огромную кучу товаров простым запросом и заниматься фильтрацией в приложении? Или, всё же, что-то придумать с кэшем?</p>]]></description>
</item>
</channel>
</rss>