Производительность больших систем схемы EAV/open на SQL Server

После 6 часов поиска и выводов, я получил решение этой странной проблемы ... проблема была в размере файла, я просто внес некоторые изменения в web.config и Hurrehh ..

 <httpRuntime targetFramework="4.5"  maxRequestLength="2097151" />
10
задан Bill Karwin 16 February 2009 в 22:10
поделиться

2 ответа

Независимо от SQL Server MS по сравнению с любым другим брендом базы данных худшая проблема производительности с EAV - то, что люди пытаются сделать запросы монстра для восстановления объекта на одной строке. Это требует отдельного соединения на атрибут.

SELECT e.id, a1.attr_value as "cost", a2.attr_value as "color",
  a3.attr_value as "size", . . .
FROM entity e
  LEFT OUTER JOIN attrib a1 ON (e.entity_id = a1.entity_id AND a1.attr_name = 'cost')
  LEFT OUTER JOIN attrib a2 ON (e.entity_id = a2.entity_id AND a2.attr_name = 'color')
  LEFT OUTER JOIN attrib a2 ON (e.entity_id = a3.entity_id AND a3.attr_name = 'size')
  . . . additional joins for each attribute . . .

То, какой бренд базы данных Вы используете, больше участвует в запросе, означает геометрически увеличивать стоимость производительности. Неизбежно, Вам нужно достаточно атрибутов для превышения архитектурной мощности любого механизма SQL.

Решение состоит в том, чтобы выбрать атрибуты в строках вместо столбцов и записать класс в коде приложения для цикличного выполнения по этим строкам, присвоив значения в свойства объектов один за другим.

SELECT e.id, a.attr_name, a.attr_value
FROM entity e JOIN attrib a USING (entity_id)
ORDER BY e.id;

Этот SQL-запрос настолько более прост и более эффективен, что он восполняет дополнительный код приложения.

То, что я искал бы в платформе EAV, является некоторым шаблонным кодом, который получает многострочный набор результатов как это, и отображает атрибуты в свойства объектов и затем возвращает набор заполненных объектов.

9
ответ дан 4 December 2019 в 01:32
поделиться

Я не эксперт по EAV, но несколько более опытных разработчиков, чем я прокомментировал, что платформа электронной коммерции Magento с открытым исходным кодом является медленной, прежде всего, из-за архитектуры EAV через MySQL. Самый очевидный недостаток не может легко быть преодолен. Причем тот трудность, с которой это должно диагностировать, где и как информация представлена для объектов и значений атрибута как размер увеличений приложения. Второй аргумент против EAV, который я услышал, - то, что он требует соединений таблицы, которые входят в низкие двузначные цифры, но было прокомментировано, что использование InnoDB по MyISAM улучшило производительность некоторые (или это могло быть наоборот, но я не могу помнить полностью).

1
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: