|
|
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Есть таблица Users в БД с полями: Код: plsql 1. 2. 3. Содержимое таблицы: id пользователя, его имя и какое-то поле с данными большого объёма. (Полей на самом деле большое, плюс связи с другими таблицами и т.п., но мысль ясна) Задачи: 1. Получать по конкретному id информацию о пользователе - т.е. выборка по всем полям и связанным таблицам. 2. Получать из БД список пользователей (скажем, 200 записей) - просто id и имя. Не хочется каждый раз, тащить большие объёмы данных и кучу связанных полей для списка пользователей, где нужны только имя и id. id Соответственно, завожу 2 Entity: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но, не совсем понимаю, как их замапить на БД. Если как @Inheritance(strategy = InheritanceType.SINGLE_TABLE), то везде в примерах говорится, что User должен быть абстрактным и не создавать инстансов. @MappedSuperclass не отображается на таблицу вообще, как я понял. Как настроить работу, что бы можно было иметь два не абстрактных класса, замапленных на одну таблицу, но отображающих полные и неполные данные. Или эта задача решается вообще как-то иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 16:55 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сурикат, @DiscriminatorColumn + SINGLE_TABLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:05 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Но, ведь это не разные сущности, по сути. Т.е. даже если вкорячить в таблицу DiscriminatorColumn, то... по какому критерию их разделять? И даже если и придумать критерий, то это получается, что на каждую предметную сущность, у нас будет в таблице по 2 записи? А смысл? Тогда уж, логичнее OneToOne зависимость и слить в отдельную таблицу всё кроме id и name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:13 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сурикат, А вы хотели чтобы одна и та же запись в разные моменты чтения выдавала бы разные классы сущности? Зачем?? Ведь User не каститься к UserData. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:20 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сурикат, - блоб полей нет? Фотографий 3500x3500 пикселей? Тогда вообще не парься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:21 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Тут дело, скорее просто в отсутствии опыта работы с ORM и незнании особенностей. В JDBC, я понимаю, что могу вручную составить запрос, указав определённые поля и просто отсечь объёмные поля, которые не нужны в данный момент. Ну и, ручной маппинг в JDBC как раз решит вопрос с заполнением полей в разных классах. Но в JPA, кроме как сделать наследование на ум особо ничего не пришло. (ну, разве что, да - сделать отдельную таблицу со связью OneToOne и ленивую загрузку). В интернетах ответа не нашёл, затем и пошёл на форум :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:25 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123Сурикат, - блоб полей нет? Фотографий 3500x3500 пикселей? Тогда вообще не парься. BLOB ленивым свойством решается. Нафига городить ассоциацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:41 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
СурикатТут дело, скорее просто в отсутствии опыта работы с ORM и незнании особенностей. Ну, а с проектированием БД всё в порядке? Нафига на одну таблицу два типа? СурикатВ JDBC, я понимаю, что могу вручную составить запрос, указав определённые поля и просто отсечь объёмные поля, которые не нужны в данный момент. Ширина выборки на производительность имеет совершенно никакого влияния. Вы занимаетесь привентивной оптимизацией. СурикатНу и, ручной маппинг в JDBC как раз решит вопрос с заполнением полей в разных классах. Вы не рассказали как вы собираетесь объект типа User хранить в переменной типа UserData. С точки зрения одной таблицы они идентичны. А в коде вы решили эту идентичность нарушить. Сурикат Но в JPA, кроме как сделать наследование на ум особо ничего не пришло. Что бы на ум что-то пришло надо определиться с тем какую именно проблемы мы пытаемся решить. Если нужно ограничить выборку по ширине, то пожалуйста JPQL: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:47 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123Сурикат, - блоб полей нет? Фотографий 3500x3500 пикселей? Тогда вообще не парься. BLOB ленивым свойством решается. Нафига городить ассоциацию. +1. Был не уверен) тогда вообще проблема высосана из пальца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 17:53 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сурикат, Нашел ещё другое решения. По-хорошему такую проблему нужно решать ленивостью. Ваш подход ленивость убивает на корню. Нужно явно загружать данные другим запросом, чтобы получить все детали. А для ленивости в JPA существует аннотация @Basic. Только учтите что ленивость простых свойств требует инструментации класса на уровне байт-кода. Не знаю как современные реализации JPA, но Hibernate ещё несколько лет назад не умел инструментировать сущности на лету. Нужно было в сборке прописывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 18:11 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВы занимаетесь привентивной оптимизацией. Да, похоже на то. :) Blazkowicz По-хорошему такую проблему нужно решать ленивостью. Ваш подход ленивость убивает на корню. Согласен. Ленивость тут походит гораздо лучше и, в общем, то даже проще. Спасибо за дельные советы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 20:49 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczШирина выборки на производительность имеет совершенно никакого влияния. Вы занимаетесь привентивной оптимизацией. Покрывающие индексы? Нет, не слышал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 10:49 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркПокрывающие индексы? Нет, не слышал. Лолшто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 11:07 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
MS опять впереди всех))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 11:22 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123MS опять впереди всех))) Такая оптимизация есть не только у MS. Например здесь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 11:27 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин Марк то ...а если бы у рыбы была шерсть, то в ней водились бы блохи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 11:29 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин Марк, это только подтверждает исключение из правил для остальных СУБД). А по сабжу, эти мелочи что ты привёл...они не ведь не имеют к сабжу отношения. Теория построения СУБД это одно, а суровая реальность построения Ынтирпрайз - другое. IMHO Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 12:03 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123Локшин Марк, это только подтверждает исключение из правил для остальных СУБД). Oracle, DB2 . Petro123Теория построения СУБД это одно, а суровая реальность построения Ынтирпрайз - другое. Медленно работает? Да мы еще 10 серверов возьмем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 12:38 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123MS опять впереди всех))) Да ладно тебе стебаться, индексное покрытие обеспечивает любая мало-мальски адекватная СУБД, вплоть до . Однако, IMHO если человек выбрал ORM, то вопросы как оптимальнее что-то сделать с БД его точно не волнуют. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 12:41 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевОднако, IMHO если человек выбрал ORM, то вопросы как оптимальнее что-то сделать с БД его точно не волнуют. :) скажу больше. Если человек выбрал Java, то вопросы Мелочные в СУБД решаются не на уровне программиста. И это замечательно. Есть бизнес и требования бизнеса. А есть НИИИ для создания СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 12:46 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньеввыбрал ORM ты прав - вопрос про JPA а не экзотику в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 12:49 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркМедленно работает? Да мы еще 10 серверов возьмем. ты не понял. В Java сидят практики с большой зарплатой. А не теоретики. Вот когда ты ссылку на практику из ветки Оракла покажешь. Тогда тут будут шевелиться и и ВОЗМОЖНО включать в свою практику. Пока там в ветке IMHO ноль твоих ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 12:58 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123Вот когда ты ссылку на практику из ветки Оракла покажешь. Тогда тут будут шевелиться и и ВОЗМОЖНО включать в свою практику. Пока там в ветке IMHO ноль твоих ссылок. Заблуждайтесь дальше, ваше право. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 14:06 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевОднако, IMHO если человек выбрал ORM, то вопросы как оптимальнее что-то сделать с БД его точно не волнуют. :) Если более-менее быть в курсе и понимать что и как работает, то можно и с ORM задумываться над оптимальностью. но это же Petro123мелочи что ты привёл... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 14:09 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркPetro123Вот когда ты ссылку на практику из ветки Оракла покажешь. Тогда тут будут шевелиться и и ВОЗМОЖНО включать в свою практику. Пока там в ветке IMHO ноль твоих ссылок. Заблуждайтесь дальше, ваше право. Жесть ты упоротый. Ещё раз для тех кто в танке. Выбирать 2 поля без индекса и 10 полей без индекса - разница в производительности околонулевая. Выбирать 2 поля с "покрывающим индексом" или 10 полей с "покрывающим индексом" - разница в производительности околонулевая. Отсюда вывод - производительность от ширины выборки не зависит. А есть там индекс или нет, это совершенно другой вопрос к теме отношения не имеющий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 14:16 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркЕсли более-менее быть в курсе и понимать что и как работает извини, но уметь оличать мелочи от важностей - это уже уровень программиста а не кодировщика. BlazkowiczОтсюда вывод - производительность от ширины выборки не зависит. А есть там индекс или нет, это совершенно другой вопрос к теме отношения не имеющий. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 14:25 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЖесть ты упоротый. Ещё раз для тех кто в танке. Выбирать 2 поля без индекса и 10 полей без индекса - разница в производительности околонулевая. Выбирать 2 поля с "покрывающим индексом" или 10 полей с "покрывающим индексом" - разница в производительности околонулевая. Отсюда вывод - производительность от ширины выборки не зависит. А есть там индекс или нет, это совершенно другой вопрос к теме отношения не имеющий. Таблицы без индексов на продакшене row-based СУБД бывают очень редко. Разве что у крутых java-ынтерпрайз программистов... Наличие индекса определяет возможные оптимизации, которыми пользуется СУБД. Возможность применения обсуждаемой оптимизации зависит от итогового ResultSet'а. Поэтому вывод абсолютно неверный, т.к. производительность существенным образом зависит от того, попадает ли дополнительное поле в индекс или нет, и поэтому совет твой про производительность крайне плохой и вредный. PS. А ты - хамло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 14:56 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркТаблицы без индексов на продакшене row-based СУБД бывают очень редко. Как это опровергает моё утверждение? Локшин МаркРазве что у крутых java-ынтерпрайз программистов... ЧСВ зашкаливает? Локшин МаркНаличие индекса определяет возможные оптимизации, которыми пользуется СУБД. И? Локшин МаркВозможность применения обсуждаемой оптимизации зависит от итогового ResultSet'а. Какой конкретно оптимизации? У автора темы она одна у тебя другая. Локшин МаркПоэтому вывод абсолютно неверный, т.к. производительность существенным образом зависит от того, попадает ли дополнительное поле в индекс или нет ППЦ у тебя логика. То есть это не индексы нужны чтобы оптимизировать запросы которые поступают БД, а программист, который использует БД должен учитывать те индксы которые нахерачил DBA чтобы не дай бог не получить не оптимальную выборку? Локшин Марк, и поэтому совет твой про производительность крайне плохой и вредный. Ты даже не вникаешь в то что здесь пишут. У меня совет был использовать ленивые свойства вместо того что изобретает ТС. А влияние ширины выборки на производительность это констатация факта, а не совет. Локшин МаркPS. А ты - хамло. Добро пожаловать в интернет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 15:07 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВыбирать 2 поля с "покрывающим индексом" или 10 полей с "покрывающим индексом" - разница в производительности околонулевая. Отсюда вывод - производительность от ширины выборки не зависит. Разница есть в контексте плана Index Only Scan. Сама таблица не будет сканиться все данные в чистом виде из индекса будут браться. Т.е читаться будет только файл с индексом который скорее всего в большинстве случаев будет меньше по размеру в байтах чем таблицы, и вероятность что индекс поместится в памяти больше чем таблица, ну как минимум большая часть индекса в процентном соотношении будет в кэше RAM Но это сферический случай. Выборка идет только по самой таблицы ни каких join и никаких дополнительных полей не из индекса выбираться не будут. все в контексте Postgres ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 16:02 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczППЦ у тебя логика. То есть это не индексы нужны чтобы оптимизировать запросы которые поступают БД, а программист, который использует БД должен учитывать те индксы которые нахерачил DBA чтобы не дай бог не получить не оптимальную выборку? Не вдаваясь в подробности кто там должен создавать индексы, поясняю, что небрежным отношением к полям выборки (производительность от ширины выборки не зависит (с) ) ты лишаешь возможности СУБД применить оптимизацию, а DBA сделать индекс для оптимизации, если его почему-то нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 16:35 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркНе вдаваясь в подробности кто там должен создавать индексы, поясняю, что небрежным отношением к полям выборки (производительность от ширины выборки не зависит (с) ) ты лишаешь возможности СУБД применить оптимизацию, а DBA сделать индекс для оптимизации, если его почему-то нет. Ерунда. Система тестируется в условиях близких к боевым, DBA смотрит статистику и оптимизирует базу под запросы. Если критические запросы занимают слишком много времени никто не мешает в ORM их сузить. Только бывает это нужно исключительно после запуска боевого продакшна, если действительно узкое место выявлено на отдельно взятом запросе в реальных условиях. А закладывать подобные тонкие оптимизации на этапе написания кода это бред. Усложнять код только ради того чтобы в будущем рассчитывать на подобный тюнинг - бред в двойне. Поэтому своё "лишает возможности" можете оставить при себе. Тонкий тюниг всегда требует изменений с обоих сторон - БД и Middle Tier. И никаких ограничений для него нет ни в JDBC ни в ORM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 16:50 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Все равно я бы загружал меньше колонок из бд, потому что тогда java-обьект будет меньше памяти занимать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 16:55 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Паша01, Вопрос не в меньше колонок, вопрос в наследовании. Условно говоря Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. С точки зрения СУБД если тебе нужны только сущности типа User, то их можно получить только индексным покрытием. Но с позиции философии ООП надо создавать объекты соответствующих класов, хоть и работать с ними как с классом User. А значит при считывании объектов надо: либо заморачиваться с ленивой подгрузкой полей (и разными запросами на то и другое), либо забыть про индексное покрытие. Вот о чем, как мне кажется, идет философский диспут, который со стороны выгладит как: "Сам ты это слово". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 17:16 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Паша01Все равно я бы загружал меньше колонок из бд, потому что тогда java-обьект будет меньше памяти занимать. Вы к нам на машине времени прямиком из 90х? Планка DDR4 64Gb cо штатной частостой 3000 стоит 400 USD. Это примерно 1 день работы программиста на нормальной зарплате в штатах. На серверную мать можно впихнуть 512Gb!! Это пол Гига оперативы! А вы тут байтики в ваших несчастных объектах экономите, а потом думаете как же потом запустить ещё 5 запросов, чтобы недостающие поля загрузить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 17:17 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевВот о чем, как мне кажется, идет философский диспут, который со стороны выгладит как: "Сам ты это слово". :) Философский диспут тут только у тех кто мнит себя DBA а про ORM знает только то что "оно медленное". Грузите всегда все поля сущности. Всё. Когда нужны будут тонкие оптимизации - никто не мешает их применить в тех кейсах, где это действительно нужно. Появился толстый BLOB, который нет смысла тоскать по сети - добавили ленивое свойство. Решили читать колонки из индекса? Меняем загрузку на SELECT new User(id, name) и только там где это, действительно , требуется. Вот и всё. Никаких выдуманных ограничений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 17:22 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczФилософский диспут тут только у тех кто мнит себя DBA а про ORM знает только то что "оно медленное". Ну да, ну да использую не один год разные ORM, и знаю только то, что "оно медленное". Опять мимо тазика. BlazkowiczГрузите всегда все поля сущности. Всё. Когда нужны будут тонкие оптимизации - никто не мешает их применить в тех кейсах, где это действительно нужно. Вот как раз сущность + поле "someBigData" - хороший случай для оптимизации. Конечно, когда у системы 3,5 пользователя и в таблице 100 записей можно грузить и все. Но если мы говорим о реальной высоко нагруженной системе, то это как раз хорошее место для оптимизации, притом такое место видно заранее (если конечно не знать, что "Ширина выборки на производительность имеет совершенно никакого влияния."). Ну и конечно, можно же все замазать гигагерцами процов и терабайтами оперативы. А пассаж про "это нужно исключительно после запуска боевого продакшна" вообще шикарен. Такой продакшен может очень сильно огорчить заказчика. И если все вопросы оптимизации относить на этап поддержки в продакшене, то может оказаться, что дешевле все взять и переписать, чем пытаться оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 10:18 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин Марк, тут были такие методы озвучены: - ничего не делать т.к. экономия на спичках в CRUD системе - поставить тяжёлым полям ленивую загрузку по требованию - вынести тяжёлые поля в отдельный класс с ленивой загрузкой - ВашСпособ. Вы считаете что ваш способ настолько важен что его первым в списке поставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 13:54 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123Вы считаете что ваш способ настолько важен что его первым в списке поставить? Да у меня был не столько способ, сколько констатация факта того, что игнорирование ширины выборки может в реальных кейсах весьма ощутимо ударить по производительности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 18:36 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркНо если мы говорим о реальной высоко нагруженной системе Бла-бла-бла. Каждый разработчик мнит что его проект будет высоко нагруженной системой. А по факту таких единицы. Локшин Марк то это как раз хорошее место для оптимизации Привентивной оптимизации. Локшин МаркНу и конечно, можно же все замазать гигагерцами процов и терабайтами оперативы. Которые стоят на порядки дешевле чем работа квалифицированого специалиста. Но не всем дано понять. Локшин МаркА пассаж про "это нужно исключительно после запуска боевого продакшна" вообще шикарен. Потому что реальную картину нагрузок вы даже на тестах не получите. Локшин МаркТакой продакшен может очень сильно огорчить заказчика. Понятно. Аутсорс к тому же. Бывает. Локшин МаркИ если все вопросы оптимизации относить на этап поддержки в продакшене, то может оказаться, что дешевле все взять и переписать, чем пытаться оптимизировать. Ооо, молодой, горячий, руссский программист. Такого видно за версту. Взять и переписать. Других решений не знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 20:45 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркДа у меня был не столько способ, сколько констатация факта того, что игнорирование ширины выборки может в реальных кейсах весьма ощутимо ударить по производительности... Ну, то есть про упоротость я не ошибся. Во-первых. Ширина выборки таки на производительность не влияет. Вы до сих пор не удосужились это никак опровергнуть кроме как закатыванием глаз и ахами по поводу мегагерц. Во-вторых. Если вы вдруг решили оптимизировать выборку путём сужения и индексации, то выше я привел как это делается путём простейшей замены способа выборки. Вам же снова по делу нечего возразить, так как по-вашему можно только "всё переписать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 20:49 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
[quot Blazkowicz]Локшин МаркВо-первых. Ширина выборки таки на производительность не влияет А почему не влияет-то? По сети трафика гонять меньше, жавских объектов создавать меньше, ну и собственно памяти нужно меньше, CPU тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 14:58 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловА почему не влияет-то? По сети трафика гонять меньше, жавских объектов создавать меньше, ну и собственно памяти нужно меньше, CPU тоже. Влияет если текст в поле из >1000 букв или картинка в пару мегов. Тогда уже все решения разобрали. Вы про какой случай? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:03 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловА почему не влияет-то? По сети трафика гонять меньше, жавских объектов создавать меньше, ну и собственно памяти нужно меньше, CPU тоже. Имеется ввиду что при выборке записей, в общем случае, неважно два поля выбирать или 12. Производительность запроса при этом практически одинаково, план исполнения от этого не поменяется(ну за исключением случая когда всю запись можно вынять из индекса). Вопрос трафика и тд перпендикулярен всему этому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:14 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловА почему не влияет-то? Нет, но если буквоедствовать, то да влияет. Но вот только разница между передачей 20 полей с 2 полей на несколько порядков меньше чем затраты RDBMS на поиск записей и передачи этих данных по сети, в принципе. Андрей ПанфиловПо сети трафика гонять меньше На сколько меньше? Андрей Панфиловжавских объектов создавать меньше Речь о "ширине" выборки. Количество объектов это количество записей в БД. Это уже длина выборки. Андрей Панфиловну и собственно памяти нужно меньше, CPU тоже. По поводу памяти, сильно зависит от того что у вас там за типы. По поводу CPU - смешно. Тормоза в работе с БД они реже всего из CPU приходят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:15 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczАндрей ПанфиловПо сети трафика гонять меньше На сколько меньше? вот есть транспортный уровень, под ним канальный и физический, вы выбираете за раз некоторое внушительное количество записей, которое не влезает в пакет транспортного уровня. Есть разница в одном пакете вы данные получите или в десяти? BlazkowiczАндрей Панфиловжавских объектов создавать меньше Речь о "ширине" выборки. Количество объектов это количество записей в БД. Это уже длина выборки. Андрей Панфиловну и собственно памяти нужно меньше, CPU тоже. По поводу памяти, сильно зависит от того что у вас там за типы. По поводу CPU - смешно. Тормоза в работе с БД они реже всего из CPU приходят. Речь о ширине и идет. Пришел пакет L7 - его JDBC-драйвер должен разобрать и превратить байты в строки, числа и пр., а только потом ORM превратит это все в бины. Соответственно тратим время на то чтобы получить жавские объекты, потом будем заставлять GC их вычищать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:43 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловвот есть транспортный уровень, под ним канальный и физический, Блеснем познаниемс в OSI? Андрей Панфиловвы выбираете за раз некоторое внушительное количество записей, которое не влезает в пакет транспортного уровня. Есть разница в одном пакете вы данные получите или в десяти? Вы не получите выборку одним пакетом почти наверняка. Это раз. И вы ушли от моего вопроса про величину разницы. Это два. Андрей Панфиловпотом будем заставлять GC их вычищать. Ну, давайте про GC ещё поговорим. Например о том что производительность большинства (если не всех) сборщиков в Hotspot зависит от количества живых объектов, а не от количествуа "вычищаемых". Поэтому гадить большим количеством быстроумирающих объектов не страшно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:53 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов, интересно вы копаете). А вы верите что на прикладном уровне маппинга монописуальна ваша ширина и размер пакетов в нижних уровнях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:54 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловЕсть разница в одном пакете вы данные получите или в десяти? есть гарантия что запрос будет выбирать данные точно влезающие либо в 1 либо в 10 TCP пакетов ? т.е это наиболее распространенный сценарий сетевого соединения? насколько часто вам приходится подгонять SQL запросы под длину сетевого пакета ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 16:12 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczБлеснем познаниемс в OSI? Тут блистать не чем, данных больше - пропускную способность нужно иметь выше, ограничение на размер пакетов и TCP ACK убивают производительность, или это не очевидно? BlazkowiczВы не получите выборку одним пакетом почти наверняка. Это раз. т.е. между 1 и 10 разница есть, а между 5 и 10 уже нет? BlazkowiczИ вы ушли от моего вопроса про величину разницы. Это два. Ну по правде говоря, вопрос "почему" на абсурдное, на мой взгляд, утверждение задал я, при этом я свое мнение обосновал. Вопрос "на сколько меньше трафика по сети гонять" тоже сам по себе абсурден, ибо и так очевидно, что в переделе зависимость линейная, а не в переделе зависит от. Что касается изначального постулата, о том что производительность не зависит от ширины выборки, то на запросах вида: Код: plsql 1. разница в скорости выборки между 2 и 20 колонками - 10%, а между 50 и 100 - уже 100%, по CPU тоже разница видна невооруженным взглядом: http://screencast.com/t/h6kM7yDx BlazkowiczНу, давайте про GC ещё поговорим. Например о том что производительность большинства (если не всех) сборщиков в Hotspot зависит от количества живых объектов, а не от количествуа "вычищаемых". Поэтому гадить большим количеством быстроумирающих объектов не страшно.А чего вы решили что они быстро умирают-то? В PostgreSQL, к примеру, по-умолчанию данные оседают в резалтсете ( https://jdbc.postgresql.org/documentation/head/query.html#fetchsize-example) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 18:01 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловТут блистать не чем, данных больше - пропускную способность нужно иметь выше, ограничение на размер пакетов и TCP ACK убивают производительность, или это не очевидно? Не очевидно. Кроме данных в пакетах ездит куча служебной информации. Выборки далеко не всегда имеют единственную строку как результат. Андрей Панфиловт.е. между 1 и 10 разница есть, а между 5 и 10 уже нет? Не понял связи. Мой посыл в том что затраты на поиск и чтение не сопоставимы с разницей в передаче по сети 5 и 50 колонок. Андрей ПанфиловНу по правде говоря, вопрос "почему" на абсурдное, на мой взгляд, утверждение задал я, при этом я свое мнение обосновал. Обоснования не обнаружено. Вы указываете на то что разница должна быть. Таки - да, она есть. Но вы игнорируете тот факт что на фоне всех остальных накладных расходов на выполнения запроса ею можно принебречь. Андрей Панфиловразница в скорости выборки между 2 и 20 колонками - 10%, а между 50 и 100 - уже 100%, по CPU тоже разница видна невооруженным взглядом: http://screencast.com/t/h6kM7yDx Ну, таблицы на 50+ колонок живут в легаси БД, где таки да, есть смысл сужать выборки. А в пределах до 50 я таких значений в разнице не наблюдал в своих тестах в SQL Server. Но дело давно было. Андрей ПанфиловВ PostgreSQL, к примеру, по-умолчанию данные оседают в резалтсете Мы всё ещё говорим об ORM. Вычитали RS в объекты и закрыли. Открытым в серверных решениях его держать нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 18:33 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов Код: plsql 1. разница в скорости выборки между 2 и 20 колонками - 10%, а между 50 и 100 - уже 100%, по CPU тоже разница Про ОРМ и пагинацию забыли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 18:54 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВыборки далеко не всегда имеют единственную строку как результат. Не понял утверждения. База шлет клиенту не по одной строчке, а как клиент захочет ( https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#setFetchSize(int)) в оракле значение по-умолчанию - 10. Если знать что резалтсет заведомо узкий, то строки можно упаковывать плотнее. В оракле разница между 1 и 10 на запросе "select '100 chars' from dual connect by level < 1000000" - порядок, что как бы ожидаемо. Причем разница получается исключительно засчет сети. BlazkowiczАндрей Панфиловт.е. между 1 и 10 разница есть, а между 5 и 10 уже нет? Не понял связи. Мой посыл в том что затраты на поиск и чтение не сопоставимы с разницей в передаче по сети 5 и 50 колонок. У вас не предыдущей странице был вопрос: "Вы к нам на машине времени прямиком из 90х?". К вам вопрос: а вы из какого года прибыли? из 2000? Сейчас скорость IO у СУБД перекрывает скорость сетевых интерфейсов. Про поколоночное хранение в СУБД слышали что-нибудь? А про InMemory database? BlazkowiczОбоснования не обнаружено. Вы указываете на то что разница должна быть. Таки - да, она есть. Но вы игнорируете тот факт что на фоне всех остальных накладных расходов на выполнения запроса ею можно принебречь. Андрей Панфиловразница в скорости выборки между 2 и 20 колонками - 10%, а между 50 и 100 - уже 100%, по CPU тоже разница видна невооруженным взглядом: http://screencast.com/t/h6kM7yDx Ну, таблицы на 50+ колонок живут в легаси БД, где таки да, есть смысл сужать выборки. А в пределах до 50 я таких значений в разнице не наблюдал в своих тестах в SQL Server. Но дело давно было.Так есть разница или нет? Может просто MSSQL не так хорошо работает как хотелось бы? BlazkowiczМы всё ещё говорим об ORM. Вычитали RS в объекты и закрыли. Открытым в серверных решениях его держать нет смысла.И какой вывод я из этого должен сделать? Резалтсет читается некоторое время, можете с ходу сказать сколько запусков GC эти объекты переживут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 19:21 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
СурикатЕсть таблица Users в БД с полями: Код: plsql 1. 2. 3. Содержимое таблицы: id пользователя, его имя и какое-то поле с данными большого объёма. (Полей на самом деле большое, плюс связи с другими таблицами и т.п., но мысль ясна) Задачи: 1. Получать по конкретному id информацию о пользователе - т.е. выборка по всем полям и связанным таблицам. 2. Получать из БД список пользователей (скажем, 200 записей) - просто id и имя. Не хочется каждый раз, тащить большие объёмы данных и кучу связанных полей для списка пользователей, где нужны только имя и id. id Соответственно, завожу 2 Entity: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но, не совсем понимаю, как их замапить на БД. Если как @Inheritance(strategy = InheritanceType.SINGLE_TABLE), то везде в примерах говорится, что User должен быть абстрактным и не создавать инстансов. @MappedSuperclass не отображается на таблицу вообще, как я понял. Как настроить работу, что бы можно было иметь два не абстрактных класса, замапленных на одну таблицу, но отображающих полные и неполные данные. Или эта задача решается вообще как-то иначе? добрый день . Вроде как тема орма поднималась . советы тут уже были : Ваша объектная модель пусть будет как вы ее описали со всеми зависимостями итд ... чтобы эффективно писать на ОРМе и получать перфоманс именно от решения через ОРМ для каждого своего запроса пишите dto и вытаскивайте их по вашей модели Это дает вам полную свободу вы не завязаны на модель ентитей Это избавит вас от проблем dirty Checking , лайзилоудинга итд ... от всех минусов Подхода работы с базой через орм. может конечно возникнуть вопрос в чем тогда перфоманс от использования орма в таком подходе ? Если нужно вводить новый слой dto и писать кучу типового кода итд ... ответ - делайте так :) и не думайте , за вас уже подумали - такой подход это единственное оптимальное благо ) Как говорят ОРМ не для того чтобы извлекать данные из базы - орм для того чтобы их туда вставлять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 21:50 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловНе понял утверждения. База шлет клиенту не по одной строчке, а как клиент захочет Ну, так это и не я предложил результаты запроса в один TCP пакет поместить. Андрей ПанфиловУ вас не предыдущей странице был вопрос: "Вы к нам на машине времени прямиком из 90х?". 10 лет назад игровые high load сервера писали под кучи в 4Gb. Сейчас 64Gb для рабочей станции не проблема. Поэтому когда мне говорят о том что надо бы на полях экономить, я слегка охреневаю. Андрей ПанфиловК вам вопрос: а вы из какого года прибыли? из 2000? Сейчас скорость IO у СУБД перекрывает скорость сетевых интерфейсов. Про поколоночное хранение в СУБД слышали что-нибудь? А про InMemory database? Офигеть. Вы опять включили умника с кучей терминов, которые к вопросу отношения не имееют. Интерфейс с удаленной базой всегда был проблемой, даже в нулевых. Поэтому базу старались не отделять особо от middle tier. Но это становиться проблемой в нагруженом кластере, так как RDBMS одна и распределяется очень хреново, поэтому с ней нужен гигабитный интерфейс и желательно не один. Но, вашу ж мать, сейчас 10 гигабитный Ethernet не проблема. А вы собираетсь результаты запроса в пакеты укладывать. А про "колоночное хранение" и прочую чушь, не надо тут. Мы всё ещё обсуждаем ORM, который пока что подразумевает классический RDBMS с нормализацией. Андрей ПанфиловИ какой вывод я из этого должен сделать? Резалтсет читается некоторое время, можете с ходу сказать сколько запусков GC эти объекты переживут? У меня ни одного не переживают. Почему у вас это барахло живет так долго, я не скажу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 08:53 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Atum1, хитро). Т.е. в маппинге можно не заужать, а заузить кол-во колонок при передаче на клиента. Я предлагал сразу третий вариант - пагинация на страницы. Эффект тот же. А вывод пока простой - сабж не стоит и 5 копеек для обсуждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 08:54 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Atum1ответ - делайте так :) и не думайте , за вас уже подумали - такой подход это единственное оптимальное благо ) Хениально. Если бы все так делали, у нас бы сейчас не было, ни ORM, ни Dependency Injection. Ведь инженеры подумали и сочинили отличную J 2 EE спецификацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 08:58 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, от вас какие-то цифры можно будет дождаться или нет? я свои уже привел, при кручении правильных ручек только в жаве, разница между получением 2 и 20 колонок из базы - 4 раза, а ваши 10G - это всего лишь скорость линка, чтобы она в перфоманс материализовалась нужно еще ручки крутить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:15 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловBlazkowicz, от вас какие-то цифры можно будет дождаться или нет? я свои уже привел, при кручении правильных ручек только в жаве, разница между получением 2 и 20 колонок из базы - 4 раза, а ваши 10G - это всего лишь скорость линка, чтобы она в перфоманс материализовалась нужно еще ручки крутить. приведенный пример это сферический конь в вакуме, к реальной жизни имеет малой отношение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:26 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловот вас какие-то цифры можно будет дождаться или нет? Не сегодня. Андрей Панфиловя свои уже привел, при кручении правильных ручек только в жаве, разница между получением 2 и 20 колонок из базы - 4 раза Угу. Выкинули IO. Померяли не понятно что. Вышел синтетический тест, оторванный от реальности. Андрей Панфилова ваши 10G - это всего лишь скорость линка, чтобы она в перфоманс материализовалась нужно еще ручки крутить. Ох, уж эти детские мечты про "перформанс", который нужен гораздо меньше чем качественный, открытый к изменениям код и заложеная в архитектуру масштабируемость. 10 GB хватит для нормального взаимодействия любой RBDMS и middle tier реализованного без откровенных косяков. Можно ничего особо и не крутить. А когда нужно больше, то чаще встаёт вопрос про то подходит ли для этой задачи RDBMS в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:30 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловот вас какие-то цифры можно будет дождаться или нет? легко. - берём PL Developer для оракле - пишем там 2 запроса Код: java 1. 2. - первый 0,3 сек - первый 0,07 сек Дальше то что? ---- Это напоминает вопросы новичков в ветке Оракла: "Стоит ли таблицу в БД делить на две, если полей много?". Но тут же не новички собрались)). А вы с умным видом доказываете что то на физическом уровне, про хранение "листьев данных в СУБД". Ответили бы уже на первый поста автору, да и Фсё)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:39 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123- первый 0,3 сек - первый второй 0,07 сек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:40 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов, ну, а если говорить о прикладном уровне и Качестве проектирования, то - вы не тем инструментом меряете ОРМ. Т.е. погрешности вашего инструмента измерения покрывают сам результат. Т.к. ОРМ для прикладников. А я в своих проектах ни разу не испытывал тормозов из-за КОЛИЧЕСТВА полей. Это тут вам и втолковывают практики. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:44 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУгу. Выкинули IO. Померяли не понятно что. Вышел синтетический тест, оторванный от реальности. Вам никто не мешает описать "правильную" методику, только при этом не забывайте, что мы как бы в 2016 году живем, и воткнуть 512Gb памяти в СУБД особых проблем не составляет (хотя вру, сейчас писюки под 12Tb идут). BlazkowiczОх, уж эти детские мечты про "перформанс", который нужен гораздо меньше чем качественный, открытый к изменениям код и заложеная в архитектуру масштабируемость. Интересно, чем это заворачивание "мусора" в @Embeddable/Embedded начало влиять на качество кода и открытость к изменениям? Blazkowicz10 GB хватит для нормального взаимодействия любой RBDMS и middle tier реализованного без откровенных косяков. Можно ничего особо и не крутить. А когда нужно больше, то чаще встаёт вопрос про то подходит ли для этой задачи RDBMS в принципе. Возьмите для начала любой сетевой калькулятор, например https://www.switch.ch/network/tools/tcp_throughput/, и посмотрите какой throughput выдает TCP на 10G линке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:53 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловИнтересно, чем это заворачивание "мусора" в @Embeddable/Embedded начало влиять на качество кода и открытость к изменениям? Вы о чем вообще??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:59 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAtum1ответ - делайте так :) и не думайте , за вас уже подумали - такой подход это единственное оптимальное благо ) Хениально. Если бы все так делали, у нас бы сейчас не было, ни ORM, ни Dependency Injection. Ведь инженеры подумали и сочинили отличную J 2 EE спецификацию. =) просто инженеры все еще думают надо EE ) а пока они думают мы используем спринг , и они (инженеры) так же его используют :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:04 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВы о чем вообще???вам лучше знать, про "качественный, открытый к изменениям код и заложеная в архитектуру масштабируемость" писал же не я, соответственно и возник вопрос каким образом сужение projection влияет на качество кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:19 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123, утверждения "для ваших 200 записей вы видимого профита не получите" и "ширина выборки на производительность имеет совершенно никакого влияния" несут совершенно разную смысловую нагрузку, при этом второе не только неочевидно, да еще и нелогично, и, соответственно, требует хоть какого-то стройного подтверждения, а не чего-то в духе: "в жаву мы воткнем 512Gb памяти чтобы не париться из-за объемов, а в базу не будем - пусть страдает от I/O" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:39 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловPetro123, утверждения "для ваших 200 записей вы видимого профита не получите" и "ширина выборки на производительность имеет совершенно никакого влияния" несут совершенно разную смысловую нагрузку, при этом второе не только неочевидно, да еще и нелогично, и, соответственно, требует хоть какого-то стройного подтверждения, а не чего-то в духе: "в жаву мы воткнем 512Gb памяти чтобы не париться из-за объемов, а в базу не будем - пусть страдает от I/O" нарвали фраз из контекста "видимого профита не получите" "ширина выборки на производительность имеет совершенно никакого влияния, разница околонулевая" довольно похоже не правда ли по смыслу "в жаву мы воткнем 512Gb памяти чтобы не париться из-за объемов" Недавно насчитал за 150-200тыр можно собрать 132Gb RAM, машинку (цена в пределах топового макбука) "в базу не будем - пусть страдает от I/O" - об этом уже говорилось что чтение построчное (Postgres) разницы нет для DB читать одну колонку или все сразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:56 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingоб этом уже говорилось что чтение построчное (Postgres) разницы нет для DB читать одну колонку или все сразувы бы почитали про инструмент с которым вы работаете прежде чем утверждать что разницы нет: https://www.postgresql.org/docs/9.5/static/storage-toast.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 13:07 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловllemingоб этом уже говорилось что чтение построчное (Postgres) разницы нет для DB читать одну колонку или все сразувы бы почитали про инструмент с которым вы работаете прежде чем утверждать что разницы нет: https://www.postgresql.org/docs/9.5/static/storage-toast.html читаю регулярно. сразу второе предложение Therefore, it is not possible to store very large field values directly. тут уже где то говорилось что если large fields то делать их lazy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 13:12 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingсразу второе предложение Therefore, it is not possible to store very large field values directly. тут уже где то говорилось что если large fields то делать их lazy.Давайте с первого предложения, а не со второго. Что там происходит если строка таблицы в блок не влезает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 13:23 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
PostgreSQL uses a fixed page size (commonly 8 kB), and does not allow tuples to span multiple pages дальше что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 13:25 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingPostgreSQL uses a fixed page size (commonly 8 kB), and does not allow tuples to span multiple pages дальше что?В вашем инструменте принципиально нельзя создать "широкую" таблицу (больше 8K) или-таки можно, но при этом будет использоваться TOAST вне зависимости от того есть в таблице "large fields" или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 13:56 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловllemingPostgreSQL uses a fixed page size (commonly 8 kB), and does not allow tuples to span multiple pages дальше что?В вашем инструменте принципиально нельзя создать "широкую" таблицу (больше 8K) или-таки можно, но при этом будет использоваться TOAST вне зависимости от того есть в таблице "large fields" или нет? можно создать таблицу где tuple должен поместиться в 8Kb, если есть large fields и tuple больше 8Kb то его выкинет в toast table. Если нет large fields то создать таблицу где tuple превысит 8Kb думаю не получится (а оно зачем в таблице иметь больше сотни колонок) Anyway. Стало интересно вот проверил и привожу циферки. размер toast таблиц составляет 0.03% (не 3% а именно 0.03%) по отношению БД. Таблиц где toast_read превышает количество head_read нет. Есть всего лишь одна таблица где общее количество toast_read достаточно велико в абсолютной величине (Правда если сравнить с head read тойже таблицы то уже не так и много). Да и то там полей то, тот самый large object, id т.е. уменьшить количество полей из выборки уже некуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 14:41 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
head_read читать как heap_read ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 14:41 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingможно создать таблицу где tuple должен поместиться в 8Kb, если есть large fields и tuple больше 8Kb то его выкинет в toast table. Если нет large fields то создать таблицу где tuple превысит 8Kb думаю не получится (а оно зачем в таблице иметь больше сотни колонок)Ну вот у меня создает без проблем, 250 же не много совсем? (в DB2, к примеру так не получится - она заставит создавать таблицу в табличном пространстве с увеличенным размером блока, в Oracle можно или в другом табличном пространстве создавать или получить row chaining): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. При этом про "сотню колонок" вы слегка лукавите, мы же не 90-х живем, и однобайтовые кодировки, слава богу, умерли, поэтому на utf8 блок в 8K превращается всего 4K символов (+/- служебная информация), а с utf16 вообще все печально получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 15:00 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов250 же не много совсем? все поля текст по 250 - не жизненно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 15:17 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловBlazkowiczВы о чем вообще???вам лучше знать, про "качественный, открытый к изменениям код и заложеная в архитектуру масштабируемость" писал же не я, соответственно и возник вопрос каким образом сужение projection влияет на качество кода. Продолжайте нести ахинею. Смотрите не расплескайте по дороге. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 15:53 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Petro123все поля текст по 250 - не жизненно.При должном старании не проблема, однако посыл был несколько в другом, а именно в том, что при определенных условиях _в базе_ производительность-таки зависит от projection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 15:58 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПродолжайте нести ахинею. Смотрите не расплескайте по дороге. Удачи.Не нужно так расстраиваться, просто покажите цифры как "ширина выборки не влияет на производительность", и делу конец. Какой смысл теоретизировать и высасывать умозаключения из пальца, если можно просто взять и измерить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:01 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловPetro123все поля текст по 250 - не жизненно.При должном старании не проблема, однако посыл был несколько в другом, а именно в том, что при определенных условиях _в базе_ производительность-таки зависит от projection. на величину не сильно отличающуюся от нуля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:06 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловНе нужно так расстраиваться, просто покажите цифры как "ширина выборки не влияет на производительность", и делу конец. Какой смысл теоретизировать и высасывать умозаключения из пальца, если можно просто взять и измерить? Да, кто же расстраивается. Я просто больше не вижу смысла именно Вам что-то объяснять. У Вас в каждом сообщении факты вперемешку с чушью. Тратить время на выуживания ценной информации из потока вашего бреда надоело. Приплели какой-то @Embedded к архитектуре. С такой кашей в голове бесполезно соревноваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:07 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingна величину не сильно отличающуюся от нулятолько не в абстрактном PostgreSQL, а в вашей базе, на вашей схеме, на ваших данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:08 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДа, кто же расстраивается. Я просто больше не вижу смысла именно Вам что-то объяснять. У Вас в каждом сообщении факты вперемешку с чушью. Тратить время на выуживания ценной информации из потока вашего бреда надоело. Приплели какой-то @Embedded к архитектуре. С такой кашей в голове бесполезно соревноваться.Что значит какой-то? Это часть JPA-спецификации, чтобы не fetch=FetchType.LAZY у каждого поля ставить и таскаться с этим мусором, а выделить группу полей в отдельную сущность. Это вы "прилепили" "качественный, открытый к изменениям код и заложеная в архитектуру масштабируемость" к количеству колонок в projection, и каким образом это прилепилось выяснить так и не удалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:17 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловllemingна величину не сильно отличающуюся от нулятолько не в абстрактном PostgreSQL, а в вашей базе, на вашей схеме, на ваших данных. А зачем мне оптимизировать абстрактную БД которая только у вас в голове и доступ к ней только у вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:22 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingА зачем мне оптимизировать абстрактную БД которая только у вас в голове и доступ к ней только у вас.Это ваши слова? llemingоб этом уже говорилось что чтение построчное (Postgres) разницы нет для DB читать одну колонку или все сразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:28 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Да. А что там не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:32 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
lleming, будет разница в производительность между чтением всех колонок из таблицы и только тех, что не попали в TOAST (мы вроде как выяснили что в TOAST попадают не только совсем уж здоровые колонки, а вообще все что в 8K блок не поместилось)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:40 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловlleming, будет разница в производительность между чтением всех колонок из таблицы и только тех, что не попали в TOAST (мы вроде как выяснили что в TOAST попадают не только совсем уж здоровые колонки, а вообще все что в 8K блок не поместилось)? это мы не выяснили, это вы так поняли. (вообще почитайте ссылку которую вы привели про toast таблицы) так я вам привел пример реальные цифры. в тоаст попадает только одня таблица их нескольких сотен. паттерн ее использования говорит что не особо то даже из toast читается только наиболее длинные записи коих в процентном соотншении немного. уменьшать выборку колонок там уже некуда. Т.е. разница возможно и есть, но никто ее не видел и измерить тоже не удается. PS. Оптимизация абстрактных БД (600р/ч) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:56 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingТ.е. разница возможно и есть, но никто ее не видел и измерить тоже не удается. Почему не удается? Вот я беру оракл и специально делаю широкую таблицу, чтобы ее строки попадали в несколько блоков: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Чтение только первой колонки: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. чтение всех колонок: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. чтение колонок из разных блоков: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Разница есть, и я бы не сказал что она несущественная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:37 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловРазница есть, и я бы не сказал что она несущественная.Смотрим в плане колонки стоимости: проц и время - одинаковы во всех вариантах. За килобайты использованной памяти IBM-у уже никто не платит, на трафиковых тарифах канал к СУБД, обычно, не используют. Ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:49 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovСмотрим в плане колонки стоимости: проц и время - одинаковы во всех вариантах.Наверное потому что plan hash value одинаковый, да? а вот разница в IO (physical reads и consistent gets) налицо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 18:07 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
я вот мерил на реале (Postgres) и получилось (без сети) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Не вижу никакой разницы. Отсюда вывод что время выполнения запроса даже при наличинии toast table увеличивается на величину сравнимую с погрешностью доступа к диску, т.е на неизмеряемую величину. Ваш абстрактный случай абсолютно неинтересный. Всего 1000 записей это ни очем, там всегда seq scan будет. Если там 10млн строк то естесно будут сильно медленней. НО тут возникает вопрос кому нахрен на клиенте 10млн строк нужно сразу да еще и с large objects (Мы же про хибернейт помним)? А если это индекс скан то при извлечении строки 1 после поиска по индексу, чтение самой таблицы и только затем toast tаble 2 не факт что это строка попадет в toast (на реальных данных вот уменя с вероятность менее 50% попадает в toast ) 3 а про то что и как в кэш попадет и как здесь повезет вообще может сильно резульат поменять (по дешевую память уже было) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 18:29 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилова вот разница в IO (physical reads и consistent gets) налицо.До тех пор, пока ни то, ни другое не упёрлись в возможности хранилища - это пофигу. Особенно с учётом того, что данных миллисекундной точности фактического времени выполнения запроса вы не приводите, общей загрузки базы - тоже не видно, а без этих данных невозможно понять - требуется оптимизация или опять будем яйца (Фаберже) полировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 18:40 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingя вот мерил на реале (Postgres) и получилось (без сети) Код: plsql 1. Вы уверены, что ваш прибор показывает правильные данные? на 8.4 analyze показывает полную фигню: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 20:38 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
тут наверное следует упомянуть что Postgres прежде чем в toast записывать сжимает данные и проверяет еще раз а стоит ли toast Записывать или просто tuple записать в page т.е. строки типа 'xxxxxxxxxxxxxxxxxxxxxxxxxx........' очень хорошо сжимаются у меня файл 1.08Гб ужался до 1.2Мб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 21:20 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
lleming, ну а с 5Gb "хороших" данных как быть? Ну ладно, установил 9.5 чтобы быть на одной волне: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. и стало понятно почему вы не видите разницы: вы получаете какие-то два числа - "Planning time" и "Execution time", и на основе этих двух чисел делаете вывод. Проблема первая: что такое "Planning time" и "Execution time" никто не знает - из документации следует только то, что "Planning time" и "Execution time" - это нечто, что выводит команда explain, и здесь я готов согласиться, что projection не влияет на "Execution time", выводимый командой explain - эксперимент провели, явнойожидаемой корреляции не заметно (как экспериментатор я ожидал что цифры будут соответствовать количеству читаемых блоков, а они не соответствуют). Проблема вторая: "Execution time", выводимый командой explain, никакого отношения к производительности не имеет. Поясню. В Oracle execution time (что это такое в документации отражено: http://docs.oracle.com/cd/A97630_01/server.920/a96533/sqltrace.htm) для селектов почти всегда 0, потому что для селектов фаза execute подразумевает открытие курсора и получение текущего SCN, а вся работа происходит в фазе fetch (Retrieves rows returned by a query) и в PostgreSQL аналогично - ну не может он 5Gb данных вычитать за 1.5ms. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 03:30 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
BlazkowiczАндрей ПанфиловК вам вопрос: а вы из какого года прибыли? из 2000? Сейчас скорость IO у СУБД перекрывает скорость сетевых интерфейсов. Про поколоночное хранение в СУБД слышали что-нибудь? А про InMemory database? Офигеть. Вы опять включили умника с кучей терминов, которые к вопросу отношения не имееют. Интерфейс с удаленной базой всегда был проблемой, даже в нулевых. Поэтому базу старались не отделять особо от middle tier. Но это становиться проблемой в нагруженом кластере, так как RDBMS одна и распределяется очень хреново, поэтому с ней нужен гигабитный интерфейс и желательно не один. Но, вашу ж мать, сейчас 10 гигабитный Ethernet не проблема. А вы собираетсь результаты запроса в пакеты укладывать. А про "колоночное хранение" и прочую чушь, не надо тут. Мы всё ещё обсуждаем ORM, который пока что подразумевает классический RDBMS с нормализацией. Может вам к вендору сходить и рассказать какие там у него лохи сидят: Exadata Smart Scan Projection Limitation ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 03:50 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилови стало понятно почему вы не видите разницы: вы получаете какие-то два числа - "Planning time" и "Execution time", и на основе этих двух чисел делаете вывод. Проблема первая: что такое "Planning time" и "Execution time" никто не знает - из документации следует только то, что "Planning time" и "Execution time" - это нечто, что выводит команда explain, и здесь я готов согласиться, что projection не влияет на "Execution time", выводимый командой explain - эксперимент провели, явнойожидаемой корреляции не заметно (как экспериментатор я ожидал что цифры будут соответствовать количеству читаемых блоков, а они не соответствуют). Проблема вторая: "Execution time", выводимый командой explain, никакого отношения к производительности не имеет. Поясню. В Oracle execution time (что это такое в документации отражено: http://docs.oracle.com/cd/A97630_01/server.920/a96533/sqltrace.htm) для селектов почти всегда 0, потому что для селектов фаза execute подразумевает открытие курсора и получение текущего SCN, а вся работа происходит в фазе fetch (Retrieves rows returned by a query) и в PostgreSQL аналогично - ну не может он 5Gb данных вычитать за 1.5ms. это в качестве нормы для сложного запроса прогнать expain (analyze, timing). Если хотите узнать сколько будет читаться при этом блоков то Код: plsql 1. И можно будет увидеть " Buffers: shared hit=53" а это значит что 53 * 8 = 424Kb Код: plsql 1. результат 424Kb Цифры соотвествуют если у вас тысяча записей всего и т.к. никаких toast нет таблиц поскольку, данные сжимаются легко и непринужденно, такая таблица с 1000 записей у меня 424Kb весит и если у вас для postgres стоит по дефолту, вся умещается в кэше, о чем говорит shared hits. По сути тут вы даже не меряете IO поскольку его и нет. Вся таблица в кэше это раз, большие данные сжаты здорово это два. Здесь измерено как быстро работает RAM и как быстро процессор может распраковать данные. Даже с IO, для для первого чтения это всего 54 страницы по 8Kb милисекунды даже для HDD "Planning time" - принято считать что парсинг запроса, валидация, построение AST. "execution time" - как я понял это время от начала транзакции до ее завершения. Пример к реальной жизни имеет малое отношение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 10:34 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingПример к реальной жизни имеет малое отношение. +1 и к теме про JPA тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 10:45 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingэто в качестве нормы для сложного запроса прогнать expain (analyze, timing). Если хотите узнать сколько будет читаться при этом блоков то Код: plsql 1. И можно будет увидеть " Buffers: shared hit=53" а это значит что 53 * 8 = 424Kb Код: plsql 1. результат 424Kb Цифры соотвествуют если у вас тысяча записей всего и т.к. никаких toast нет таблиц поскольку, данные сжимаются легко и непринужденно, такая таблица с 1000 записей у меня 424Kb весит и если у вас для postgres стоит по дефолту, вся умещается в кэше, о чем говорит shared hits. Нет, данные не "пожаты" и не в кеше, потому что в итоге все (5Gb) забито рандомом, а на виртуалке всего 1Gb памяти - врет прибор: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ок, вот здесь верим, а вот здесь уже не верим: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. т.е. explain ограничивается чтением только заголовков, а не читает блоки полностью, точно такой же эффект при использовании octet_length: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. нужно заставлять explain читать данные, чтобы они хоть как-то были похожи на правду: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 11:02 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
нет не врет. основная таблица всего 770кб. поле a2 хранится в toast table в 5Gb Код: plsql 1. 2. Зачем здесь читать таблицу toast если эти данные не нужны? Достаточно прочитать 770Kb из кэша. Код: plsql 1. здесь быстро из за того что получить результат совсем необязательно читать данные, ведь у них нет получателя, а сколько байт в этом поле и так указано в метаданных. Вполне разумная оптимизация. В реале также и сделает postgres. Если и в реале и explain получаем одинаковый, всегда верный (наибыстрейшим способом) результат то как бэ в чем претензии? Код: plsql 1. Здесь явно нужно преобразовать данные. А для этого нужно их достать с диска. Код: plsql 1. здесь скорее всего планнер постарался. Раз нет получателя то необязательно и читать данные. (Это как раз интересный случай, возможно даже баг поинтересуюсь в соотвествующем чате.) Андрей Панфиловнужно заставлять explain читать данные, чтобы они хоть как-то были похожи на правду: нет. нужно читать что выводит explain и понимать почему так это произошло. результаты хорошие предсказуемые. все в порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 11:45 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
llemingвсе в порядке.что именно в порядке-то? вот смотрите что получается: вы утверждаете, что в PostgreSQL производительность не зависит от projection (с оговоркой о широких колонках) я утверждаю, что кроме широких колонок существуют еще широкие таблицы, и на таких таблицах эффект падения производительности вполне может иметь место быть (т.е. я беру референсную СУБД и наблюдаю там описываемый эффект и предлагаю вам воспроизвести) вы берете прибор "explain", им что-то замеряете и получаете противоречивый (т.е. не соотносящийся с поведением референсной СУБД) результат я показываю, что ваши измерения были проведены не верно Наверное после этого следует провести измерения более правильным способом и убедиться в присутствии эффекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 14:09 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловllemingвсе в порядке.что именно в порядке-то? вот смотрите что получается: вы утверждаете, что в PostgreSQL производительность не зависит от projection (с оговоркой о широких колонках) я утверждаю, что кроме широких колонок существуют еще широкие таблицы, и на таких таблицах эффект падения производительности вполне может иметь место быть (т.е. я беру референсную СУБД и наблюдаю там описываемый эффект и предлагаю вам воспроизвести) вы берете прибор "explain", им что-то замеряете и получаете противоречивый (т.е. не соотносящийся с поведением референсной СУБД) результат я показываю, что ваши измерения были проведены не верно Наверное после этого следует провести измерения более правильным способом и убедиться в присутствии эффекта. В порядке значит когда результат предсказуемый. Тогда вполне понятно что можно ожидать. А вот когда результат непонятный, непредсказуемый это плохо. Это значит что проблема есть и неизвестно какая. 1. Не зависит. С оговоркой в реальном мире и реальное падение производительности на реальных данных и даже в широких таблицах. 2. Существуют эффект падения незначительный, по сути соизмеримый с погрешностью измерения. Легко и просто нивелируемый словом Lazy при необходимости. 3. Я получил четкий, однозначный, предсказуемый результат. То что Вы не в состоянии осознать как пользоваться и интерпретировать результат expain, так читайте доки, у Postgres очень хорошая документация. 4. Не увидел где. Все верно в абсолюте. Я описал почему так происходит. Доки почему так проиходит можно найти на https://www.postgresql.org/docs/9.5/static/index.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 14:54 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Если мы работаем с одной таблицей, то использование/неиспользование покрывающего индекса в запросе (что напрямую зависит от ширины выборки) дает рост производительности запроса в десятки раз минимум (на нормальных объемах данных). Если с несколькими - есть нюансы, но рост скорости на порядки также возможен. Здесь ширина выборки гораздо больше решает. Однако некоторым здесь это кажется несущественным моментом на который нужно забить, и вспоминать только тогда, когда репорты с боевых установок начнут приходить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 15:27 |
|
||
|
JPA и наследование
|
|||
|---|---|---|---|
|
#18+
Локшин МаркЕсли мы работаем с одной таблицей, то использование/неиспользование покрывающего индекса в запросе (что напрямую зависит от ширины выборки) дает рост производительности запроса в десятки раз минимум (на нормальных объемах данных). Если с несколькими - есть нюансы, но рост скорости на порядки также возможен. Здесь ширина выборки гораздо больше решает. Однако некоторым здесь это кажется несущественным моментом на который нужно забить, и вспоминать только тогда, когда репорты с боевых установок начнут приходить. возможно даже не только делать покрывающие индексы но и рефакторить БД, приложение http://martinfowler.com/books/refactoringDatabases.html Только эти индексы не мантра которую чем больше повторяешь тем быстрее БД работает. Если навтыкать индексов в таблицу да еще foreing key в ней не один, то на инсертах и делетах БД начнет грустить и иногда печально посматривать в даль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 15:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2123600]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
143ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 486ms |

| 0 / 0 |
