Я использовал этот подход в системе авторинга, которую я создал для электронного обучения около 4 лет назад. Я не знал, что делал EAV в то время, но я думал, что я все хитрый, просто используя пары типа имя / значение. Я подумал, что увеличил бы записи, но не стал дорабатывать, потому что очень устал от настройки колонок влево каждый раз, когда у нас был запрос на изменение.
Я провел первый тест, построив иерархию для системы в одной таблице. Thats отлично справились с примерно 4 проектами, 25 продуктами и 4-5 инструментами, каждый из которых выделен через целые числа уровня, которые ссылаются на их первичные ключи.
Я записывал ресурсы, которые проходят через систему, и это означало FLV-файлы, SWF, JPG, PNG, GIF, PDF, MP3 и т. Д. И все особенности mime-типа, касающиеся их. Это колеблется от 4 до 10 атрибутов в каждом файле. Он насчитывал до 8 миллионов записей «данных об активах», где у нас около 800 тыс. Активов.
У меня была просьба поместить всю эту информацию в столбцы для отчета. Оператор SQL должен сам выполнить несколько табличных объединений, не говоря уже о том факте, что они хотят знать, в каком содержимом он использовался, в каком продукте, или в каком-либо проекте он просто убивает JOIN.
С гранулярной точки зрения прекрасно работает. С точки зрения отчета Excel пристегните ремень безопасности. Я смягчил это, сделав снимки для таблиц, которые отражают данные в том виде, в каком они нужны кому-то в отчете, но требуется некоторое время, чтобы скомпилировать эту информацию, которая потребовала от меня выгрузки (дамп SQL) на другой сервер.
Я обнаружил, что спрашиваю себя, правильно ли это делать, и для этого проекта я мог сказать до этого запроса на отчет в большом масштабе "да". Но это заставляет сервер сильно потеть, связывая все это. Действительно зависит от глубокого уровня запросов, которые они делают.
С тех пор, как я начал заниматься SQL с 2002 года и использую его в качестве вспомогательного инструмента, ничто в огромном масштабе не выжило. Если бы это была большая миллионная личность, база данных терабайт +, я бы, вероятно, выдернула мои волосы.
Специальное примечание: я обнаружил, что эта система была на RedHat, и она была 32-битной. Большая часть потоков обработки PHP не могла работать на более чем 1 ядре ЦП, а на сервере было еще 7 ядер, которые простаивали! Запросы, выполнение которых на этой машине занимало до 45 минут, фактически могли выполняться за 14-25 секунд в правильно настроенной 64-битной системе. Также пища для размышлений при рассмотрении производительности.