[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Посоветуйте какой алгоритм лучше!
Master812
Всем привет!
Как я уже говорил ранее, я пишу новостной движок. Сегодня передо мной встал вопрос как лучше использовать счётчик новостей. Дело в том, что в моём движке имеются категории, например: Главные новости, Новости Москвы, Новости Санкт-Петербурга и т.п. И в каждой категории может быть тысячи или даже сотни тысяч новостей. Для всего этого у меня имеются счётчики, представляющие собой текстовый файл в который заносится кол-во новостей по каждой категории + ещё один счётчик для всех новостей независимо от категории. Данные заносятся путём подсчёта из базы данных MySQL, т.е. создаётся запрос вида

SELECT COUNT(`id`) FROM '.$db["db_table"].' WHERE category = "'.$cat[$i]['name'].'"'

и затем полученное число заносится в файл. Так вот, встал следующий вопрос: Если записей в БД будет 1 миллион или даже больше, не возникнут ли тормоза с подсчётом? Или может лучше вести подсчёт иначе, например, при создании новой новости открыть файл, прибавить к нему число 1 и записать получившееся значение в этот же файл, а при удалении новости наоборот уменьшить значение на 1, так будет лучше? Или всё-таки лучше через запрос в MySQL, представленный выше?
depp
делай на category индекс и считай через count запросом в базу. поле category какой тип имеет?
Master812
Цитата (depp @ 6.12.2017 - 22:52)
делай на category индекс и считай через count запросом в базу. поле category какой тип имеет?

Поле category имеет тип varchar(255). Индексы я уже сделал, но помогут ли они при миллионе новостей? Насколько я знаю в некоторых движках, например, в IPB используются текстовые файлы со счётчиками.
depp
а много категорий? зачем varchar? может быть сделать таблицу с названиями категорий? а в текущую таблицу писать id категории.
а в таблице категорий добавь поле счетчик новостей. и при добавлении/удалении записи обновляй кол-во.
и насколько я знаю движок IPB - там все данные хранятся в базе. в файлах там только кэш скинов и файлов пользователей.
FatCat
Цитата (Master812 @ 6.12.2017 - 22:24)
в некоторых движках, например, в IPB используются текстовые файлы со счётчиками

Не знаю где в ИПБ используются текстовые файлы.
Счетчики же сделаны в самой БД. Например, счетчик числа сообщений в топике сделан в таблице топиков: при добавлении нового сообщения в таблицу сообщений, одновременно счетчик увеличивается на единичку. Функции пересчета количества сообщений в топике используются только для модерации - например при удалении сообщений.

_____________
Бесплатному сыру в дырки не заглядывают...
Master812
FatCat, я догадывался, что БД имеет встроенный счётчик количества записей в таблице. Но если нужно посчитать с учётом категорий, то ведутся ли такие счётчики? Например, новости в категории "Москва", категория "Питер" и т.п. Индексы на столбец "category" конечно же имеюся.
FatCat
Цитата (Master812 @ 7.12.2017 - 14:34)
если нужно посчитать с учётом категорий, то ведутся ли такие счётчики?

Тоже счетчик в таблице категорий.

_____________
Бесплатному сыру в дырки не заглядывают...
Master812
FatCat, то есть если создаешь индекс для категорий, то автоматом создаётся и счётчик для каждой категории? Она автоматом записывает сколько постов относится к категории "Москва" и при необходимости не пересчитывает а сразу выдает это значение?
FatCat
Цитата (Master812 @ 7.12.2017 - 17:10)
автоматом создаётся и счётчик для каждой категории?

Автоматом ничего не создается; это предусматривается при проектировании БД и затем реализуется в скриптах движка.

_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.