|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
в этом и смысл что двойная запись не имеет смысла при использовании вычислительной техники. для чего была придумана двойная запись потрудитесь поискать в гугле. впрочем конструктивной дискусии судя а по всему опять не получится - разве что появится кто то кроме школоты начитавшейся вумных книжек. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 22:22 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
по мнению "не школоты" каким образом вычислительная техника влияет на использование или не использование двойной записи? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 22:34 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
caballeroА если перестать кидать умняки и вернутся к собственно теме - лично я согласен с мнением что в компьютерную эпоху двойная запись, баланс (не говоря уже про кореспонденцию счетов и остальное что от лукавого) не имеют никакого смысла потому как компьютер не ошибается . И все счета можно спокойно вести как ведутся забалансовые счета. ооооооооо слова не мальчика, но мужа сразу видно человека с огромным жизненным опытом, не то что всякая школота... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 22:47 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
Гхостик Система с изменяющимися алгоритмами расчета. +1 читаю уже ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2013, 00:00 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
caballeroв этом и смысл что двойная запись не имеет смысла при использовании вычислительной техники. для чего была придумана двойная запись потрудитесь поискать в гугле. Двойная запись существует в первую очередь не для самоконтроля бухгалтеров, а для отражения движения средств в двух аналитиках, по целевому использованию и по источникам их формирования. А возможность контролировать правильность учета с помощью двойной записи - это полезное свойство двойной записи, а не цель ее использования. А по поводу "компьютер не ошибается" могу сказать, что в таком случае и бухгалтерский учет компьютер вести не умеет. Учет ведут до сих пор живые люди, которые используют для этой работы компьютеры и программы. А ошибаются эти белковые существа еще как... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2013, 01:26 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
logoutЕщё раз повторю, что запрос получился огромным, сложно воспринимаемым. Но он принципиально показал, что задачу решить можно. И запрос был на удивление быстрым, даже без специальной оптимизации. Можно и игрушечной лопаткой яму выкопать, будь желание на то... Но такое "ухищрение" мало подходит для реальной жизни. Например, время от времени меняется законодательство, касающееся оплаты труда и иже с ней, плюс руководство организации может принимать и изменять локальные нормативные акты, касающиеся оплаты труда. Вот тут-то и вылезет боком ваш "огромный, сложно воспринимаемый, трудно поддающийся изменению" запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2013, 09:52 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
Во-во. Как-бы сделать поматематичнее и поконцептуальнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2013, 15:32 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
Давненько тут не был. А какая занимательная дискуссия развилась! ДжекНепотрошительЯ начал рассказывать вам о том, что реализовывать сложную бизнес-логику на ХП менее эффективно, чем на языках высокого уровня Perl, Python, Java, Ruby, R - достаточно высокоуровневые языки для этой задачи? На них можно писать ХП. Пруф: http://www.postgresql.org/docs/9.2/static/external-pl.html Именно эта информация меня и сподвигла к решению применять такую архитектуру. МСУМасштабируемость никакая и безопасность ни в красную армию. http://ru.wikipedia.org/wiki/Трёхуровневая_архитектура Я бы не был столь категоричен. Да, некоторые сложности с масштабируемостью есть, но они решаемы. Вплоть до того, что можно физически разделить ХП и данные, например используя это: http://www.postgresql.org/docs/9.2/static/dblink.html Но тут появляется невиданная для классических "трёхзвенок" гибкость. Мы можем делить нагрузку на сервера не только по линии данные-математика, но и группируя данные с математикой. Например, редко используемые данные вместе с процедурами их обработки - на один инстанс, а динамично изменяющиеся данные, опять же, вместе с нужными ХП - на другой. И таки да, конечно, можем организовать несколько воркеров на разных инстансах. Далее. Насчёт безопасности на уровне СУБД всё на весьма качественном уровне. Используем GRANT и VIEW. У большинства "трёхзвенок", где все запросы к БД выполняются от имени привелигированного (в СУБД) пользователя, дела с безопасностью хуже. Например, велик риск SQL Injections. Александр ПузаковlogoutЕщё раз повторю, что запрос получился огромным, сложно воспринимаемым. Но он принципиально показал, что задачу решить можно. И запрос был на удивление быстрым, даже без специальной оптимизации. Можно и игрушечной лопаткой яму выкопать, будь желание на то... Но такое "ухищрение" мало подходит для реальной жизни. Например, время от времени меняется законодательство, касающееся оплаты труда и иже с ней, плюс руководство организации может принимать и изменять локальные нормативные акты, касающиеся оплаты труда. Вот тут-то и вылезет боком ваш "огромный, сложно воспринимаемый, трудно поддающийся изменению" запрос. Абсолютно согласен с оратором. Похоже, мне не удалось донести мысль, что в продакшн это решение никто не собирался запускать именно по указанной выше причине. Речь шла только о том, чтобы на тесте проверить пригодность SQL к решению задачи начисления ЗП. В реальной жизни запросы можно разложить на отдельные, более понятные, представления. Повторюсь, что в результате я также пришёл к выводу, что расчёт необходимо делать последовательным на процедурном языке с записью результатов этапов вычисений. В таком случае и запросы SQL каждого этапа будут на порядки проще для понимания. Но весь расчёт делать на процедурном языке - непозволительное рсточительство. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 15:04 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
logoutДжекНепотрошительЯ начал рассказывать вам о том, что реализовывать сложную бизнес-логику на ХП менее эффективно, чем на языках высокого уровня Perl, Python, Java, Ruby, R - достаточно высокоуровневые языки для этой задачи? На них можно писать ХП. Пруф: http://www.postgresql.org/docs/9.2/static/external-pl.html Именно эта информация меня и сподвигла к решению применять такую архитектуру. Имелось в виду, естественно, не противопоставление SQL vs Java, тем более что встроенные языки различных СУБД могут быть достаточно выразительны. Имелось в виду неудобство такой архитектуры для сопровождения. На чем бы не писались ХП, они все равно имеют достаточно узкий интерфейс для взаимодействия, т.е. по сути мы возвращаемся в старое доброе процедурное программирование. Пока система простая, это может быть эффективным. Но как только система разрастается, сопровождать ее становится очень неудобно. Попробуйте хоть параметр в какую-то ХП добавить. Вам тут же понадобится пересборка всех модулей, которые ее вызывают. Сложнее становится и отладка, вам нужно будет отлаживать две системы, и сервер приложений, и ХП, с помощью разных инструментов. logoutДалее. Насчёт безопасности на уровне СУБД всё на весьма качественном уровне. Используем GRANT и VIEW. У большинства "трёхзвенок", где все запросы к БД выполняются от имени привелигированного (в СУБД) пользователя, дела с безопасностью хуже. Например, велик риск SQL Injections. Использование привелигерованного пользователя для подключения аппсервера к СУБД - это не требование архитектуры, а способ избавить СУБД от необходимости держать множество подключений. А риск SQL Injections в такой архитектуре ничуть не выше, чем риск забыть в ХП наложить ограничение прав доступа на пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 21:30 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительПопробуйте хоть параметр в какую-то ХП добавить. Вам тут же понадобится пересборка всех модулей, которые ее вызывают. Сложнее становится и отладка, вам нужно будет отлаживать две системы, и сервер приложений, и ХП, с помощью разных инструментов. не все же системы построены таким образом, что добавление параметра в ХП требует какой-то пересборки. Если вы говорите о чем-то, что требует таких действий, то естественно. Но нужно сделать сноску о том, что речь идет о какой-то конкретной программе. Иначе будет непонятно тем, у кого добавление параметра в ХП никаких пересборок и чего-то подобного не требует. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 22:58 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительИспользование привелигерованного пользователя для подключения аппсервера к СУБД - это не требование архитектуры, а способ избавить СУБД от необходимости держать множество подключений. А риск SQL Injections в такой архитектуре ничуть не выше, чем риск забыть в ХП наложить ограничение прав доступа на пользователей. можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 22:58 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
iscrafmне все же системы построены таким образом, что добавление параметра в ХП требует какой-то пересборки. Если вы говорите о чем-то, что требует таких действий, то естественно. Но нужно сделать сноску о том, что речь идет о какой-то конкретной программе. Иначе будет непонятно тем, у кого добавление параметра в ХП никаких пересборок и чего-то подобного не требует. Нет, конечно же можно сделать какой-то сложный интерфейс, например, обмен данными между ХП через XML-пакеты. Но тогда нужно включать здравый смысл и задавать себе вопрос: а зачем тогда вообще нужны ХП? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 23:34 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
iscrafmДжекНепотрошительИспользование привелигерованного пользователя для подключения аппсервера к СУБД - это не требование архитектуры, а способ избавить СУБД от необходимости держать множество подключений. А риск SQL Injections в такой архитектуре ничуть не выше, чем риск забыть в ХП наложить ограничение прав доступа на пользователей. можно пример? Пример чего? СУБД, производительность которой будет выше, если аутентификацию/авторизацию полностью убрать на среднее звено, а вместо пользовательских сессий держать только пул соединений технологической учетки? Да любую возьмите. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 23:37 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительiscrafmне все же системы построены таким образом, что добавление параметра в ХП требует какой-то пересборки. Если вы говорите о чем-то, что требует таких действий, то естественно. Но нужно сделать сноску о том, что речь идет о какой-то конкретной программе. Иначе будет непонятно тем, у кого добавление параметра в ХП никаких пересборок и чего-то подобного не требует. Нет, конечно же можно сделать какой-то сложный интерфейс, например, обмен данными между ХП через XML-пакеты. Но тогда нужно включать здравый смысл и задавать себе вопрос: а зачем тогда вообще нужны ХП? ХП нужны для того, что получить параметры, выполнить определенную работу и вернуть требуемый от нее результат. Точно также как и в любой процедуре на другом языке программирования. Но необходимости пересборки чего-то внешнего, кроме пересборки самой ХП (в зависимости от используемой СУБД это выглядит конечно по разному) нет. Может я конечно не понял что вы понимаете под "пересборкой" чего-то ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 00:59 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительiscrafmпропущено... можно пример? Пример чего? СУБД, производительность которой будет выше, если аутентификацию/авторизацию полностью убрать на среднее звено, а вместо пользовательских сессий держать только пул соединений технологической учетки? Да любую возьмите. я невнимательно прочитал, вопрос отпал ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 01:01 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
iscrafmТочно также как и в любой процедуре на другом языке программирования. Но необходимости пересборки чего-то внешнего, кроме пересборки самой ХП (в зависимости от используемой СУБД это выглядит конечно по разному) нет. Вы хотите сказать, что если вы добавите в ХП еще один параметр, то в общем случае другие ХП, которые ее вызывают, будут нормально работать? И соответствующий модуль среднего звена, которое ее вызывает, тоже будет работать? Не будут. Соглашения о вызовах в случае ХП достаточно жесткие. А в случае использования ЯВУ вы можете использовать, например, наследование для обхода данной проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 01:46 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительА в случае использования ЯВУ вы можете использовать, например, наследование для обхода данной проблемы.Каким образом? Передачей дополнительных параметров через свойства объекта? Так и в БД можно сделать тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 06:35 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительiscrafmТочно также как и в любой процедуре на другом языке программирования. Но необходимости пересборки чего-то внешнего, кроме пересборки самой ХП (в зависимости от используемой СУБД это выглядит конечно по разному) нет. Вы хотите сказать, что если вы добавите в ХП еще один параметр, то в общем случае другие ХП, которые ее вызывают, будут нормально работать? И соответствующий модуль среднего звена, которое ее вызывает, тоже будет работать? Не будут. Соглашения о вызовах в случае ХП достаточно жесткие. А в случае использования ЯВУ вы можете использовать, например, наследование для обхода данной проблемы. я хочу сказать что вы оперируете так называемым "притянутым за уши" примером. Я, к примеру, никогда не делаю какие-то невероятные грозди процедур, о которых вы говорите. Процедуры если реализуются, то для обработки данных. Но это уже больше вопросы проектирования приложения и системной архитектуры, нечто подобное обсуждалось здесь в контексте о том, где и как бизнес-логика реализуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 09:29 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
logoutЯ бы не был столь категоричен. Да, некоторые сложности с масштабируемостью есть, но они решаемы. Вплоть до того, что можно физически разделить ХП и данные, например используя это: http://www.postgresql.org/docs/9.2/static/dblink.html Но тут появляется невиданная для классических "трёхзвенок" гибкость. Мы можем делить нагрузку на сервера не только по линии данные-математика, но и группируя данные с математикой. Например, редко используемые данные вместе с процедурами их обработки - на один инстанс, а динамично изменяющиеся данные, опять же, вместе с нужными ХП - на другой. И таки да, конечно, можем организовать несколько воркеров на разных инстансах. Опять же, это не масштабируемость - это постгресовские фишечки, которые может не быть у других СУБД. Гибкость трехзвенок в том, что они не зависят ни от вида СУБД, ни от их количества. В качестве источника данных может быть что угодно, начиная от текстового файла, кончая такими же SOA сервисами, в т.ч. внешними, доступ к которым реализован честно в dmz. Зачем забивать прикладную задачу к конкретному типу СУБД, если можно абстрагироваться от неё? logoutДалее. Насчёт безопасности на уровне СУБД всё на весьма качественном уровне. Используем GRANT и VIEW. Уже 100 раз обсуждали. Никто не запрещает стартануть транзакцию и не закрыв её, уйти курить. Да и шарить БД для всего предприятия всем пользователям - самая ужасная практика, которая может только быть. Особенно, если в базах хранятся действительно важные данные. logoutУ большинства "трёхзвенок", где все запросы к БД выполняются от имени привелигированного (в СУБД) пользователя, дела с безопасностью хуже. Например, велик риск SQL Injections. Какие такие SQL Injections могут быть в сервисно-ориентированной архитектуре? Вот утрированно классический пакет методов веб сервиса: Код: c# 1. 2. 3. 4.
Каким образом тут возможна сиквел инъекция? Ты, надеюсь, понимаешь, что идиотов нет, которые будут публиковать в SOA подобные методы: Код: c# 1.
:) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 09:31 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ГхостикДжекНепотрошительА в случае использования ЯВУ вы можете использовать, например, наследование для обхода данной проблемы.Каким образом? Передачей дополнительных параметров через свойства объекта? Так и в БД можно сделать тоже. Введя дополнительный параметр в унаследованном интерфейсе. При этом вызывающие модули будут продолжать использовать предыдущую версию интерфейса, и продолжат работать как и ранее. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:37 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
ДжекНепотрошительВведя дополнительный параметр в унаследованном интерфейсе. При этом вызывающие модули будут продолжать использовать предыдущую версию интерфейса, и продолжат работать как и ранее.Что есть параметр интерфейса? Может быть, в методе? Тогда такое же будет работать и в Oracle, и в Firebird, достаточно задать новому параметру значение по умолчанию. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 10:57 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
Благодарю всех за конструктивный диалог. ДжекНепотрошительНа чем бы не писались ХП, они все равно имеют достаточно узкий интерфейс для взаимодействия, т.е. по сути мы возвращаемся в старое доброе процедурное программирование. Пока система простая, это может быть эффективным. Но как только система разрастается, сопровождать ее становится очень неудобно. Старое доброе процедурное программирование совсем не так плохо, как вам кажется. В своей практике повидал достаточно мощные системы, целиком созданные, долгое время работающие и активно развивающиеся именно на процедурных языках. Кстати, видел и обратные примеры с ООП. Так что ваш аргумент скорее отношу к грамотности разработчиков. Хотя, в целом по больнице, соглашусь, что на ООП код получается обычно более понятным и расширяемым. ДжекНепотрошительСложнее становится и отладка, вам нужно будет отлаживать две системы, и сервер приложений, и ХП, с помощью разных инструментов. Отладка кода на SQL, конечно, несколько сложнее. Тут принцип другой, не пошаговый. Но, прошу пояснить, вашу мысль. Если я использую в качестве сервера приложений именно ХП, то о каких разных инструментах идёт речь? ДжекНепотрошительА риск SQL Injections в такой архитектуре ничуть не выше, чем риск забыть в ХП наложить ограничение прав доступа на пользователей. Не скажите. У меня иной опыт. Когда пишешь кучу запросов сервера приложений, каждый раз нужно проверять права доступа. Легко что-то упустить. В нормальных СУБД, на мой взгляд, всё значительно логичнее. Прав у пользователя изначально нет никаких. Выдаёшь права только на нужные объекты на самом нижнем уровне. ХП более высокого уровня уже будут учитывать эти ограничения. Не забудешь. ДжекНепотрошительНет, конечно же можно сделать какой-то сложный интерфейс, например, обмен данными между ХП через XML-пакеты. Но тогда нужно включать здравый смысл и задавать себе вопрос: а зачем тогда вообще нужны ХП? Конечно, обмен данными между ХП не должен быть таким сложным. На практике хватает стандартных параметров ХП. И с добавлением параметров проблем обычно не наблюдается. В PostgreSQL, например, реализован даже полиморфизм ХП. МСУЗачем забивать прикладную задачу к конкретному типу СУБД, если можно абстрагироваться от неё? Можно. Любое решение - вопрос призов и цен. Вот, как раз с вашей помощью и пытаюсь понять, насколько существенны призы и цены альтернативного решения. МСУУже 100 раз обсуждали. Никто не запрещает стартануть транзакцию и не закрыв её, уйти курить. Да и шарить БД для всего предприятия всем пользователям - самая ужасная практика, которая может только быть. Видно, все эти 100 раз я отутствовал. Будьте любезны, резюмируйте опасность незакрытых транзакций и расшаривания БД? Или ссылочки на эти обсуждения. МСУКаким образом тут возможна сиквел инъекция? Ты, надеюсь, понимаешь, что идиотов нет, которые будут публиковать в SOA подобные методы: Код: c# 1.
:) Конечно, понимаю. Опять же, увы, я не редко встречал подобные методы. Опять вопрос сводится к профессонализму разработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2013, 19:47 |
|
Бухгалтерия нового тысячелетия.
|
|||
---|---|---|---|
#18+
logoutМожно. Любое решение - вопрос призов и цен. Вот, как раз с вашей помощью и пытаюсь понять, насколько существенны призы и цены альтернативного решения. В том-то и дело, 3-tier это не альтернативное решение, а единственно верное. Альтернатива может быть выражена в 2-tier со всем спектром ограничений и кривости архитектуры. Во-вторых, готовить 3-tier с помощью современных технологий настолько просто, насколько это можно себе представить. И незначительный вклад изначально при проектировании системы позже выльется в массу позитива. logoutМСУУже 100 раз обсуждали. Никто не запрещает стартануть транзакцию и не закрыв её, уйти курить. Да и шарить БД для всего предприятия всем пользователям - самая ужасная практика, которая может только быть. Видно, все эти 100 раз я отутствовал. Будьте любезны, резюмируйте опасность незакрытых транзакций и расшаривания БД? Или ссылочки на эти обсуждения. Можно начать от сюда: 14549572 А вообще странно задавать вопросы об опасности незакрытых транзакций... Не смущает возможность блокировки ресурса, который требуется остальным пользователям системы? Расшаривание БД - еще один большой минус в безопасности, ведь без труда тем же windbg я могу получить строку соединения к БД и начать беспристрастно ковыряться с БД в обход приложения. И ни дай бог каким-то образом я получу более привилегированные учетные данные (сяду за компьютер своего начальника, к примеру), я получу более полный доступ к хранилищу, в обход программы. В случае с сервером приложений такие случаи исключены - так как взаимодействие происходит исключительно через программу, никаких обходных маневров и никаких подключений к БД напрямую. Только через SOA. Можно долго дискутировать на тему прав и полномочий, но я думаю любой согласится, открывать доступ к наиважнейшим данных для всего предприятия - плохая практика, которая ничего, кроме головной боли не сулит. БД - это черная коробка для всех, никто о ней не должен знать. За SOA может быть спрятано всё, что угодно. И в любой момент времени при смене источника и прочих интеграциях я просто меняю логику своего сервиса на сервере приложений, и все клиенты продолжают работать в штатном режиме. Логика может быть любая, например взаимодействие с внешними сторонними СУБД, сервисами и прочими прослойками. Писать это на хранимых процедурах сродни самоубийству. Да и сравнивать возможности полноценных языков ООП и SQL как-то даже язык не поворачивается. logoutКонечно, понимаю. Опять же, увы, я не редко встречал подобные методы. Опять вопрос сводится к профессонализму разработчиков. Поэтому в очередной раз авторитетно заявляю, что сиквел инъекции в SOA исключены как класс. Особенно, если за кулисами SOA взаимодействие с БД происходит через ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2013, 11:00 |
|
|
start [/forum/topic.php?fid=33&msg=38362294&tid=1547674]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 39ms |
total: | 195ms |
0 / 0 |