posts колонки: post_id (autoincrement). channel_id
Если я хочу, чтобы для каждого channel_id отсчёт постов начинался с единицы, то значит ли, что мне надо завести отдельную таблицу, которая будет хранить счётчики идентификаторов для каждого channel?
Добавляется таблица channels_increments в ней колонки: channel_id (primary), last_post_id
В телеграме, например, для каждого канала отсчёт идентификатора постов начинается с единички.
В 98% случаев это значит, что вы хотите безсмысленного нагрева пространства. Поскольку с чего начинаются счётчики, и что там вообще один счётчик на всех — никого не интересует. В 2% случаев это значит, что вам надо в какой-то момент после того, как очередная последовательность устаканится — её перенумеровать. Поскольку эта нумерацыя важна, но просто так сделать её сразу правильной — всё равно не получится.
А так — да, если хотите греть пространство — выделяйте соответствующий учётный регистр для каждого канала.
Всё должно быть красиво.
И да, в телеграме такая нумерацыя — потому, что телеграм не хранит посты в ACID базе данных. (Можэт себе позволить. Это затратнее в плане труда программистов в среднем. Но, если хорошо сделано — быстрее).
Вы в рамках этого стремления собираетесь при удалении постов перенумерацией заниматься?
В случае с чатами и прочим иногда нужны дополнительные гарантии. К примеру посчитать количество непрочитанных - это текущий счётчик чата минус счётчик, который увидел клиент
Сделать праймари (канал, счётчик), получать максимальное значение, прибавлять единицу, пытаться инсертнуть с ней. Не вышло - кто-то обогнал, повторяем операцию.
это только в случае gapless нумерации, которая сама по себе не бесплатна
Обсуждают сегодня