|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
_модEAV - это способ создания систем для конечного пользователяНе согласен. Во-первых, Конечному пользователю динамические атрибуты в подавляющем большинстве случаев не нужны. Они могут быть нужны технологу. А во-вторых, даже для поддержки динамических атрибутов есть лучшие способы создания систем. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2008, 19:27 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
SeVaЕще раз перечитал начальный пост(раньше по диагонали). Весь требуемый функционал реализован в SQL Server O/R Hybrid Database ... очень хотелось бы посмотреть на эту систему но она недоступна(сайт досутпен - система не скачивается). url not found on server если кто нибудь скачал просьба слейте на мыло. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2008, 08:39 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
если нужно что-то работающее, то нужно просто добавлять в таблицу объекта столько атрибутов, сколько требуется. Если для экспериментов, то можно и EAV и т.п. При наличии свободного времени и шарового финансирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2008, 09:39 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
SeVaТакие "уродцы" неплохо иметь для пилотных проектов,во время разработки и для полукоробочных вариантов. При методе - с шашками на танки, постоянно возникает необходимость прикрутить какой-нибудь атрибут, а это тормозит процесс.Поэтому приходится тоже ковырять подобный вариант. 2 Petro, в результате будут строго типизированные объекты, что такое EAV,что нужно для нормальной работы компонентов форм, я имею представление -1 "во время разработк" не надо бегать "с шашками на танки". Есть отработанные технологии, когда без всякого EAV время добавления нового атрибута составляет 30 мин. в БД и 1 час на клиенте. Нужно хорошо подумать, чтобы вместо отработанной методологии написать свой слой в БД, свой слой в поставщике данных и свой слой в представлении данных. Причём квалификация программиста должна быть выше среднего, т.к. он просто будет брать ВСЕ данные на клиента и перебирать их в цикле, чтобы найти нужный атрибут и вычислить среднее. Готовые решения можно взять, но писать своё? Безумству храбрых поём мы песню (с) SeVa 2 Petro, в результате будут строго типизированные объекты, что такое EAV,что нужно для нормальной работы компонентов форм, я имею представление вы о чём? Мы это и обсуждаем. ЗЫ. Почти похожая ситуация наблюдается с деревьями в РСУБД. Понятно, что БД деревья хранить не умеет, но: - методология хранения в БД - есть: - все запросы для манипулирования структурой дерева - есть и отработаны - поддержка на уровне БД (добавляется в последнее время и старших версиях) - клиенские библиотеки для отображения и редактирования деревьев - есть и отработаны. В том числе по скорости (виртуальное дерево, где листья грузятся по мере просмотра) Для EAV есть только первый пункт, со всем остальным разработчик тра...ется самостоятельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2008, 10:48 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
2 Petro123: Petro123... авторТак-же есть набор аттрибутов, так-же заранее не определенный, (адрес, время работы, телефон, наименование, и т.д.) возьмём адрес. Вы спрашивате про подводные камни? Опишите часть требований к ПОДсистеме для работы с атрибутом адрес.. ...Ваш прототип IMHO должен будет ответить на все эти вопросы. Все это замечательно, за исключением того, что аттрибуты объектов - динамичны. Или, вы предполагатете заняться data mining'ом и создавать концепт на каждый полученный аттрибут??? Думаю, это не реально в условиях динамичного добавления и изменения объектов и аттрибутов, конечными пользователями (читай - _разными_ специалистами (в различных областях знаний и бизнеса, компания - холдинг), которым необходимы _разнородные_ объекты и аттрибуты. Соотвественно, аттрибут "адрес" - имеет _различное_ понимание у того или иного специалиста.. 2 provid: Код: plaintext 1.
В очередной раз убеждаюсь, что вы не умеете читать.. ( Далее.. Может кто-то подскажет по проблемам и хинтам текущей модели, на которой я остановился? Код: plaintext 1. 2. 3.
Может кто работал с данной моделью? А то общение сместилось немного.. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2008, 17:32 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
авторСоотвественно, аттрибут "адрес" - имеет _различное_ понимание у того или иного специалиста.. - т.е. даже так? Классификатора атрибутов не будет? Один введёт атрибут "Адрес", другой "Адресс", третий "адрес". А в таблице значений не код атрибута, а его строковое имя (понимаемое каждым по разному). - правильности ввода значения для какого либо атрибута не будет? и т.д. Тогда лучше сканы в jpeg из записной книжки стенографистки хранить. ... Никаких требований нет, окромя "можно добавить в подсистему". Внятные запросы к такому справочнику сервисов тоже под вопросом. авторИли, вы предполагатете заняться data mining'ом я предлагаю озвучить требования, цель и концепцию ИС, а не заниматься гаданием на кофейной гуще. Часто оказывается, что решение лежит совсем в другом месте. Пока вы озвучили одно требование - динамическое добавление пользователем атрибутов объектов. А сервис - это объект, т.к. это ВАМ удобнее. 2. По поводу модели, на которой Вы остановились - ничего не понятно. "ООП на клиенте плохо скрещивается с РСУБД" ЗЫ. Если Вы ораклист, можно ещё попытаться в БД объектами и наследованием баловаться. Если времени вагон. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2008, 22:29 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
lightspeed2 provid: Код: plaintext 1.
В очередной раз убеждаюсь, что вы не умеете читать.. ( я еще и писАть умею. Впрочем никто никого ни в чем не ограничивает. У вас право выбора. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2008, 23:02 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
Petro123 авторСоотвественно, аттрибут "адрес" - имеет _различное_ понимание у того или иного специалиста.. - т.е. даже так? Классификатора атрибутов не будет? Один введёт атрибут "Адрес", другой "Адресс", третий "адрес". А в таблице значений не код атрибута, а его строковое имя (понимаемое каждым по разному). - правильности ввода значения для какого либо атрибута не будет? ... Не так. Я говорил про различные типы значений аттрибута Адрес. Который есть един и неделим. ) Например, один специалист должен хранить формат Адрес, скажем в текстовой строке, без выделения, скажем улицы, дома, корпуса, офиса, и индекса. А другому нужно это выделение.. А у третьего, это вообще выбор из справочника адресов.. Или еще, вот есть аттрибут "Дата начала": один хранит его в формате time_t, а другому нужно "23-AUG-2008 23:53:53".. Все это конечно можно привести к time_t и потом приводить к необходимому виду. Просто, я хочу сказать что из этого всего следует, что форматы значений аттрибутов - разные. Как и кол-во аттрибутов и их набор на объект, как и кол-во объектов. Вот что имелось ввиду. Petro123 авторИли, вы предполагатете заняться data mining'ом я предлагаю озвучить требования, цель и концепцию ИС, а не заниматься гаданием на кофейной гуще. Часто оказывается, что решение лежит совсем в другом месте.. Опять не так. Я уже замечал что описать полную схему ИС я здесь не могу, да и не планирую. Сейчас вопрос о динамическом справочнике, +рационально(время разработки/скорость работы с конечным пользователем)+ хранящем объекты и аттрибуты. Пример аттрибутов я привел выше. Petro123 2. По поводу модели, на которой Вы остановились - ничего не понятно. "ООП на клиенте плохо скрещивается с РСУБД" Что именно не понятно? Вроде понятно, что после созданий объекта, и привязки к нему набора аттрибутов, создается статическая таблица, которая есть этот объект, с полями, которые есть эти аттрибуты. Аттрибуты, есть многомерная таблица (z-ось, есть описание формата данного аттрибута для данного пользователя), из которой выбирается необходимый данному пользователю аттрибут. Далее, после автоматического создания данной таблицы, создаются необходимые PK/FK/indexes/triggers связанные с этой таблицей. Все эти аттрибуты таблицы создаются так-же автоматически. Далее, на сервере приложений мы с помощью обычных sql запросов получаем необходимые данные из этой таблицы. Т.е., например, мы ищем необходимые данные по аттрибуту "Адрес", объекта "Рестораны". Мы сначала ищем, наименование таблицы описывающей объект "Рестораны" в таблице объектов. Далее, мы ищем наименование поля, описывающего аттрибут "Адрес". Далее, по таблице-объекту и полю-аттрибуту ищем адрес, причем, в формате для данного пользователя (табл. аттрибутов - многомерна). Т.е., кому-то адрес - это обычная текстовая строка. Кто-то содержит адрес в виде форматированной текстовой строки (для разбиения ее на улицу, дом, корпус, офис, и т.д. Кто-то, указатель на справочник адресов. Соответственно, в UI, у одного пользователя возникает обычный текстовый input. У другого уже несколько текстовых inputов, а у третьего select со списком адресов. И получают они таблицу, с записями по объекту "Рестораны", с выбранным ранее списком аттриботов (полей таблицы-объекта), и содержащим необходимые данные в аттрибуте "Адрес".. Конечно, из этого следует что таблиц-объектов "Рестораны", будет <= кол-ву пользователей имеющих право создавать объекты и аттрибуты.. Постарайте прочесть текст из этого абзаца выше, не по диагонали. И вы достигните просветления.. ) Petro123 ЗЫ. Если Вы ораклист, можно ещё попытаться в БД объектами и наследованием баловаться. Если времени вагон. Да. Ораклист. Т.ч. уже думаю по объекты и наследование. Впрочем, писать систему не мне. А я лишь пытаюсь разработать наиболее удачную архитектуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2008, 05:41 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
lightspeed Постарайте прочесть текст из этого абзаца выше, не по диагонали. И вы достигните просветления.. ) я бы, на вашем месте, специальным образом на тексте выше внимание не акцентировал. А то и правда у всех наступит просветление и они начнут создавать таблицы объектов по количеству пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2008, 09:26 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
авторНе так. Я говорил про различные типы значений аттрибута Адрес. Который есть един и неделим. ) Например, один специалист должен хранить формат Адрес, скажем в текстовой строке, без выделения, скажем улицы, дома, корпуса, офиса, и индекса. А другому нужно это выделение.. А у третьего, это вообще выбор из справочника адресов.. Или еще, вот есть аттрибут "Дата начала": один хранит его в формате time_t, а другому нужно "23-AUG-2008 23:53:53".. Все это конечно можно привести к time_t и потом приводить к необходимому виду. Просто, я хочу сказать что из этого всего следует, что форматы значений аттрибутов - разные. Как и кол-во аттрибутов и их набор на объект, как и кол-во объектов. Вот что имелось ввиду. раньше нельзя было это сказать? Как вы ТЗ составляете? Или задачи ставите? - "один специалист" в условиях многопользовательской системы - это функциональное рабочее место ФРМ "Спец". Представим ВИ данного ФРМ №1: - вводит новый атрибут "адрес" - проверяет наличие уже данного атрибута у сервиса №12345 а)- у данного сервиса нет атрибута б)- у данного сервиса есть атрибут, но с форматом Строка (нам нужен справочник (дом, квартал, улица, корпус...)) как вы представляете (нужно вашему бизнесу) дальнейшие действия? ААААААААА. (Пишите Вы кучеряво). Вы имелли ввиду не форматы разные, а формат хранения в БД один, а формат ПРЕДСТАВЛЕНИЯ для каждого ФРМ различный? Т.е. для логина Иван Иваныч адрес будет склеенная строка, а для Петра Петровича - код улицы, номер дома и т.д.? Приведите реальный пример реального длинного адреса: - хранящегося в БД - показываемого всем(каждому) пользователю ЗЫ Формат хранения и формат представления - разные вещи. авторЧто именно не понятно? Вроде понятно, что после созданий объекта ==== на клиенте? Понятно. , и привязки к нему набора аттрибутов ======== непонятно. Я хоть и программист, но термин привязка ПОЛЬЗОВАТЕЛЕМ непонятна. НАПИШИТЕ ВИ (вариант использования) , создается статическая таблица === нет такого понятия в оракле и других бд. Будем считать ОБЫЧНАЯ , которая есть этот объект, с полями, которые есть эти аттрибуты. ======= 1.1.1.1 Суть подхода «Класс как таблица (ROT)» Аттрибуты, есть многомерная таблица (z-ось, есть описание формата данного аттрибута для данного пользователя), из которой выбирается необходимый данному пользователю аттрибут. Далее, после автоматического создания данной таблицы, создаются необходимые PK/FK/indexes/triggers связанные с этой таблицей. Все эти аттрибуты таблицы создаются так-же автоматически. Далее, на сервере приложений мы с помощью обычных sql запросов получаем необходимые данные из этой таблицы. Т.е., например, мы ищем необходимые данные по аттрибуту "Адрес", объекта "Рестораны". Мы сначала ищем, наименование таблицы описывающей объект "Рестораны" в таблице объектов. Далее, мы ищем наименование поля, описывающего аттрибут "Адрес". ======= т.е. Таблица_Иванова Ресторан Адрес Field_Adress Далее, по таблице-объекту и полю-аттрибуту ищем адрес, причем, в формате для данного пользователя (табл. аттрибутов - многомерна). Т.е., кому-то адрес - это обычная текстовая строка. Кто-то содержит адрес в виде форматированной текстовой строки (для разбиения ее на улицу, дом, корпус, офис, и т.д. Кто-то, указатель на справочник адресов. ====== тоже в динамике пользователем Иван Иваныч? И что такое указатель в РСУБД? FK? Соответственно, в UI, у одного пользователя возникает обычный текстовый input. У другого уже несколько текстовых inputов, а у третьего select со списком адресов. И получают они таблицу, с записями по объекту "Рестораны", с выбранным ранее списком аттриботов (полей таблицы-объекта), и содержащим необходимые данные в аттрибуте "Адрес".. Конечно, из этого следует что таблиц-объектов "Рестораны", будет <= кол-ву пользователей имеющих право создавать объекты и аттрибуты.. Постарайте прочесть текст из этого абзаца выше, не по диагонали. И вы достигните просветления.. ) нда! прочёл 8-) IMHO - этот абзац на форум по Проектированию БД, там тебе скажут более профессионально про многомерные таблицы и Z ось в БД - перед этим определиться в ВИ, и в текстовом виде ЗДЕСЬ написать КАК БУДЕТ РАБОТАТЬ ИВАН ИВАНЫЧ со всей этой байдой - перед этим определиться в ВИ, и в текстовом виде ЗДЕСЬ написать КАК БУДЕТ РАБОТАТЬ ПЕТР ПЕТРОВИЧ делая поиск по всей этой массе разнородной-разноформатой инфы - пример ВИ я написал выше IMHO - У Вас в работе нет ни одного ограничения - Вы на пользователя хотите повесить (хоть и в автомате) создание объектов, атрибутов, ссылок на справочник, заполнение справочников, создание триггеров, FK и тд., определение типа атрибута. Какая зарплата у данного пользователя? - система а-ля 1С хороша, но у меня жена глав-бух не сама там программирует и вводит атрибуты, а меня зовёт :). - доработка данной системы в процессе эксплуатации будет неглюкавее, дешевле и быстрее авторА я лишь пытаюсь разработать наиболее удачную архитектуру - займитесь ВИ, в паре с разработчиком БД (они в другом форуме сидят) ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2008, 10:58 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
ROT EAV плюсы и минусы ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2008, 11:34 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
lightspeedМожет кто работал с данной моделью? Плохая модель - объект может иметь сложную ст-ру и не влезать в одну таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 09:49 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
Bogdanov AndreyВо-первых, Конечному пользователю динамические атрибуты в подавляющем большинстве случаев не нужны. Они могут быть нужны технологу. А во-вторых, даже для поддержки динамических атрибутов есть лучшие способы создания систем. 1. Под конечным пользователем как раз и понимается технолог. 2. М.б., но я не встречал ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 09:51 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
_мод2. М.б., но я не встречалНу тогда советую ознакомиться, а потом EAV защищать. Даже в этой теме примеры систем уже упоминали. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 10:12 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
Petro123ROT EAV плюсы и минусы Все верно, вот только вопрос - почему "Возможность увеличивать количество классов без увеличения количества таблиц" является преимуществом? По всей видимости, есть какое-то подспудное мнение, что создавать таблицы - нехорошо. Не мог ли бы мне кто-нибудь из участников дискуссии объяснить что в этом нехорошего? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 10:21 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
Bogdanov Andrey Petro123ROT EAV плюсы и минусы Все верно, вот только вопрос - почему "Возможность увеличивать количество классов без увеличения количества таблиц" является преимуществом? По всей видимости, есть какое-то подспудное мнение, что создавать таблицы - нехорошо. Не мог ли бы мне кто-нибудь из участников дискуссии объяснить что в этом нехорошего? суть вопроса только в том, что любое увеличение числа таблиц или полей требует доработки системы. Эти доработки могут даваться таким трудом, что разрабочик вынужден искать путь возложения на пользователя возможности самостоятельного расширения атрибутного состава. Так и рождаются EAV и компания. Если же добавление атрибута в таблицу или создание новой таблицы (со всем окружением в виде форм и т.д.) требуют умения грамотно написать имя таблицы, то мыслей изобретать универсальные, но сложные и неповоротливые архитектуры - просто не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 10:29 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
Bogdanov AndreyНе мог ли бы мне кто-нибудь из участников дискуссии объяснить что в этом нехорошего? Для того чтобы уже существующие программы подхватили новый объект(таблицу, столбец) они изначально должны быть написана на динамическиом SQL и использовать словарь БД - таких систем я лично не видел. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 12:02 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
авторДля того чтобы уже существующие программы подхватили новый объект(таблицу, столбец) они изначально должны быть написана на динамическиом SQL и использовать словарь БД - таких систем я лично не видел. Совершенно необязательно.В варианте,который я приводил раньше, при добавлении/удалении атрибута, на автомате создаются view&sp со всеми полями.В Net возможны и другие варианты. Например, свой BindingManager. PS На вопрос "как?", все обсуждение сводится к ответам:"Кому это нужно!". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 12:43 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
_модДля того чтобы уже существующие программы подхватили новый объект(таблицу, столбец) они изначально должны быть написана на динамическиом SQL и использовать словарь БД - таких систем я лично не видел.То есть системы в которых программы умеют "подхватывать" новый атрибут, описанный в "самодельном" словаре данных вы себе представляете, а программы, которые умеют "подхватывать" новый атрибут описанный в словаре данных СУБД - представить не можете? Я думаю, что вы - лукваите. Вы сами для работы с СУБД какое средство используете? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 13:20 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
Bogdanov AndreyТо есть системы в которых программы умеют "подхватывать" новый атрибут, описанный в "самодельном" словаре данных вы себе представляете Это довольно просто - ведь SQL статический Bogdanov Andreyа программы, которые умеют "подхватывать" новый атрибут описанный в словаре данных СУБД - представить не можете? Такие программы я стараюсь писать только в крайних случаях. Bogdanov Andrey Вы сами для работы с СУБД какое средство используете? Смотря какая СУБД :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 14:02 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
_мод Belyкак именно данные попадают в грид? посредством хитрого SQL запроса? Да, и не очень хитрого.Примет "не очень хитрого" - можете продемонстрировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 14:04 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
_модДля того чтобы уже существующие программы подхватили новый объект(таблицу, столбец) они изначально должны быть написана на динамическиом SQL и использовать словарь БД - таких систем я лично не видел.Никто не мешает использовать метаданные не только для EAV, но и для обычных таблиц. И таких программ - масса, которые можно донастроить для изменившихся таблиц. И не зачем лазить для этого в словарь БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 14:36 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
_мод Bogdanov AndreyТо есть системы в которых программы умеют "подхватывать" новый атрибут, описанный в "самодельном" словаре данных вы себе представляете Это довольно просто - ведь SQL статическийПокажите мне "статический SQL", который считывает список клиентов (фамилия, имя, отчество) из EAV базы. _мод Bogdanov Andreyа программы, которые умеют "подхватывать" новый атрибут описанный в словаре данных СУБД - представить не можете? Такие программы я стараюсь писать только в крайних случаях. То есть своем самодельному словарю данных вы доверяете больше, чем системному словарю БД? И из-за этого заставляете всех пользователей ваше программы мучаться с вашим собственным словарем вместо использования промышленных стандартов. _модСмотря какая СУБД :)Ну я не знаю с какими вы вообще работаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 14:49 |
|
изменяемый набор полей, в каждой таблице
|
|||
---|---|---|---|
#18+
BelyНикто не мешает использовать метаданные не только для EAV, но и для обычных таблиц. Это верно, но в select-е все равно придется использовать новые имена таблиц-столбцов, т.е запрос будет динамический. Так что метаописание не спасает. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2008, 16:52 |
|
|
start [/forum/topic.php?fid=33&msg=35503192&tid=1548708]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 158ms |
0 / 0 |