<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_10_thread_1857"  />
<title>rulinux.net - Форум - Talks - [мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Talks - [мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Fugcoosaura</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14384</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14384</guid>
<pubDate>Wed, 29 Jul 2009 00:11:32 +0400</pubDate>
<description><![CDATA[<p>The screenwriters were not politically motivated in any way. 
&lt;a href=<a href="http://honerensfs.com&gt;eem&lt;/a&gt;">http://honerensfs.com&gt;eem&lt;/a&gt;</a></p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14383</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14383</guid>
<pubDate>Sat, 30 May 2009 13:53:55 +0400</pubDate>
<description><![CDATA[<p>s/топиков/форумов/</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14382</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14382</guid>
<pubDate>Sat, 30 May 2009 13:53:22 +0400</pubDate>
<description><![CDATA[<p>А если я захочу увеличить макс глубину, скажем, до 1024 топиков?</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14381</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14381</guid>
<pubDate>Sat, 30 May 2009 11:38:41 +0400</pubDate>
<description><![CDATA[<p>А если для каждого узла создать свою колонку? NULL-ов будет много, но почему бы и нет раз так хочется отобразить иерархическую в реляционную структуру.</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14380</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14380</guid>
<pubDate>Sat, 30 May 2009 09:22:56 +0400</pubDate>
<description><![CDATA[<p>У меня хранение в базе не в стиле "Список смежности", как было указано в первом сообщении. Я указал этот способ, чтобы не слишком перегружать первый пост - он и так перегружен. Тот способ, который я использую называется, наверное, "Подмножества". Когда в отдельной таблице хранится ID и отдалённость всех родителей элемента.
Задача не в хранении и показе дерева. Как раз показать дерево то и не тяжело. Тяжело определить, какой элемент используется сейчас, потому что для этого надо по-очереди обойти всех родителей. 
Но, я уже определился с решением. Хотя все-равно спасибо :)</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14379</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14379</guid>
<pubDate>Sat, 30 May 2009 04:26:59 +0400</pubDate>
<description><![CDATA[<p style="font-style:italic">&gt; перечитай ещё раз первое сообщение, но вникни, а не по диагонали</p><p>перечитал ещё раз. Суть сводится к тому, что в реляционной бд нужно хранить (обширное) дерево. Решается стандартными методами, коих немногим больше чем nested sets+ещё два. Стандартными - потому что задача весьма распространена и лучшие методы давно выработаны. Крайне сомнительно, что тут заведётся девелопер сравнимого с авторами готовых методов уровня, который предложит что-то оригинальное.</p><p style="font-style:italic">&gt лень сейчас объяснять</p><p style="font-style:italic">&gt лень</p><p>1. серий коротких запросов бояться не надо. Кучя простых запросов менее болезненна нежели один сложный, долго выполняющийся, из-за блокировок.</p><p>2. materialized paths годится. Надо только разбивать строки путей на куски, не превышающие 1к символов и отразить факты разбивки в специальном поле таблицы. </p><p>3. nested sets годится. Тут приходится итти на компромисс скорости выборки со скоростью добавления. Если речь идёт о форуме, количество добавлений узлов будет на 2-3 порядка уступать количеству чтений, так что в целом по производительности несомненно будет выйгрыш. Вопрос только в его величине по сравнению с другими методами, а это вопрос скользкий.</p><p>вот щё пара методов, на первой же странице пойска в гуголе <a href="http://www.arbinada.com/main/node/25">http://www.arbinada.com/main/node/25</a></p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14378</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14378</guid>
<pubDate>Sat, 30 May 2009 03:02:07 +0400</pubDate>
<description><![CDATA[<p>Чтото разрыв строки не поставился. Но, в общем, понятно все</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14377</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14377</guid>
<pubDate>Sat, 30 May 2009 03:01:03 +0400</pubDate>
<description><![CDATA[<p style="font-style:italic">&gt; нужна не оригинальная идея, а тыщу раз обсосатая тривиальщина
Ты - ошибаешься. Почему - лень сейчас объяснять. Если хочешь - перечитай ещё раз первое сообщение, но вникни, а не по диагонали. Нестет сетс не подходит потому что эта таблица будет очень часто менятся. Почему не подходят два остальных способа - написано в первом сообщении. </p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14376</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14376</guid>
<pubDate>Fri, 29 May 2009 22:45:45 +0400</pubDate>
<description><![CDATA[<p style="font-style:italic">&gt; если бы не одно но: нужна не реализация, а идея. чувствуем разницу?</p><p>если бы не одно но: нужна не оригинальная идея, а тыщу раз обсосатая тривиальщина  <a href="http://www.google.ru/search?&amp;hl=ru&amp;q=хранение+деревьев+в+базе+данных">http://www.google.ru/search?&amp;hl=ru&amp;q=хранение+деревьев+в+базе+данных</a></p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14375</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14375</guid>
<pubDate>Fri, 29 May 2009 21:17:54 +0400</pubDate>
<description><![CDATA[<p style="font-style:italic">&gt;попробуй спросить здесь <a href="http://freelance.ru/">http://freelance.ru/</a></p><p>если бы не одно но: нужна не реализация, а идея. чувствуем разницу?</p><p>впрочем уже подсказали юзать хэши, что впринципе вполне неплохое решение.</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14374</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14374</guid>
<pubDate>Fri, 29 May 2009 21:07:52 +0400</pubDate>
<description><![CDATA[<p style="font-style:italic">&gt;То что ты просишь делают за деньги.</p><p>/me прозреваент безработного студент-куна, ищущего где-бы подзаработать хотя бы на ролтон.</p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14373</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14373</guid>
<pubDate>Fri, 29 May 2009 20:42:54 +0400</pubDate>
<description><![CDATA[<p>попробуй спросить здесь <a href="http://freelance.ru/">http://freelance.ru/</a></p>]]></description>
</item>
<item>
<title>Re:[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14372</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14372</guid>
<pubDate>Fri, 29 May 2009 20:25:40 +0400</pubDate>
<description><![CDATA[<p>1. SQL заебал ещё в университете.</p><p>2. То что ты просишь делают за деньги.</p>]]></description>
</item>
<item>
<title>[мускуль] Какой номер листочка, если сказано его имя и на какой он ветке</title>
<link>https://rulinux.net/message.php?newsid=1857&amp;page=1#14371</link>
<guid>https://rulinux.net/message.php?newsid=1857&amp;page=1#14371</guid>
<pubDate>Fri, 29 May 2009 20:06:56 +0400</pubDate>
<description><![CDATA[<p>Задание следующее. Допустим, у нас есть форум по адресу <a href="http://forum.lh">http://forum.lh</a> . Но он имеет чуть необычную структуру.
В нем может быть неограниченное количество форумов с неограниченной вложенностью.
Структуру таблицы Forums представим следующей: [ID, Title, ParentID]
Для облегчения задания предположим, что Title у нас может иметь только латинские буквы(минимум одна) и цифры и быть не больше 64 символов. ParentID - это айди форума-родителя, или NULL
Структура таблицы Topics: [ID, Title, ForumID]
Теперь суть задачи на примере:</p><p>forum.lh/first/second/third/HelloWorld.html
Такой адрес должен открывать тему "HelloWorld" в форуме с названием "third", который лежит в форуме с названием "second", который лежит в форуме с названием "first".</p><p>Вопрос: как узнать ID темы, которую нам надо отобразить, если:
Тем с таким названием может быть несколько, но только в разных форумах! Например:
forum.lh/first/second/third/HelloWorld.html
forum.lh/first/fourth/fifth/HelloWorld.html
forum.lh/first/second/HelloWorld.html
forum.lh/first/HelloWorld.html
В данном случае это все реальные и, при этом РАЗНЫЕ темы.
Более того, могут дублироватся названия форумов, но не в одном форуме. То есть
forum.lh/second/second/
forum.lh/second/first/
forum.lh/first/second/
forum.lh/first/first/second/first/
Это все вполне валидные пути РАЗНЫХ форумов.
Далее. Допустим, вложенность может быть очень большой. Например, 64 форума.</p><p>Повторяю вопрос и раскрываю чуть проблемы:</p><p>* Как узнать ID темы, которую нам надо отобразить.</p><p>Ситуация:
1. У нас есть только её название, которое НЕ УНИКАЛЬНО и полный путь к ней.
2. О каждом участке пути мы только знаем его неуникальное название и полный путь к нему
3. В пути может быть до 64 делений.
4. У нас есть высоконагруженная система, в которой количество запросов должно быть сведено к минимуму. Желательно, общее количество запросов(включая не только анализ пути) - не больше 15.</p><p>Решения, о которых я знаю:
1. Решение "вЛоб"
Получаем айди первой секции простым запросом к базе:
${FirstID} = SELECT `ID` FROM `Forums` WHERE `Title` = `${Title}` AND `ParentID` IS NULL
Получаем айди второй секции простым запросом к базе:
${SecondID} = SELECT `ID` FROM `Forums` WHERE `Title` = `${Title}` AND `ParentID` = &#039;${FirstID}&#039;
И так пока не дойдем до последней секции, то есть темы.
Решение не подходит. Причина: до 65 запросов только на получение темы.</p><p>2. Materialized Path
У нас в базе хранятся полные пути к каждому форуму. Допустим, для этого у нас есть отдельная таблица "ForumsPathes" со структурой [ForumID, FullPath]. Пример содержимого:
1 | first
2 | first/second
3 | second
4 | third
5 | first/second/third
Решение нежелательно. Причины:
1. Поле "FullPath" должно быть индексным varchar длинной (64*64+63) = 4159 символов. По этому полю будет регулярный поиск. Увеличение разрешенной длины названия темы/разрешенной глубины пропорционально увеличит длину поля. Решение, в общем то, ничего такое, но... "#1071 - Specified key was too long; max key length is 1000 bytes". То есть максимально-разрешенная длина в данном случае всего 1000 символов - недостаточно.</p><p>Более того, решение не должно быть слишком тяжелым для понимания (желательно, левому человеку посмотреть на код и сразу понять, как оно должно работать) и не перегружено Join&#039;ами (скажем, максимум - 4-8 на запрос).</p><p>Пока очень застопорился на этом. Если кто сможет помочь описанием алгоритма решения этой задачи - буду рад. :)</p>]]></description>
</item>
</channel>
</rss>