|
|
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Много говорится о бестпрактис хранения исходников БД в СКВ, причем каждый объект - это отдельный файл и т.д. Так же есть множество модных (и не очень) деплойеров и changhe manager'ов, которые позволяют управлять изменениями кода БД, собирать дифф-скрипты, накатывать на базы и контроллировать все это дело (Liquibase, dbdeploy, etc). А есть какая-либо тулза, которая помогала бы непосредственно управлять самим исходным кодом , например: - Могла набросать каркас из папок и файлов для хранения исходных кодов объектов; - собрать из этих исходников итоговый скрипт, который можно юзать в какой-нибудь CI. Причем сборка с различными параметрами, например частичная (отдельной таблицы или нескольких таблиц), без ФК, ПК, индексов и т.д. Сборка с тестовыми данными, сборка с боевыми данными и многое другое... - контроллировать актуальность хранимых объектов, т.е. следить за тем, что если был удален пользователь, то и все его объекты так же должны пропасть из текущей версии. Если грохнули таблицу, то также удалились ее индексы (которые так же хранятся в отдельных файлах и имеют свою историю изменения). ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2013, 20:34 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Это снова я... Не получив ответа, решил накидать прототип - https://github.com/mgramin/LiWIDE Данная тулзовина предназначена для организации хранения исходного кода создания БД (DDL, DML etc). В частности была навеяна постом ( http://www.sql.ru/forum/927233/ishodnyy-kod-obktov-bd) и статьей, из него родившейся. Будет интересно узнать отзывы и мнения, здоровая (и не очень) критика приветствуется. Тулза позволяет описать структуру типов объектов БД в формате xml и дальше работать с их экземплярами. Если выполнить Код: powershell 1. то можно получить несколько преднастроенных типов объектов. Например: simple_table.xml, описывает обычную таблицу, элементы которой (ddl, indexes, test_data), хранятся в разных файлах: Код: xml 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. Так же есть другие типы объектов. Код: powershell 1. 2. 3. 4. 5. 6. Ну и никто не ограничивает создание своих собственных типов объектов. Теперь создадим несколько табличек: Код: powershell 1. В ответ получим: Код: plsql 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. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. Предудущую команду можно переписать так, чтобы в ответ получить только имена созданных файлов, для этого заюзаем шаблон вывода "conf/templates/only_name_tmpl.ftl", вместо шаблона, который используется по умолчанию ("conf/templates/default.ftl"): Код: powershell 1. Это может пригодится для того чтобы заюзать например с текстовым редактором, и сразу получить созданные файлики на редактирование, как то так: Код: powershell 1. В итоге получим 4 папки такой структуры, где каждый жлемент каждой таблицы хранится в отдельном файле: Код: powershell 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. Теперь со всем эим можно поработать. Например получить скрипт на создание тестовых данных для всех таблиц: Код: powershell 1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Или отредактировать эти файлы: Код: powershell 1. Весь скрипт для таблицы SALARY: $ lwd get -t table -n SALARY -p simple_tables Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. и т.д. При этом есть возможность создать собственные шаблоны для вывода (соотвествующий внутрикомандным стандартам например). Так же, те же самые таблицы можно организовать в любую другую струкутур, например каждая таблица в отдельном файле: Код: powershell 1. Посмотрим, что получилось: Код: powershell 1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Одну таблицу рассмотрим поближе: Код: powershell 1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Получили такой же результат, как и в первом случае, при хранении в отдельных файлах. Т.е. можем сформировать любой скрипт, в не зависимости от того как исходные скрипты хранятся на диске. Ну и обмолвлюсь о возможности хранить все таблицы (или другие типы объектов) в одном файле, как в дампе: Код: powershell 1. В итоге получим одни файл tables.sql, но это не помешает нам формировать любые скрипты как в 1-м и 2-м случае. Теперь пришло время поговорить о патчах. Т.к. данная тулзовина не является DB-мигратором, то она может только подготовить патч для объекта(объектов), в том числе и для дальнейшего его использования в миграторах (пример с liquibase дальше). Для этого используем заранее подготовленный тип объекта simple_table_patch (из файлика .lwd/simple_table_patch.xml): Код: powershell 1. Можем создать и сразу заполнить сразу несколько патчей для объекта: Код: powershell 1. Или патч с правками для нескольких объектов: Код: powershell 1. А так же просмотреть историю изменения объекта по птчам, например так: Код: powershell 1. В итоге увидим, что рпоисходило с ним в 3-х патчах и так же увидеть его текущее состояние (или исходное, это уже зависит как организован код в вашем проекте): Код: powershell 1. Ну выглядеть наши патчи в ФС будут примерно так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Теперь обещанный Ликвибэйс. Делаем новый шаблон для отображения скриптов, очень похожий на родной ликвибесовский чейнджлог, conf/tenplates/lb_change_log.ftl, и по аналогии описываем его в config.xml: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Тепер делаем очередной патч, но с применением этого шаблона: Код: powershell 1. Получим xml-ку (пока страдает форматирование (кода отступы используются), и не подставляется номер версии, в ближайших версиях сделаю): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Наверное сумбурно получилось... Если будут вопросы, то с удовольствием отвечу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 20:49 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Максим Н, Типа расширение XSL, типа XSLBD :) Кстати, а комментарии таблиц/полей разве нельзя хранить в поле COMMENT? Просто по ссылке на статью проиллюстрирована потеря комментариев, все остальное на месте. Тот факт что БД живут в БД освящает одна из заповедей Кодда: факт должен храниться в одном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 00:09 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
deblogger, Комментарии это только одна из проблем. Про Кодда аргумент мощный, но на практике бывает удобно хранить исходный код создания(изменения) базы именно в файлах под контролем СКВ. Это дает несколько плюсов: - модульность (т.е. объекты можно разбить тематически, это Ядро, это Кадры, это ЗП и т.д.), - возможность вести несколько версий баз(веток) (основной код(базвый, одинаковый везде), код базы для разработки, для тестов, для нагрузочных тестов, для продакшенов, которые тоже могут отличаться), - безболезненная параллельная работа над одним объектом нескольких разработчиков (используя средства СКВ, бранчинг, слияние и все такое) - возможность все это дело заскриптовать нужным образом, организовать билды (ночные и не очень) для разных версий, или например собрать скрипт для создания(обновления) нужной базы; - вести патчи - возможность описать и хранить любом виде не только стандартные объекты БД (таблицы, представление, хранимая процедура etc), но и свои собственные (например параметры системы, различные регистрации объектов и пр.). - и т.д.. Мы тут с ребятами из соседней ветки общались на эту тему немножко - http://www.sql.ru/forum/1019474/vybor-subd-dlya-nebolshoy-java-utility В итоге я попробовал накидать инструмент, который мог бы автоматизировать процесс создания и управления этим кодом. Можно описать объект базы данных в нужном виде (а не только в том, в котором представляет его IDE) в формате XML(пока), а затем создавать его экземпляры. Дальше на основании этого описания можно делать различные сборки и манипуляции с данными объектами. Т.е. некая попытка организовать хранение кода БД именно в файлах, а БД использовать как компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 12:54 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Максим НТ.е. некая попытка организовать хранение кода БД именно в файлах, а БД использовать как компилятор. По моему это не правильный подход к работе с БД. Это мне напоминает времена DOS, когда некоторые товарищи в каталогах файл-помойки вели файлик index.txt. В котором содержалась вся информация о файлах в каталоге. При этом приобретая проблема поддержки данного файла в актуальном состоянии. В конце концов он просто становился копией команды dir :-) Т.е. в конце концов вы придете к тому, что придется реализовывать все что есть в SQL-сервере, только без SQL-сервера. Насчет "хранения" информации о БД. Самым оптимальным является хранение ERD-диаграмм. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 07:25 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
mad_nazgulНасчет "хранения" информации о БД. Самым оптимальным является хранение ERD-диаграмм. ;-) По структуре таблиц да. По хранению описаний функций и ХП - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 12:50 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
mad_nazgulПо моему это не правильный подход к работе с БД. Возможно. Но у варианта создавать и хранить все объекты в базе на живую, тоже есть свои недостатки: во первых, код криво выгружается (потом на форуме куча вопросов всплывает: "как выгрузить код таблицы без этого", "как выгрузить с этим", "Как добавить именно такие гранты для объекта в выгрузку"), ну а потом каждая ИДЕ(тулза) выгружает и отображает код как ей вздумается, аккуратно выковыривая его из систменых таблиц (или еще откуда). И все этого вместо того чтобы просто хранить код создания объектов в нужном виде в нужном месте, ну а затем собирать из него чего надо. Если не прав то поправьте пожалуйста. Ну еще плюс параллельная работа, ведение нескольких веток, хранение собственных типов объектов, разделение на модули и многое другое. С ER диаграммами тоже не все радужно. Извините за боянистый пример, но все же: голое описание синтаксиса команды CREATE TABLE в официальной оракловой документации занимает несколько десятков страниц. Как всем этим можно воспользоваться при визуальном дизайне табличек я не очень себе представляю. Это уже не говоря о тэйблспейсах, датафайлах, партицировании и пр. Еще часто при разработке БД объекты не создают обычными CREATE или ALTER напрямую, а через какие-нибудь процедуры-обертки, которые например выполняют какую либо регистрацию или/и выполняют дополнительные действия в зависимости от выполняемой среды. Ну и логично хранить код вызова этих процедур, как код создания объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 13:08 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Максим Н... С ER диаграммами тоже не все радужно. ... Открой для себя PowerDesigner ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 14:49 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Infernal V. Raven, Открывал. А еще AllFusion ERwin Data Modeler и т.д. Штука крутая, но не панацея. Платный, большой, громоздкий, ну и как бы немного для других целей. Эта тулзовина может пригодится когда разработка БД идет именно от исходников, которые версионируются, собираются в разные версии (разработка, тестовая, продакшн etc) собираются ночные билды и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:31 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Максим НОткрывал. А еще AllFusion ERwin Data Modeler и т.д. Штука крутая, но не панацея. Платный, большой, громоздкий, ну и как бы немного для других целей. Как-то не вяжется с: Максим Нголое описание синтаксиса команды CREATE TABLE в официальной оракловой документации занимает несколько десятков страниц. Как всем этим можно воспользоваться при визуальном дизайне табличек я не очень себе представляю. Это уже не говоря о тэйблспейсах, датафайлах, партицировании и пр. Еще часто при разработке БД объекты не создают обычными CREATE или ALTER напрямую, а через какие-нибудь процедуры-обертки, которые например выполняют какую либо регистрацию или/и выполняют дополнительные действия в зависимости от выполняемой среды. Ну и логично хранить код вызова этих процедур, как код создания объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 15:43 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Infernal V. RavenМаксим НОткрывал. А еще AllFusion ERwin Data Modeler и т.д. Штука крутая, но не панацея. Платный, большой, громоздкий, ну и как бы немного для других целей. Как-то не вяжется с: Максим Нголое описание синтаксиса команды CREATE TABLE в официальной оракловой документации занимает несколько десятков страниц. Как всем этим можно воспользоваться при визуальном дизайне табличек я не очень себе представляю. Это уже не говоря о тэйблспейсах, датафайлах, партицировании и пр. Еще часто при разработке БД объекты не создают обычными CREATE или ALTER напрямую, а через какие-нибудь процедуры-обертки, которые например выполняют какую либо регистрацию или/и выполняют дополнительные действия в зависимости от выполняемой среды. Ну и логично хранить код вызова этих процедур, как код создания объектов. Почему же, с одной стороны визуальная разработка (дизайнеры, визуальные ИДЕ, выгрузка дампов, генерация дифов, миграции и т.д.) с другой стороны "программирование" БД, работа с исходным кодом (сборка версий, патчи). То и то довольно часто используется, возможно и комбинирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:27 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Максим НInfernal V. Ravenпропущено... Как-то не вяжется с: пропущено... Почему же, с одной стороны визуальная разработка (дизайнеры, визуальные ИДЕ, выгрузка дампов, генерация дифов, миграции и т.д.) с другой стороны "программирование" БД, работа с исходным кодом (сборка версий, патчи). То и то довольно часто используется, возможно и комбинирование. брр... Сперва разберемся с этим: голое описание синтаксиса команды CREATE TABLE в официальной оракловой документации занимает несколько десятков страниц. - документация обычно занимает много страниц. Как всем этим можно воспользоваться при визуальном дизайне табличек я не очень себе представляю - в средствах моделирования (например PD) как-раз это очень хорошо представляется. Это уже не говоря о тэйблспейсах, датафайлах, партицировании и пр. - также представлено в PD Еще часто при разработке БД объекты не создают обычными CREATE или ALTER напрямую, а через какие-нибудь процедуры-обертки, которые например выполняют какую либо регистрацию или/и выполняют дополнительные действия в зависимости от выполняемой среды. - можно примеры? Дополнить скрипт создания таблицы своими скриптами (например для обновления метаданных ИС) в PD можно с помощью настроек. Ну и логично хранить код вызова этих процедур, как код создания объектов. - можно. Но для меня, например, версионировать модель предпочтительнее, по сравнению с кодом который ее создает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 17:41 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Infernal V. Ravenголое описание синтаксиса команды CREATE TABLE в официальной оракловой документации занимает несколько десятков страниц. - документация обычно занимает много страниц. Я про то, что такая операция как создание таблицы содержит очень много опций (параметров) и размазать это все по визуальной форме-конструктору, а потом еще в этом ориентироваться довольно проблематично. А потом приходится обучаться работе именно с этой средой, а не с конкретной СУБД. Infernal V. RavenЕще часто при разработке БД объекты не создают обычными CREATE или ALTER напрямую, а через какие-нибудь процедуры-обертки, которые например выполняют какую либо регистрацию или/и выполняют дополнительные действия в зависимости от выполняемой среды. - можно примеры? Например при создании каждой таблицы ее нужно зарегистрировать в системе, в зависимости от ее предназначения (на одной из моих работ это было нужно для заюзывании ее в системе репликации). Регистрация представляла собой вызов спец процедуры с параметрам таблицы. В другом проекте через обертку создавались пользовательские джобы, т.к. количество их очень большое, и требовался дополнительный контроль, в зависимсоти от модуля, от автора джоба, от времени запуска, единый способ создания и стиль оформления. В процедуре используются входные параметры обычного DBMS_JOB.isubmit + еще дополнительные, необходимые для приложения. Где то здесь на форуме (ссылку наврядли найду) парень писал, что у них все объекты (или почти все) создавались через похожие обертки, а прав на создание объектов на прямую (ALTER, CREATE) у разраюотчиков вообще не было. Вобщем практика весьма распротраненная. Infernal V. RavenНу и логично хранить код вызова этих процедур, как код создания объектов. - можно. Но для меня, например, версионировать модель предпочтительнее, по сравнению с кодом который ее создает. А я и не говорю, что это у меня серебряная пуля. Для меня самого это пока больше как эксперимент, и интересно что из этого может получиться. Лично для меня, чтобы создать табличку, гораздо проще просто открыть файл (или создать новый) наваять там оператор (операторы, при чем в этом файле уже может быть готовый снипет, офрмленный по стандратам проекта, или даже отдельного модуля), закинуть в скрипт для дальнейшего сбора патча и заверсионировать. Ну еще такие дела лихо скриптуются. Например ставим в планировщик задание, которое будет каждую ночь пересобирать рабочую базу и еще плюс собирать тестовую базу с тестовыми данными, которой можно будет пользоваться в течении следующего дня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2013, 20:27 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Максим НЯ про то, что такая операция как создание таблицы содержит очень много опций (параметров) и размазать это все по визуальной форме-конструктору, а потом еще в этом ориентироваться довольно проблематично. А потом приходится обучаться работе именно с этой средой, а не с конкретной СУБД. Какая-то каша. Для манипуляции объектами есть подмножество SQL - DML. Есть визуальные средства работы с ним - приводившиеся PD, ErWin и другие, например, встроенные в платформу либо программу. Притом они позволяют централизовано хранить описание модели. Для хранения отдельных скриптов можно использовать базу данных, файловую систему либо другое хранилище. Плюс системы версионирования. Максим ННапример при создании каждой таблицы ее нужно зарегистрировать в системе, в зависимости от ее предназначения (на одной из моих работ это было нужно для заюзывании ее в системе репликации). Регистрация представляла собой вызов спец процедуры с параметрам таблицы. PD позволяет автоматизировать создание скриптов и создавать дополнительные "обвесы" для событий создания, удаления объектов Максим Нчерез похожие обертки, а прав на создание объектов на прямую (ALTER, CREATE) у разраюотчиков вообще не было. Вобщем практика весьма распротраненная. Хрень какая-то. Разрешений на CREATE, ALTER нет, но создавать объекты можно, только через дымоход. Можно ссылки на описание того, где подобные решения используются? Похожую систему одну знаю - 1С, но она как раз с точки зрения работы с СУБД - сущий ад. Максим НЛично для меня, чтобы создать табличку, гораздо проще просто открыть файл (или создать новый) наваять там оператор (операторы, при чем в этом файле уже может быть готовый снипет, офрмленный по стандратам проекта, или даже отдельного модуля), закинуть в скрипт для дальнейшего сбора патча и заверсионировать. Ну еще такие дела лихо скриптуются. Например ставим в планировщик задание, которое будет каждую ночь пересобирать рабочую базу и еще плюс собирать тестовую базу с тестовыми данными, которой можно будет пользоваться в течении следующего дня. Ну так это никак и не мешает хранению модели в PD и генерации скриптов. Для достаточно больших проектов актуализация ER-диаграмм является обязательным. А накат патчей, сборки и т.д. еще более актуальны чем для мелких проектов, в которых разработка идет "от исходников". Насчет ценности утилиты есть сомнения, хотя я и не говорю, что она хреновая. Возможно кому-нибудь пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2013, 14:30 |
|
||
|
Тулза для работы с исходниками БД
|
|||
|---|---|---|---|
|
#18+
Infernal V. RavenКакая-то каша. Для манипуляции объектами есть подмножество SQL - DML... ...Для хранения отдельных скриптов можно использовать базу данных, файловую систему либо другое хранилище. Плюс системы версионирования. Именно, я и говорю о хранении скриптов (и совершенно не важно как они получены, сгенерены дизайнером, IDE'шкой, выгружены из другой базы или бережно написаны руками) в файловой системе под СКВ. Вопрос в том чтобы организовать это хранение: здесь объекты модуля такого то, здесь такого то, таблицы хранятся в таком-то виде, процедуры в таком-то. Но когда объектов и типов объектов много, когда работает более менее большая команда разработчиков, могут возникнуть проблемы с поиском нужных файлов со скриптами, со сбором версий, патчей и т.д. Вот и возникла идея двухколесного стального коня, который помог бы грубо говоря, шаблонизировать исходники БД, хранящиеся в файловой системе. Чтобы можно было хранить объекты (и вести контроль за этим) именно в таком виде в каком удобно (например весь DDL таблицы в одном файле, или наоборот, скрипт создания, индексы, ключи etc в разных файлах), а не в том в котором навязывает IDE. А потом чтобы можно было достать нужные элементы нужных типов, например "достать индексы всех таблиц модуля ЗП", "собрать скрипт с грантами для всех процедур модулей Кадры и Налоги". Чтобы можно было объявить и работать с собственными типами объектов. Infernal V. RavenХрень какая-то. Разрешений на CREATE, ALTER нет, но создавать объекты можно, только через дымоход. Можно ссылки на описание того, где подобные решения используются? Ссылку пока не нашел, давно это было... Infernal V. RavenНу так это никак и не мешает хранению модели в PD и генерации скриптов. Для достаточно больших проектов актуализация ER-диаграмм является обязательным. А накат патчей, сборки и т.д. еще более актуальны чем для мелких проектов, в которых разработка идет "от исходников". Насчет ценности утилиты есть сомнения, хотя я и не говорю, что она хреновая. Возможно кому-нибудь пригодится. Как минимум PD не получится нормально заскриптовать (или я не прав?), что бы например по крону у меня автоматом собиралась база (причем как упоминал разных видов и для разных целей, по кускам или полностью), или рефрешились какие-нибудь тестовые данные или справочники на тестовых серверах и т.д. Ну и вообще это разного поля ягоды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2013, 22:56 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38324965&tid=1541173]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
156ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 272ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...