Недавно на сайте ormbattle.net появилось сравнение производительности популярных .NET ORM. В частности, присутствуют NHibernate, Entity Framework, Open Access и другие. Как думаете, насколько приведенные результаты адекватны?
Здравствуйте, AlexGX
AGX>Недавно на сайте ormbattle.net появилось сравнение производительности популярных .NET ORM. В частности, присутствуют NHibernate, Entity Framework, Open Access и другие. Как думаете, насколько приведенные результаты адекватны?
Учитывая что отдельные ормапперы умудряются выигрывать в 2-3 раза у SqlClient на апдейте/удалении — сомневаюсь%) Как минимум что-то они там не то нахимичили...
Ага. Они использовали SqlClient чтобы показать оверхед непосредственно orm'a. Отсюда и слегка неестественный код (материализация объектов для обновления/удаления etc). В остальном особых косяков не вижу.
Учитывая что авторы работают в http://x-tensive.com/ очень интересно было бы увидеть их DataObjects
Right now I can list just few decisions we've already made and done:
1. Remove DataObjects.Net from results published on this web site.
We decided to avoid arguing with some people believing the benchmarks provided here are designed for this product or intentionally made to market it. Unfortunately, that was the simplest way to prove the idea behind this website and its results are of greater importance for us. There are still tests for it in source code, but we don't publish its results here any more.
S>Right now I can list just few decisions we've already made and done:
S>1. Remove DataObjects.Net from results published on this web site.
S>We decided to avoid arguing with some people believing the benchmarks provided here are designed for this product or intentionally made to market it. Unfortunately, that was the simplest way to prove the idea behind this website and its results are of greater importance for us. There are still tests for it in source code, but we don't publish its results here any more.
S>Моё уважение
Ага, уважение Они первоначально опубликовали свои результаты, и вы не поверите, кто был победителем: в среднем -- в 2-4 раза обходили _всех_ остальных на _всех_ тестах. Их пристыдили, и они убрали свои результаты
S>>Right now I can list just few decisions we've already made and done:
S>>1. Remove DataObjects.Net from results published on this web site.
S>>We decided to avoid arguing with some people believing the benchmarks provided here are designed for this product or intentionally made to market it. Unfortunately, that was the simplest way to prove the idea behind this website and its results are of greater importance for us. There are still tests for it in source code, but we don't publish its results here any more.
S>>Моё уважение
M>Ага, уважение Они первоначально опубликовали свои результаты, и вы не поверите, кто был победителем: в среднем -- в 2-4 раза обходили _всех_ остальных на _всех_ тестах. Их пристыдили, и они убрали свои результаты
Враки, господа
Да, мы выигрывали, но не на всех тестах, и далеко не всегда в 2-4 раза. Но мы были всегда в пределах 10-20% от лидера на каждом тесте.
DO4 мы убрали вовсе не потому, что "пристыдили". Стыдиться нам на самом деле нечего. Просто это был самый простой способ охладить накал.
Если интересно, сейчас мы ведем переговоры с теми, кто там в лидерах. Думаю, и так ясно, что раз протестов с их стороны нет, они смотрят на все это несколько иначе, чем банда фанатов NHibernate с Ореном во главе. Я думаю, Орен и Франс многое потеряют, оставшись за бортом. Впрочем... Криками и результатов все равно не изменишь. Да, NH популярен, но вовсе не быстр, и им надо было просто признать это. Мы и так "заточили" их тесты так, что это больше на хакерство похоже стало: http://ormbattle.net/index.php/faqs/73-are-nhibernate-tests-really-optimal-is-there-any-cheating-making-them-run-slower.html
И про DO4: он появится там, как только большей части публики станет совершенно ясно, что никаких читов в тестах нет. И вот тогда у вас будет возможность повторить еще раз фразу "мое уважение!"
A>Если интересно, сейчас мы ведем переговоры с теми, кто там в лидерах. Думаю, и так ясно, что раз протестов с их стороны нет, они смотрят на все это несколько иначе, чем банда фанатов NHibernate с Ореном во главе. Я думаю, Орен и Франс многое потеряют, оставшись за бортом.
ИМНО он (Орен) против таких синтетических методов(типа вставка/удаление записей в цикле), он и предложил мерять на конкретном приложении. Привели бы его цитаты про эти бенчмарки, например:
But that is not really relevant. Tight loop benchmarks for frameworks as complex as OR/Ms are always going to lie. The only way to really create a benchmark is to create a full blown application with several backend implementations. That is still a bad idea, as there are still plenty of ways to cheat. All you have to do is to look at the PetShop issues from 2002/3 to figure that one out.
Здравствуйте, cadet354, Вы писали:
A>>Если интересно, сейчас мы ведем переговоры с теми, кто там в лидерах. Думаю, и так ясно, что раз протестов с их стороны нет, они смотрят на все это несколько иначе, чем банда фанатов NHibernate с Ореном во главе. Я думаю, Орен и Франс многое потеряют, оставшись за бортом. C>ИМНО он (Орен) против таких синтетических методов(типа вставка/удаление записей в цикле), он и предложил мерять на конкретном приложении. Привели бы его цитаты про эти бенчмарки, например: C>
C>But that is not really relevant. Tight loop benchmarks for frameworks as complex as OR/Ms are always going to lie. The only way to really create a benchmark is to create a full blown application with several backend implementations. That is still a bad idea, as there are still plenty of ways to cheat. All you have to do is to look at the PetShop issues from 2002/3 to figure that one out.
C>а то сразу фанатик...
Не-не-не, давайте разберемся, что он тут говорит (он это не один раз повторил, кстати):
— Этот бенчмарк не соотестствует действительности; бенчмарки с простыми циклами — не для ОРМ
— Единственный путь сделать нормальный бенчмарк — сделать полноценное приложение с несколькими бекендами под разные ОРМ
— Нет, даже это — отстой, т.к. и в этом случае слишком много способов зачитить. Вспомните про бенчмарки ПетШопа 2002-2003 года.
Мораль: сделать показательный бенчмарк для ОРМ, по словам Орена, вообще невозможно!
A>Не-не-не, давайте разберемся, что он тут говорит (он это не один раз повторил, кстати): A>- Этот бенчмарк не соотестствует действительности; бенчмарки с простыми циклами — не для ОРМ
тут я с ним согласен. A>- Единственный путь сделать нормальный бенчмарк — сделать полноценное приложение с несколькими бекендами под разные ОРМ
аналогично A>- Нет, даже это — отстой, т.к. и в этом случае слишком много способов зачитить. Вспомните про бенчмарки ПетШопа 2002-2003 года. A>Мораль: сделать показательный бенчмарк для ОРМ, по словам Орена, вообще невозможно!
ну тут его занесло MS да и другие, например делает такие бенчи и поддерживают целые форумы с обсуждением, и в отличие от тестов в цикле дают хоть какое-то представление.
В тесты не смотрел, может у вас и показательнее примеры есть, но по чтению блога сложилось такое впечатление, что именно с этим он и не согласен.
A>Более того, он много раз говорил, что производительность у ОРМ вообще не важна, и при этом он старательно избегает давать прямой ответ на вот этот пост: http://ormbattle.net/index.php/blog/88-are-results-of-this-test-suite-really-important-part-1-why-i-dont-believe-oren-eini.html
ну так он вроде дал ответ A>Предлагаю, кстати, подождать с комментариями недельку. Думаю, там станет совершенно ясно, кому наши бенчмарки по душе, а кому — поперек горла.
и там вы схлестнулись в коментариях, я правда не понял, что ты хочешь ему доказать,что в цикле хибернайт будет сливать? так это и так понятно было
foreach (var o in query) {
o.Value++;
statelessSession.Update(o);
}
такие update в цикле не несут никакой полезной нагрузки,в дикой природе не встречаются, навскидку и не вспомню когда подобный код писал(но это моя практика, возможно все). Орен там еще профайл продает к хибернайту, и тут вы с циклами разгоняете людей от хибернайта.
P.S. с Nhibernate знаком плохо, не сложилось как-то с ним, не понравился, использую bltoolkit, но это не ORM (сейчас на проекте linq2sql т.к. написано на нем много и переписывать в ближайшее время точно не будем).
Здравствуйте, alexyakunin, Вы писали:
A>Здравствуйте, cadet354, Вы писали:
A>Не-не-не, давайте разберемся, что он тут говорит (он это не один раз повторил, кстати): A>- Этот бенчмарк не соотестствует действительности; бенчмарки с простыми циклами — не для ОРМ A>- Единственный путь сделать нормальный бенчмарк — сделать полноценное приложение с несколькими бекендами под разные ОРМ A>- Нет, даже это — отстой, т.к. и в этом случае слишком много способов зачитить. Вспомните про бенчмарки ПетШопа 2002-2003 года.
A>Мораль: сделать показательный бенчмарк для ОРМ, по словам Орена, вообще невозможно!
Хм, не знаю, откуда вы эту мораль вытащили. Ждем пруфлинк на цитаты про то, что сделать корректный показательный бенчмарк вообще невозможно. Тут он говорит только о трудностях, связанных с посторением таких бенчмарков, не более -- в связи с тем, что у каждого ORM существует оптимальный сценарий, есть нечаянный (или намеренный) риск сделать так, что остальные отстанут, и это будет нечестно.
A>Более того, он много раз говорил, что производительность у ОРМ вообще не важна, и при этом он старательно избегает давать прямой ответ на вот этот пост: http://ormbattle.net/index.php/blog/88-are-results-of-this-test-suite-really-important-part-1-why-i-dont-believe-oren-eini.html
Ну и что, что он так говорил? Меня, например, тоже не интересует быстродействие ORM, меня интересует его отрицательный вклад в общее быстродействие системы. Если с ORM №1 это 0.5%, а c ORM №2 -- 0.1%, то явно, что выбирать между 1 и 2 я буду не по скорости, а по каким-то другим критериям -- цена, learning curve, тулы и т.п. Это и хочет сказать Oren: постройте приложение и зацените.
A>Предлагаю, кстати, подождать с комментариями недельку. Думаю, там станет совершенноте ясно, кому наши бенчмарки по душе, а кому — поперек горла.
Не должно быть так -- по душе. Должно быть -- объективны или нет. Если несколько человек -- Brion, Rahien, Maulo говорят, что что-то не так -- это значит, что действительно что-что не так.
Здравствуйте, AlexGX, Вы писали:
AGX>Добрый день.
AGX>Недавно на сайте ormbattle.net появилось сравнение производительности популярных .NET ORM. В частности, присутствуют NHibernate, Entity Framework, Open Access и другие. Как думаете, насколько приведенные результаты адекватны?
Срач, срач и ещё раз срач. В итоге всё равно все останутся при своих мнениях — так что в чём смысл?
Здравствуйте, meowth%)
M>Ага, уважение Они первоначально опубликовали свои результаты, и вы не поверите, кто был победителем: в среднем -- в 2-4 раза обходили _всех_ остальных на _всех_ тестах. Их пристыдили, и они убрали свои результаты
Ну падумаешь подогнали фреймворк под тест
Всё равно ведь малаццы. TCP-E обещают (которым никто кроме МС не меряется потому как там условия пореальней чем в TCP-C).
Здравствуйте, alexyakunin!
A>Враки, господа
A>Да, мы выигрывали, но не на всех тестах, и далеко не всегда в 2-4 раза. Но мы были всегда в пределах 10-20% от лидера на каждом тесте.
О! День добрый! Прошу прощения за предыдущий пост, не видел ваших ответов.
Очень интересно как поведут себя ормапперы на сложных тестах — где добавится батчинг, отношения между сущностями, сложные запросы и т.п.
Вопросы про выигрыш у SqlClient снимаются — почитал то что написано на вашей главной (кстати в Опере 9.62 на 1024x768 косяк: правая колонка заползает на текст)
TCP-E в этом плане будет интересней TCP-C, но и куда более громоздким в реализации — сущностей там слегка больше
P.S. Слегка удивила реакция "Нет это плохие тесты. И вообще все тесты плахие." Взрослые вроде люди...
P.P.S. Лёгкий оффтоп: DataObjects позиционируются как UoW фреймфорк (аналогично EF) или как local cache (аналогично датасетам)? Просто ищется нечто из второй группы (с биндингом, валидацией по всему кэшу, маппингом на хранимые процедуры etc)...
Здравствуйте, cadet354, Вы писали:
C>Здравствуйте, alexyakunin, Вы писали:
A>>Не-не-не, давайте разберемся, что он тут говорит (он это не один раз повторил, кстати): A>>- Этот бенчмарк не соотестствует действительности; бенчмарки с простыми циклами — не для ОРМ C>тут я с ним согласен. A>>- Единственный путь сделать нормальный бенчмарк — сделать полноценное приложение с несколькими бекендами под разные ОРМ C>аналогично A>>- Нет, даже это — отстой, т.к. и в этом случае слишком много способов зачитить. Вспомните про бенчмарки ПетШопа 2002-2003 года. A>>Мораль: сделать показательный бенчмарк для ОРМ, по словам Орена, вообще невозможно! C>ну тут его занесло MS да и другие, например делает такие бенчи и поддерживают целые форумы с обсуждением, и в отличие от тестов в цикле дают хоть какое-то представление. C>В тесты не смотрел, может у вас и показательнее примеры есть, но по чтению блога сложилось такое впечатление, что именно с этим он и не согласен.
A>>Более того, он много раз говорил, что производительность у ОРМ вообще не важна, и при этом он старательно избегает давать прямой ответ на вот этот пост: http://ormbattle.net/index.php/blog/88-are-results-of-this-test-suite-really-important-part-1-why-i-dont-believe-oren-eini.html C>ну так он вроде дал ответ A>>Предлагаю, кстати, подождать с комментариями недельку. Думаю, там станет совершенно ясно, кому наши бенчмарки по душе, а кому — поперек горла. C>и там вы схлестнулись в коментариях, я правда не понял, что ты хочешь ему доказать,что в цикле хибернайт будет сливать? так это и так понятно было C>
C>foreach (var o in query) {
C>o.Value++;
C>statelessSession.Update(o);
C>}
C>
C>такие update в цикле не несут никакой полезной нагрузки,в дикой природе не встречаются, навскидку и не вспомню когда подобный код писал(но это моя практика, возможно все). Орен там еще профайл продает к хибернайту, и тут вы с циклами разгоняете людей от хибернайта.
C>P.S. с Nhibernate знаком плохо, не сложилось как-то с ним, не понравился, использую bltoolkit, но это не ORM (сейчас на проекте linq2sql т.к. написано на нем много и переписывать в ближайшее время точно не будем).
M>Хм, не знаю, откуда вы эту мораль вытащили. Ждем пруфлинк на цитаты про то, что сделать корректный показательный бенчмарк вообще невозможно. Тут он говорит только о трудностях, связанных с посторением таких бенчмарков, не более -- в связи с тем, что у каждого ORM существует оптимальный сценарий, есть нечаянный (или намеренный) риск сделать так, что остальные отстанут, и это будет нечестно.
Я даже искать не буду, возму то, что есть:
"The only way to really create a benchmark is to create a full blown application with several backend implementations. That is still a bad idea, as there are still plenty of ways to cheat. All you have to do is to look at the PetShop issues from 2002/3 to figure that one out."
И для вас выделю суть:
"The _only_ way to _really create_ a benchmark is ... _That is still a bad idea_, as there are still plenty of ways to cheat. All you have to do is to look at ... to figure that one out."
M>Ну и что, что он так говорил? Меня, например, тоже не интересует быстродействие ORM, меня интересует его отрицательный вклад в общее быстродействие системы. Если с ORM №1 это 0.5%, а c ORM №2 -- 0.1%, то явно, что выбирать между 1 и 2 я буду не по скорости, а по каким-то другим критериям -- цена, learning curve, тулы и т.п. Это и хочет сказать Oren: постройте приложение и зацените.
Среди этих несколько человек есть Oren и Fabio (разработчики NH), которые напрямую заинтересованы в результате теста. Предлагаю вам всерьез подумать, чего бы они сказали, если бы NH там была на высоте, или просто #1. Я думаю, пост был бы один, и совершенно другого характера. А тут — аж 4
В общем, ситуация с заинтересованностью полностью симметрична.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, alexyakunin!
S>TCP-E в этом плане будет интересней TCP-C, но и куда более громоздким в реализации — сущностей там слегка больше
Угу, сами думаем, чего делать с ними...
S>P.S. Слегка удивила реакция "Нет это плохие тесты. И вообще все тесты плахие." Взрослые вроде люди...
Согласен полностью.
S>P.P.S. Лёгкий оффтоп: DataObjects позиционируются как UoW фреймфорк (аналогично EF) или как local cache (аналогично датасетам)? Просто ищется нечто из второй группы (с биндингом, валидацией по всему кэшу, маппингом на хранимые процедуры etc)...
Как UoW фреймвок — хотя различий с NH — масса; например, у нас нет dirty checking, и мы всегда знаем, что и как изменено; затраты на откат состояния у нас нулевые.
С другой стороны, как раз сейчас мы приделываем к нему local cache в нескольких ипостасиях. И в финале будет очень крут: у нас уже есть своя собственная БД в памяти — с индексами, оптимизатором запросов и т.п. (а это значит, в этом локальном кеше запросы будут работать ~ так же). Sync + ее улучшенная версия и станут идеальным local cache. Пока же мы делаем обычный DisconnectedState (тот же локальный кеш, но без запросов — тоже полезен иногда, т.к. создать его заметно проще, чем полноценную БД в памяти), + понемногу работаем над Sync.
S>Ну падумаешь подогнали фреймворк под тест S>Всё равно ведь малаццы. TCP-E обещают (которым никто кроме МС не меряется потому как там условия пореальней чем в TCP-C).
Мы уже почти передумали про TPC-E — действительно, чтоб его сделать, надо основательно попотеть.
С другой стороны, пока очень вероятно, что нас поддержат Telerik (OpenAccess) & Mindscape (Lightspeed). Общаюсь с ними уже пару дней, и все пока позитивно. Обид на нас нет, оптимизируют свои тесты и даже предлагают помощь Как только появится какая-то окончательная договоренность, сразу напишу.
А если такая поддержка будет — думаю, с выбором приемлемого для публики теста проблем не будет вообще.
Про Oren-а Eini: не знаю, в курсе ли вы, но Oren Eini = Ayende @ Rahien (nickname). Надеюсь, теперь понятно, почему именно в этом блоге были такие дебаты Это самый известный блог NH.
Здравствуйте, alexyakunin, Вы писали:
A>Про Oren-а Eini: не знаю, в курсе ли вы, но Oren Eini = Ayende @ Rahien (nickname). Надеюсь, теперь понятно, почему именно в этом блоге были такие дебаты Это самый известный блог NH.
В курсе, конечно. Потому и интересно было посмотреть на схватку в комментариях
Мое мнение остается прежним -- вы друг друга не поняли. Это круто, конечно, что у вас материализация enity происходит в 4 раза быстрее, но каков профит от этого для бизнес-приложения в целом?
О, еще вопрос -- планируется ли real-world bench? Я понимаю, что Oren и про них много интересного сказал , но было бы странно, если бы эти его слова для вас значили больше, чем предыдущие
Здравствуйте, alexyakunin, Вы писали:
M>>Хм, не знаю, откуда вы эту мораль вытащили. Ждем пруфлинк на цитаты про то, что сделать корректный показательный бенчмарк вообще невозможно. Тут он говорит только о трудностях, связанных с посторением таких бенчмарков, не более -- в связи с тем, что у каждого ORM существует оптимальный сценарий, есть нечаянный (или намеренный) риск сделать так, что остальные отстанут, и это будет нечестно.
A>Я даже искать не буду, возму то, что есть: A>"The only way to really create a benchmark is to create a full blown application with several backend implementations. That is still a bad idea, as there are still plenty of ways to cheat. All you have to do is to look at the PetShop issues from 2002/3 to figure that one out."
A>И для вас выделю суть: A>"The _only_ way to _really create_ a benchmark is ... _That is still a bad idea_, as there are still plenty of ways to cheat. All you have to do is to look at ... to figure that one out."
Простите, не увидел. Не стану повторяться, прочтите, будьте добры, мое предыдущее сообщение. Он не говорит о невозможности, он говорит об общей сложности.
A>Среди этих несколько человек есть Oren и Fabio (разработчики NH), которые напрямую заинтересованы в результате теста. Предлагаю вам всерьез подумать, чего бы они сказали, если бы NH там была на высоте, или просто #1. Я думаю, пост был бы один, и совершенно другого характера. А тут — аж 4
Прошу прощения; полагаю, вы берете на себя слишком много. Сослагательное наклонение не заменит тесты и не может судить мерилом правильности. Остыньте
A>В общем, ситуация с заинтересованностью полностью симметрична.
Согласен полностью Предлагаю убрать и их тесты, раз уж вы убрали свои -- это единственная оставшаяся несимметричность