Оказывается, в TinyIB есть т.н. "беклинки", ну то есть список ответов на пост, как и везде. А знаете, как это работает в TinyIB? При формировании поста, допустим с id=10, движок делает так:
1. Ищет родителя (тред) для id=10, допустим тред это будет id=5
2. Ищет все дочерние элементы у id=5, ну то есть все ответы у треда
3. В каждом найденом посте ищет строковое вхождение "
>>10" - это будет беклинк
Вроде звучит все логично, НО:
1. Это происходит при РЕНДЕРИНГЕ, т.е. при создании HTML-разметки поста
2. Это происходит для КАЖДОГО поста в базе
3. Каждый новый созданный ответ на борде запускает процесс ПОЛНОГО РЕНДЕРИНГА
Допустим, у нас на борде 20 тредов по 200 ответов каждый. И вот я решил создать новый ответ. Получается, что:
1. У нас n = 20 * 200 = 4 000 элементов
2. Итерации вложеные, т.е. n^2 = 16 000 000 итераций
3. Поиск подстроки тоже будет минимум 16 000 000 итерации
4. Итого 32 000 000 операций
И так каждый раз.
Реальные примеры:
- На ноунейм параше было примерно 7к постов. Т.е. каждый новый пост ебал борду ((7 000)^2)*2 = 98 000 000 раз
- Здесь набито скромных 264 поста, то есть этот пост будет ебать борду всего-то 139 392 раза.
Как говорит сам разработчик,
> TinyIB - Lightweight and efficient