• Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    имхо индекс b-tree в этом плане так же устроен как и партиция. всегда можно поделить индекс на 10 частей. и он будет «меньше». только нужно выбрать одну из этих частей (при этом выбрать одну из 10 частей «копеечная» операция)
    есть пруфлинк что в таком виде партиции улучшают производительность?
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    при этом столько же тиков (или больше) прибавляется учитывая что mysql выбрирает нужную партицию перед запросом.
    иначе бы можно было автоматически всем таблицам делать партиции и партиции партиций и всё было бы быстрее.
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    дело в том что пользвателей, например 10 000, а партиций будет меньше 10 000. например 100. в итоге все запросы распространятся равномерно по партициям.

    не слышал что в этом случае у mysql будет выигрыш (если суммарный объём данных для просмотра точно такой же как был, но теперь есть партиции).

    всегда сталкивался с ситуацией когда после партицирование к одной из партиций идут обращения чаще чем к другим в один момент времени.
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    тогда запросы будут равномерно распределены по всем партициям, это сводит выгоду от партиций на нет.
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    я написал выше завести табличку (user_id, month, year, count) (только для архивных таблиц).
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    1. только created_date < now()-1 month
    2. переносить из таблицы в таблицу скриптами. раз в день.
    3. в контроллере который показывает inbox сделать руками логику которая начинает читать из Message_archive, если сообщения в Messages кончились, а далее из таблиц Message_month_year (если человек упорно жмёт на pagination)

    если чтото будет смущать можно сделать ещё таблицу в которой для каждого (user, month, year) будет записано кол-во сообщений.

    так же можно вначале внедрить логи в файлик, кто какие сообщения читал писал, и в какой бы таблице они были, если была бы эта схема. и посмотреть статистику.
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    Я тоже за этот вариант. Плюс кэширование memcached. Активные пользователи, часто переписывающиеся будут обращаться к одной таблице т.к. у них сообщения в инбоксе в основном за недавние даты.
    Активные не часто переписывающиеся будут брать сообщения из кэша.
    Активная запись будет только в одну таблицу.

    Можно ещё извратиться в архивную таблицу помещать все сообщения которых нет на первых трёх страницах инбокса.
  • Как поделить большую таблицу личных сообщений?

    vsespb
    @vsespb
    уточнить с партициями:
    1. я так понял это mysql?
    2. про партиции — восстановление из бэкапа долгое по сравнению с такой же таблицей без партиций?
    3. создание партиций медленное по сравнению с любым другим alter table?