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