|
|
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
expla Прикольно будет, когда в дереве образуется петля... "ОНО" перестанет быть деревом! Кстати, определяется эта проблема легко, правда не на уровне констрейнтов (в большенстве СУБД, в некоторых можно, но таких мало) expla С введением сурогатных ключей классическое понятие нормализации отношения БД потеряло свой смысл. Мы можем произвольным образом взять набор атрибутов, прицепить к ним суррогатный ключ и сказать, что это новое отношение БД. Как выбрать эти атрибуты - дело вкуса и здравого смысла. Вы не докажете, что именно такое отношение однозначно правильное. Не только не будем доказывать, но и отправим обратно к теории, закладочка на странице с официальным понятием "альтернативные ключи" (или я не о том?) Опять, сорри, за отход от темы... Автору: Нарисуй дерево (на бумажке): оно состоит из узлов и ребер. Их и нужно хранить. Вариантов можно придумать несколько, в зависимости от потребностей. Некоторые узлы имеют в теории специфические названия: корень, листья, ... Выделять ли их тебе - решать тоже тебе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 10:55 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuHexpla Прикольно будет, когда в дереве образуется петля... "ОНО" перестанет быть деревом! Кстати, определяется эта проблема легко, правда не на уровне констрейнтов (в большенстве СУБД, в некоторых можно, но таких мало) На уровне декларативных ограничений целостности это правило легко описать за счёт усложнения операций обновления дерева. Достаточно, чтобы выполнялось ограничение PARENT_ID < ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 13:08 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH Не только не будем доказывать, но и отправим обратно к теории, закладочка на странице с официальным понятием "альтернативные ключи" (или я не о том?) Опять, сорри, за отход от темы... Автору: Нарисуй дерево (на бумажке): оно состоит из узлов и ребер. Их и нужно хранить. Вариантов можно придумать несколько, в зависимости от потребностей. Некоторые узлы имеют в теории специфические названия: корень, листья, ... Выделять ли их тебе - решать тоже тебе. Как раз по теме. Назовите мне первичный ключ листа в дереве... Если имеется глобальная сквозная нумерация всех узлов в дереве, то таким ключём может быть ID узла. Тогда тут всё просто. Каждый узел имеет ключ, поэтому может быть записью в реяционном отношении. Ветки между узлами описываем внешним ключём PARENT_ID. Но нередко мы имеем дело с локальной идентивикацией веток узла (например в двоичном дереве все ветки могут быть правыми или левыми), (поскольку узел в дереве имеет 0..1 ветку связанную с предком, то LOCAL_ID ветки и LOCAL_ID узла можно отождествить, кроме случая корневого узла). Т.е. ключ ветки узла, не является уникальным для всего дерева. Здесь мы не можем описать отдельную ветку записью в реляционном отношении, поскольку это будет нарушением 1НФ (запись не идентифицируема). Добавление сурогатного ключа решает только проблему идентификации записи в физической БД. Чтобы реконструировать логиченский первичный ключ произвольного узла нужно соеденить все записи между этим узлом и корнем дерева. Согласитесь, это неудобно и неэффективно. Так что прежде чем рубить сук на котором сидишь, подумай, о последствиях. Иными словами, не спешите вводить сурогатные ключи и нарезать дерево на ярусы. Постарайтесь сохранить исходный первичный ключь, а добавить сурогатный ключ всегда успеете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 13:43 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
explaKOT MATPOCKuHexpla Прикольно будет, когда в дереве образуется петля... "ОНО" перестанет быть деревом! Кстати, определяется эта проблема легко, правда не на уровне констрейнтов (в большенстве СУБД, в некоторых можно, но таких мало) На уровне декларативных ограничений целостности это правило легко описать за счёт усложнения операций обновления дерева. Достаточно, чтобы выполнялось ограничение PARENT_ID < ID. усложнение операций обновления дерева - это смена идентификаторов при смене родителя у узла? нафикнафик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:06 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuHNafПо родителю однозначно определяется уровень, зависимость уровня от родителя. А зависимостей не должно быть. Но это все условно конечно. Мне все больше нравится подход описанный в Древовидные структуры в SQL (сразу после классического подхода) Осилил! Забавный метод, только НИКОГДА я не буду его использовать! Да и изречение NafА зависимостей не должно бытьчто-то не вяжется с NafМне все больше нравится подход... т.к. там вообще все вершины деревьев неявно связаны: попробуйте добавить или удалить записи в дереве - пол дерева прийдется пересчитать. Пардон за отход от темы... Никогда не говори никогда...) А подход сам по себе интересен, и многие его используют. Да, вставка и удаление при этом подходе могут быть тормознутей по логике, чем привычное всем представление (ID,PARENT_ID,DATA). Зато выборка скорее всего этот минус окупит с лихвой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:11 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
exlpaВетки между узлами описываем внешним ключём PARENT_ID Это не совсем верно, т.к. PARENT_ID все-таки ссылается на ключ узла, поэтому, чтобы описать ветку нужна как минимум пара, например, [NODE_ID, PARENT_ID]. В общем случае, структура NODE_ID, SOME_FIELDS, PARENT_ID является денормализованной. Правильнее было бы разбить ее на две таблицы: "собственно узлы" и "ребра" (или ветки - кому как приятнее). Правда я сам так никогда не делаю - всегда одна таблица :) Т.е. в стандартном случае в одной таблице лежат две разные сущности: узлы (ключ NODE_ID) и ребра (ключ: [NODE_ID, PARENT_ID]). exlpaНо нередко мы имеем дело с локальной идентивикацией веток узла (например в двоичном дереве все ветки могут быть правыми или левыми), (поскольку узел в дереве имеет 0..1 ветку связанную с предком, то LOCAL_ID ветки и LOCAL_ID узла можно отождествить, кроме случая корневого узла). Т.е. ключ ветки узла, не является уникальным для всего дерева. Здесь мы не можем описать отдельную ветку записью в реляционном отношении, поскольку это будет нарушением 1НФ (запись не идентифицируема). Добавление сурогатного ключа решает только проблему идентификации записи в физической БД. Чтобы реконструировать логиченский первичный ключ произвольного узла нужно соеденить все записи между этим узлом и корнем дерева. Согласитесь, это неудобно и неэффективно. Чего-то я не понял ни чего. Давайте перейдем на математичекие термины, в частности, ребро, соединяющее два узла будем называть ребром. Тогда ветка это что? В наших размышлениях она вообще нужна? exlpaТак что прежде чем рубить сук на котором сидишь, подумай, о последствиях. Иными словами, не спешите вводить сурогатные ключи и нарезать дерево на ярусы. Постарайтесь сохранить исходный первичный ключь, а добавить сурогатный ключ всегда успеете. Из Вашего сообщения я понял только одно: Вы что-то предложили сделать, а потом, оценив последствия, предлагаете "Так что прежде чем рубить сук на котором сидишь, подумай, о последствиях. :))". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:13 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
АнатоЛойусложнение операций обновления дерева - это смена идентификаторов при смене родителя у узла? нафикнафик Сам придумал плохое решение, и сам же от него отказался. Придумай хорошее решение и пользуйся. К стати для правильного изменения родителя всё равно как минимум может потребоваться блокировка всех его потомков, так что замена ID узлов не будет выглядеть такой уж жудкой процедурой. Да и часто ли приходится вносить такие изменения в деревья? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:14 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
expla К стати для правильного изменения родителя всё равно как минимум может потребоваться блокировка всех его потомков , так что замена ID узлов не будет выглядеть такой уж жудкой процедурой. По выделенному: от задачи зависит, т.е. далеко не всегда. Я бы сформулировал примерно так: если для узла критически важны параметры родителя, т.е. от этого зависят какие-то его характеристики, то - да, нужно блокировать. Иначе - нет. Пример: если список всех контрагентов распихать по дереву групп контрагентов, то если эта группа нужна только для отображения менеджеру, то не нужно блокировать. А если на эту группировку "заточен" какой-то бизнес-процес, например расчет дисконта, то однозначно - блокировать нужно обязательно! expla Да и часто ли приходится вносить такие изменения в деревья? В "дерево", которое называется моя файловая система я вношу изменения ежедневно по многу раз. А на нашем файл-сервере изменения происходят каждые несколько минут. Так что... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:23 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuHexlpaВетки между узлами описываем внешним ключём PARENT_ID Это не совсем верно, т.к. PARENT_ID все-таки ссылается на ключ узла, поэтому, чтобы описать ветку нужна как минимум пара, например, [NODE_ID, PARENT_ID]. В общем случае, структура NODE_ID, SOME_FIELDS, PARENT_ID является денормализованной. Правильнее было бы разбить ее на две таблицы: "собственно узлы" и "ребра" (или ветки - кому как приятнее). Правда я сам так никогда не делаю - всегда одна таблица :) Т.е. в стандартном случае в одной таблице лежат две разные сущности: узлы (ключ NODE_ID) и ребра (ключ: [NODE_ID, PARENT_ID]). Плевать на сущности. Нормализация сосредоточена только на ключевых, неключевых атрибутах и функциональным зависимостям между ними. Если отношение удовлетворят требованиям той или иной НФ, то сколько в нём сущностей храниться не имеет значения. Как я понял, речь только о том, что в единой таблице узлов/рёбер нельзя создать ребро без двух узлов (если это не корень дерева). Но по моему это вполне нормально, потому как рёбра без узлов не живут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:25 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH В "дерево", которое называется моя файловая система я вношу изменения ежедневно по многу раз. А на нашем файл-сервере изменения происходят каждые несколько минут. Так что... Вам часто приходится переносить папки с места на место? А если в папке есть открытый файл? В любом случае - не нравится не ешь. Проверяй целостность как нибудь иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:31 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH exlpaНо нередко мы имеем дело с локальной идентивикацией веток узла (например в двоичном дереве все ветки могут быть правыми или левыми), (поскольку узел в дереве имеет 0..1 ветку связанную с предком, то LOCAL_ID ветки и LOCAL_ID узла можно отождествить, кроме случая корневого узла). Т.е. ключ ветки узла, не является уникальным для всего дерева. Здесь мы не можем описать отдельную ветку записью в реляционном отношении, поскольку это будет нарушением 1НФ (запись не идентифицируема). Добавление сурогатного ключа решает только проблему идентификации записи в физической БД. Чтобы реконструировать логиченский первичный ключ произвольного узла нужно соеденить все записи между этим узлом и корнем дерева. Согласитесь, это неудобно и неэффективно. Чего-то я не понял ни чего. Давайте перейдем на математичекие термины, в частности, ребро, соединяющее два узла будем называть ребром. Тогда ветка это что? В наших размышлениях она вообще нужна? Имеем бинарное дерево. Каждый узел этого дерева (кроме корневого) имеет одно ребро на входе, и два ребра (правое и левое) на выходе (у листовых узлов есть только ребро на входе). Узел потомок находящийся на конце правого/левого ребра узла предка называем правым/левым. Т.е. отдельно взятый узел будет иметь LOCAL_ID - "правый" (0) или "левый" (1). Таким образом LOCAL_ID не может быть первичным ключём отношения "узлы_бинарного_дерева". Что делать?... Можно ввести сурогатный ключ, но тогда всплывает куча проблем с поиском и модификацией записей. Но можно сконструировать реальный первичный ключ - перечислить LOCAL_ID всех узлов на пути от корня к данному узлу включительно. В бинарном дереве, это может быть последовательность нулей (для "правых" узлов) и единиц (для "левых" узлов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 15:50 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
expla пишет: > varchar2(256). Вы не поверите, но длина пути к файлу всё же ограничена. Не поверю, что 256-ю символами. И не поверю, что суммарная. Могу поверить, что не всякий полный путь к файлу можно задать где-то одной строчкой. Но не поверю, что к такому файлу нельзя прийти, перемещаясь по файловой системе, и потом его прочитать. > Как бы строковые буферы в системе для хранения полного имени имеют > ограниченный размер. Да на самом деле и в это не поверю. > Где же тут нарушение? Никакого нарушения тут нету. Есть файл или > каталог, есть его полное имя. Два атрибута записи. Нет. Это понятно, что кроме полного пути вы другого имени хранить не будете. Но вот работать если с элементами этого полного пути будете в БД --- уже получится нарушение 1НФ - у вас таких элементов будет много. Т.е. у вас будет неатомарный атрибут. Но в общем-то ладно, далее фантазии, и так уже отклонились от темы. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 20:50 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH пишет: > Осилил! > Забавный метод, только НИКОГДА я не буду его использовать! Очень правильное решение. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2008, 20:50 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
MasterZiv expla пишет: > varchar2(256). Вы не поверите, но длина пути к файлу всё же ограничена. Не поверю, что 256-ю символами. И не поверю, что суммарная. Могу поверить, что не всякий полный путь к файлу можно задать где-то одной строчкой. Но не поверю, что к такому файлу нельзя прийти, перемещаясь по файловой системе, и потом его прочитать. А чего: верю - не верю? Сложно попробовать? Создаешь файл и переименовываешь его, пока 256 символов длина не достигнет. В виндах, эксплорер точно "не прорубает" такие пути/названия. Пробуй в командной строке переименовывать. ЗЫ Под переименовывать имеется ввиду постепенное наращивание длины имени файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 07:20 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 07:40 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
MasterZivНо вот работать если с элементами этого полного пути будете в БД --- уже получится нарушение 1НФ - у вас таких элементов будет много. Т.е. у вас будет неатомарный атрибут. Полное имя файла - атрибут атомарный. Какое либо деление этого атрибута лишает его смысла. Если Вас послушать, то можно сказать, что строка, это массив символов, а массив атрибут тоже вроде как не атомарный - состоит из элементов (в случае строки - букв). Однако атомарность, это скорее вопрос системы типов СУБД. Вот стал оракл поддерживать вложенные таблицы и коллекции, и теперь никто не мешает нам хранить атрибуты со сложной структурой в их естественном виде, не прибегая к декомпозиции только из-за того, что в СУБД не было подходящего типа данных. При таком подходе, для логически неделимых иерархических структур можно XML использовать. Оракл ими хорошо рулит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 16:50 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
expla пишет: > Полное имя файла - атрибут атомарный. Какое либо деление этого атрибута > лишает его смысла. Если Вас послушать, то можно сказать, что строка, это > массив символов, а массив атрибут тоже вроде как не атомарный - состоит > из элементов (в случае строки - букв). Именно так. Если нам нужно в БД обрабатывать строку по частям. Некоторые операции со строками встроены в СУБД, как LIKE, substring и т.п. с некоторыми возникают проблемы, например, с полнотекстовым поиском. Если его нет в СУБД, то никакими силами у нас не будет быстрого поиска. А когда он есть - что он из себя внутри представляет ? Декомпозицию строк на слова, символы. То же самое происходит не только со строками, есть даты, по которым иногда надо искать по, например, году. Наверное есть и ещё примеры. Однако атомарность, это скорее > вопрос системы типов СУБД. Это вопрос постановки задачи. Если нам не нужно манипулировать частями поля, оно атомарно. Если надо - оно неатомарно. Но тут нет наверное чёткой границы, её сглаживают функции по работе с данными этих типов. > При таком подходе, для логически неделимых иерархических структур можно > XML использовать. Оракл ими хорошо рулит. Ага, а можно и реляционные СУБД не использовать, вообще всё в XML хранить. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2008, 00:26 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
MasterZiv Однако атомарность, это скорее > вопрос системы типов СУБД. Это вопрос постановки задачи. Если нам не нужно манипулировать частями поля, оно атомарно. Если надо - оно неатомарно. Но тут нет наверное чёткой границы, её сглаживают функции по работе с данными этих типов. Как то не очень убедительно. Давайте разграничим понятия, т.е. отделим БД от её приложений. Нашёл пару определений атомарности: 1. среди значений домена не могут содержаться множества значений (отношения) 2. столбцы таблицы не должны содержать более сложных значений, чем константы определенного для этого столбца типа Первое определение выглядит сомнительно. Чисто формально, доменом можно определить множество значений, которые сами являются множествами (например, строка это множество пар (позиция, символ)). Наконец, вложенные таблицы это уже не сказать что повседневная, но практика. Второе определение, ИМХО, ближе к делу. Если у вас есть тип данных для хранения целого объекта, то независимо от сложности его внутренней структуры он с точки зрения реляционной БД (но не с точки зрения приложений БД) будет атомарным. Приложения БД, такие как собственно СУБД и прочие прикладные программы могут вникать и практически всегда вникают во внутреннюю структуру атрибута, так что при создании физической БД придётся учитывать потребности этих приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2008, 14:19 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
mcureenab пишет: > Как то не очень убедительно. Истина не всегда лежит на поверхности. Давайте разграничим понятия, т.е. отделим > БД от её приложений. Да. Я же писал "ЕСЛИ ВНУТРИ БД НУЖНО ОБРАБАТЫВАТЬ". > Нашёл пару определений атомарности: > 1. среди значений домена не могут содержаться множества значений (отношения) > 2. столбцы таблицы не должны содержать более сложных значений, чем > константы определенного для этого столбца типа второе более интересно. Но тут можно привести много определений разных, и все неверные по сути. > > Первое определение выглядит сомнительно. Чисто формально, доменом можно > определить множество значений, которые сами являются множествами > (например, строка это множество пар (позиция, символ)). Наконец, > вложенные таблицы это уже не сказать что повседневная, но практика. согласен. > Второе определение, ИМХО, ближе к делу. Если у вас есть тип данных для > хранения целого объекта, то независимо от сложности его внутренней > структуры он с точки зрения реляционной БД (но не с точки зрения > приложений БД) будет атомарным. да. Ключевой момент тут - что БД не должа его пытаться разобрать на части или изменить по частям. > Приложения БД, такие как собственно СУБД и прочие прикладные программы > могут вникать и практически всегда вникают во внутреннюю структуру > атрибута, так что при создании физической БД придётся учитывать > потребности этих приложений. Да, согласен. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2008, 19:19 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
MasterZiv > Второе определение, ИМХО, ближе к делу. Если у вас есть тип данных для > хранения целого объекта, то независимо от сложности его внутренней > структуры он с точки зрения реляционной БД (но не с точки зрения > приложений БД) будет атомарным. да. Ключевой момент тут - что БД не должа его пытаться разобрать на части или изменить по частям. БД по своей сути ничего не может изменить в себе. Изменения в БД вносит СУБД, т.е. некий исполняемый код, но никак не данные. Физическая БД, это всего лишь двоичные файлы на дисках. Семантику типа в эти данные вносит сначала СУБД, а затем приложение. СУБД вполне может разбирать атрибуты на составные части, например выделать из строк слова и создавать инвертированные файлы для контекстного поиска. Логическая БД это другое дело. Математические типы атрибутов и отношений определяются как множества значений. В свою очередь значения могут быть скалярами, векторами, кортежами, множествами и т.д. некоторых констант. В процессе проектирования БД мы выбираем такие типы атрибутов, которые поддерживает СУБД и приложения. В этом смысле можно атомарность атрибута рассматривать в привязке к контексту - типа в таком приложении он атомарный, а в другом приложении - нет. Но, ИМХО, этот подход имеет внутреннее противоречие, которое приводит к ошибочным заключениям. Прикол в том, что если СУБД или приложение не поддерживает некий абстрактный тип данных, то и нет смысла говорить о нём с связи с этой СУБД. Если мы дербаним данные на составные части, которые имеют поддерживаемый тип, и создаём из них множество отношений, то это не значит, что исходный тип не был атомарным, это значит, что в БД для данной СУБД нужно хранить атомарные данные в дискретном виде. Так, счёт - объект по сути атомарный. Позиция счёта или счёт продавца сами по себе не имеет смысла. Однако в обычной реляционной БД нам нужно разложить шапку и позиции счёта в разные таблицы, а потом с помощью всяких ограничений и проверок следить, чтобы эти части не рассыпались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2008, 20:16 |
|
||
|
Таблица для хранения дерева бесконечной вложенности
|
|||
|---|---|---|---|
|
#18+
expla пишет: > БД по своей сути ничего не может изменить в себе. Изменения в БД вносит > СУБД, т.е. некий исполняемый код, но никак не данные. Я имел в виду БД как совокупность данных и запросов, их обрабатывающих, естественно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2008, 09:48 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35682209&tid=1543543]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
184ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 488ms |

| 0 / 0 |
