Рейтинг темы:
  • 1 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
HikariCP - самый быстрый jdbc connection pool
#51
GabberBaby Написал:Как меряли производительность ? Я уверен, что ты просто что-то настроил криво либо использовал старую версию пула.
В любом случае я больше верю jmh бенчмаркам, чем пустословию без единого доказательства.

JMetter-ом естественно
Поверь мне, будучи Enterprise разработчком - очень трудно ошибиться в таких ситуациях, когда на проект пытаешься поставить новый CP Smile
Ответ
#52
Dolwin Написал:JMetter-ом естественно
Поверь мне, будучи Enterprise разработчком - очень трудно ошибиться в таких ситуациях, когда на проект пытаешься поставить новый CP Smile

Я имел ввиду, чем ты измерял что hikaricp медленнее dbcp. Или это просто "на глазок", что есть очень тупо ?
А быть "enterprise разработчиком" значит работать с кучей легаси говна и всё.
Ответ
#53
GabberBaby Написал:Я имел ввиду, чем ты измерял что hikaricp медленнее dbcp. Или это просто "на глазок", что есть очень тупо ?
А быть "enterprise разработчиком" значит работать с кучей легаси говна и всё.

Это утверждение спорно. Например, WS - это легаси? SOA будем пилить на уровне io/nio и разбора XML на уровне "if node.equals("requestBody")"?

Вот уж где правда куча легаси и хардкода, так это, например, здесь:

Код:
                case 2: // Установка уже взятого саба (см case 5)
                    html.append("<br>Переключить саб-класс:<br>");

                    final int baseClassId = activeChar.getBaseClassId();

                    if(playerClassList.size() < 2)
                        html.append("У вас нет саб-классов для переключения, но вы можете добавить его прямо сейчас<br><a action=\"bypass _bbscareer;sub;1\">Добавить саб.</a>");
                    else
                    {
                        html.append("Какой саб-класс вы желаете использовать?<br>");

                        if(baseClassId == activeChar.getActiveClassId())
                            html.append(HtmlUtils.htmlClassName(activeChar.getActiveClassId())
                                + " <font color=\"LEVEL\">(Базовый)</font><br><br>");
                        else
                            html.append("<a action=\"bypass _bbscareer;sub;5 " + baseClassId + "\">"
                                + HtmlUtils.htmlClassName(activeChar.getActiveClassId()) + "</a> "
                                + "<font color=\"LEVEL\">(Базовый)</font><br><br>");

                        for(SubClass subClass : playerClassList.values())
                        {
                            if(subClass.isBase())
                                continue;
                            int subClassId = subClass.getClassId();

                            if(subClassId == activeChar.getActiveClassId())
                                html.append(HtmlUtils.htmlClassName(activeChar.getActiveClassId()) + "<br>");
                            else
                                html.append("<a action=\"bypass _bbscareer;sub;5 " + subClassId + "\">"
                                    + HtmlUtils.htmlClassName(activeChar.getActiveClassId()) + "</a><br>");
                        }
                    }
                    break;

А вот, к примеру, другой подход:
Код:
<tr>
    <td>
        {{ stringHolder.getNotNull(player, "community.career.subclass.control.can.switch.desc") }}
    </td>
</tr>
<tr>
    <td height="15"></td>
</tr>
<tr>
    <td>
        <center>
            <table>
                <tr>
                    {% for subclass in sortedSubclasses %}
                    {% if player.getActiveClassId != subclass.getClassId %}
                    {% set subcId = ["class.name.", subclass.getClassId]|join %}
                    <td>
                        <center>
                            <button value="{{ stringHolder.getNotNull(player, subcId) }}"
                                    action="bypass _bbscareer:subclass:switchto:{{ subclass.getClassId }}"
                                    width=150
                                    height=25
                                    back="L2UI_CT1.Button_DF_Down"
                                    fore="L2UI_CT1.Button_DF">
                        </center>
                    </td>
                    {% endif %}
                    {% endfor %}
                </tr>
            </table>
        </center>
    </td>
</tr>

Есть разница кода в плане читабельности и рефакторинг-пригодности? Вот ровно то же самое можно сказать про многие моменты. Почему вы так сразу отрицательно отзываетесь о более высокоуровневых решениях? Конечно, смотря что понимать под Enterprise.

По моему сугубо личному мнению, заниматься Enterpise - это не только пользовать какие-то стеки технологий и фреймворки. Это и тип мышления. А нахардкодить if-else блоков на 100500 случаев может каждый. Да и вообще я бы не делил Enterprise / не Enterpise, не совсем это верно. Можно вообще все на plain java сделать, вопрос только сколько вы времени потратите и сколько выграете в оверхеде? А главное, как вы потом это будете сопровождать? Очень любопытно посмотреть как сделать без фреймов SOA/WS/WS-Security, например, да еще и накрыть СКЗИ сверху. С учетом сегодняшнего развития аппаратной части этот вопрос очень спорен. Мы же не под микроконтроллеры и какие-то кастомные платформы пишем код, где каждый байт на счету.
Ответ
#54
ProDev Написал:Это утверждение спорно. Например, WS - это легаси? SOA будем пилить на уровне io/nio и разбора XML на уровне "if node.equals("requestBody")"?

Вот уж где правда куча легаси и хардкода, так это, например, здесь:

Код:
                case 2: // Установка уже взятого саба (см case 5)
                    html.append("<br>Переключить саб-класс:<br>");

                    final int baseClassId = activeChar.getBaseClassId();

                    if(playerClassList.size() < 2)
                        html.append("У вас нет саб-классов для переключения, но вы можете добавить его прямо сейчас<br><a action=\"bypass _bbscareer;sub;1\">Добавить саб.</a>");
                    else
                    {
                        html.append("Какой саб-класс вы желаете использовать?<br>");

                        if(baseClassId == activeChar.getActiveClassId())
                            html.append(HtmlUtils.htmlClassName(activeChar.getActiveClassId())
                                + " <font color=\"LEVEL\">(Базовый)</font><br><br>");
                        else
                            html.append("<a action=\"bypass _bbscareer;sub;5 " + baseClassId + "\">"
                                + HtmlUtils.htmlClassName(activeChar.getActiveClassId()) + "</a> "
                                + "<font color=\"LEVEL\">(Базовый)</font><br><br>");

                        for(SubClass subClass : playerClassList.values())
                        {
                            if(subClass.isBase())
                                continue;
                            int subClassId = subClass.getClassId();

                            if(subClassId == activeChar.getActiveClassId())
                                html.append(HtmlUtils.htmlClassName(activeChar.getActiveClassId()) + "<br>");
                            else
                                html.append("<a action=\"bypass _bbscareer;sub;5 " + subClassId + "\">"
                                    + HtmlUtils.htmlClassName(activeChar.getActiveClassId()) + "</a><br>");
                        }
                    }
                    break;

А вот, к примеру, другой подход:
Код:
<tr>
    <td>
        {{ stringHolder.getNotNull(player, "community.career.subclass.control.can.switch.desc") }}
    </td>
</tr>
<tr>
    <td height="15"></td>
</tr>
<tr>
    <td>
        <center>
            <table>
                <tr>
                    {% for subclass in sortedSubclasses %}
                    {% if player.getActiveClassId != subclass.getClassId %}
                    {% set subcId = ["class.name.", subclass.getClassId]|join %}
                    <td>
                        <center>
                            <button value="{{ stringHolder.getNotNull(player, subcId) }}"
                                    action="bypass _bbscareer:subclass:switchto:{{ subclass.getClassId }}"
                                    width=150
                                    height=25
                                    back="L2UI_CT1.Button_DF_Down"
                                    fore="L2UI_CT1.Button_DF">
                        </center>
                    </td>
                    {% endif %}
                    {% endfor %}
                </tr>
            </table>
        </center>
    </td>
</tr>

Есть разница кода в плане читабельности и рефакторинг-пригодности? Вот ровно то же самое можно сказать про многие моменты. Почему вы так сразу отрицательно отзываетесь о более высокоуровневых решениях? Конечно, смотря что понимать под Enterprise.

По моему сугубо личному мнению, заниматься Enterpise - это не только пользовать какие-то стеки технологий и фреймворки. Это и тип мышления. А нахардкодить if-else блоков на 100500 случаев может каждый. Да и вообще я бы не делил Enterprise / не Enterpise, не совсем это верно. Можно вообще все на plain java сделать, вопрос только сколько вы времени потратите и сколько выграете в оверхеде? А главное, как вы потом это будете сопровождать? Очень любопытно посмотреть как сделать без фреймов SOA/WS/WS-Security, например, да еще и накрыть СКЗИ сверху. С учетом сегодняшнего развития аппаратной части этот вопрос очень спорен. Мы же не под микроконтроллеры и какие-то кастомные платформы пишем код, где каждый байт на счету.

Да я ничего не утверждаю, мне самому нравится использовать фреймворки вместо велосипедов, просто меня немного разозлило, что человек ворвался в трид с криками, что hikaricp - медленное говно, без каких-либо пруфов, когда в это же время любой человек может запустить бенчмарки, которые валяются в гитхабе и убедится, что действительно быстрее других коннект пулов.

Использовать шаблонизатор для запила хтмлок кстати тоже такое не очень дело я считаю, так как каждому новому разрабу надо будет учиться синтаксису этого шаблонизатора. Обычный хтмль с реплейсом нормально заезжают, учитывая, что при переходе на новые хроники можно будет тупо взять хтмлки с птски и всё будет работать. Но это конечно касается только л2 серверов.
Ответ
#55
GabberBaby Написал:Да я ничего не утверждаю, мне самому нравится использовать фреймворки вместо велосипедов, просто меня немного разозлило, что человек ворвался в трид с криками, что hikaricp - медленное говно, без каких-либо пруфов, когда в это же время любой человек может запустить бенчмарки, которые валяются в гитхабе и убедится, что действительно быстрее других коннект пулов.

Использовать шаблонизатор для запила хтмлок кстати тоже такое не очень дело я считаю, так как каждому новому разрабу надо будет учиться синтаксису этого шаблонизатора. Обычный хтмль с реплейсом нормально заезжают, учитывая, что при переходе на новые хроники можно будет тупо взять хтмлки с птски и всё будет работать. Но это конечно касается только л2 серверов.

Тут прокомментировать не могу - HikariCP даже опробовать не успел. Из темы так и не понял, уловил ли кто на боевом решении разницу по производительности (уловил в смысле не "на глазок", а объективно по различным метрикам).

Да, выше две крайности. Replace вполне хорошо подходит, но только не тот ад, что выше в примере. Мало того, что это тяжело рефакторится и сопровождается, это еще и не локализовано по-нормальному. То есть сейчас взять и перевести так просто не получится, да и делегировать эту задачу кому-то из датапакеров тоже так просто не выйдет. В общем, неважно что используется для решения задачи, главное, чтобы оно было эстетично и красиво Wink
Ответ
#56
ProDev Написал:Тут прокомментировать не могу - HikariCP даже опробовать не успел. Из темы так и не понял, уловил ли кто на боевом решении разницу по производительности (уловил в смысле не "на глазок", а объективно по различным метрикам).

Я когда профилировал заметил, что время жизни коннектов к бд стало меньше (в yourkit профайлере есть такая статистика) в среднем в 10 раз. До этого был bonecp.

ProDev Написал:В общем, неважно что используется для решения задачи, главное, чтобы оно было эстетично и красиво Wink

Кэп. Smile
Ответ
#57
GabberBaby Написал:Я когда профилировал заметил, что время жизни коннектов к бд стало меньше (в yourkit профайлере есть такая статистика) в среднем в 10 раз. До этого был bonecp.



Кэп. Smile


Уже показатель. А BoneCP, в свою очередь, по бенчам быстрее уже устоявшегося commons-dbcp. Вопрос только в стабильности на продакшене, кто-то уже имел опыт внедрения?

Спасибо, кэп Wink
Ответ
#58
ProDev Написал:Есть разница кода в плане читабельности и рефакторинг-пригодности? Вот ровно то же самое можно сказать про многие моменты. Почему вы так сразу отрицательно отзываетесь о более высокоуровневых решениях? Конечно, смотря что понимать под Enterprise.

По моему сугубо личному мнению, заниматься Enterpise - это не только пользовать какие-то стеки технологий и фреймворки. Это и тип мышления. А нахардкодить if-else блоков на 100500 случаев может каждый. Да и вообще я бы не делил Enterprise / не Enterpise, не совсем это верно. Можно вообще все на plain java сделать, вопрос только сколько вы времени потратите и сколько выграете в оверхеде? А главное, как вы потом это будете сопровождать? Очень любопытно посмотреть как сделать без фреймов SOA/WS/WS-Security, например, да еще и накрыть СКЗИ сверху. С учетом сегодняшнего развития аппаратной части этот вопрос очень спорен. Мы же не под микроконтроллеры и какие-то кастомные платформы пишем код, где каждый байт на счету.

Шаблонизатор в диалогах это хорошая вещь. Могу сказать Вы не первый кто додумался юзать шаблонизатор в диалогах.

Могу сказать ещё, в далеком прошлом, я переписал весь код Овера, который отвечает за Append в диалогах.

И не нужно было хардкодить. И не только это)
consulo.io - Consulo - multi-language IDE
Ответ
#59
Шаблонизаторы в HTML Николай уже давно юзал у себя, даже вот валяется на винте пруф-стаб:
http://rghost.ru/53747736

Другое дело, что они нафиг не нужны, если делается упор на оф-лайк и юзается эмуляция родных интепретаторов байпасов оф-сервера. Админка (единственный повод иметь кастом хтмл-ки в клиенте) по моему скромному мнению вообще должна находиться вне клиента в виде отдельной тулзы от греха подальше.
Ответ
#60
VISTALL Написал:Шаблонизатор в диалогах это хорошая вещь. Могу сказать Вы не первый кто додумался юзать шаблонизатор в диалогах.

Могу сказать ещё, в далеком прошлом, я переписал весь код Овера, который отвечает за Append в диалогах.

И не нужно было хардкодить. И не только это)

Я вовсе не к тому, что это какое-то новшество, скорее, к вопросу использования различных тулкитов. Можно и на plain java сделать красиво, но в гибкости все равно будет просадка.

ANZO Написал:Шаблонизаторы в HTML Николай уже давно юзал у себя, даже вот валяется на винте пруф-стаб:
http://rghost.ru/53747736

Другое дело, что они нафиг не нужны, если делается упор на оф-лайк и юзается эмуляция родных интепретаторов байпасов оф-сервера. Админка (единственный повод иметь кастом хтмл-ки в клиенте) по моему скромному мнению вообще должна находиться вне клиента в виде отдельной тулзы от греха подальше.

Спору нет, это вопрос исключительно удобства. Какие-то вещи, согласитесь, удобнее сделать на шаблонах, коммьюнити - яркий тому пример. Чистый html тоже хорошо, но вот только не так, как это в примере выше - это же невозможно разобрать, что и как, слишком запутано.

Спасибо вам за комментарии, интересно пообщаться Wink
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  java.lang.ClassNotFoundException: com.mysql.jdbc.Driver goodoker 5 2,949 04-19-2013, 04:09 PM
Последний пост: goodoker

Перейти к форуму:


Пользователи, просматривающие эту тему: 13 Гость(ей)