• Где и как держать большую базу данных?

    @lega
    Все равно не достаточно информации, что у вас там в json и как вы используете данные.

    Вот некоторые советы:
    1) Прочитайте про партицирование, возможно вашу колонку ownerID можно вообще выкинуть, и разбить все данные на таблицы owner1, owner2..., таким образом можно сэкономить на индексах и данных, + можно будет проще размазать базу по серверам (шардинг), да и работать так будет быстрее.
    2) Делайте архивирование json, это может уменьшить объем данных в 2..10 раз.
    3) Складывайте старые данные в архив, например месяц прошел, делайте результирующие отчеты, кеши и т.п. что может запросить клиент, а сами данные отправляйте в архив.
    4) Попробуйте другую бд: с postrgresql - можно использовать сжатый json по которому можно сделать индексы, таким образом ваши varchar'ы оптимизируются. с nosql/mongodb тоже есть плюсы, например 1 "запись" будет занимать 1 блок памяти, а не несколько как в sql базах, + тут выше скорость записи.

    Так же по принципу партицирования можно делать чанки данных, например если вам данные нужно выбирать по дням и владельцу, то по окончанию дня можете паковать данные в чанки: data, ownerID, archived_json. таким образом размер индексов может уменьшится в 100 раз, данные в 10..20 раз, + скорость получения данных может вырасти до 50х раз (был у меня подобный проект).

    Этими советами можно 1Тб "превратить" (например) в 10Гб - зависит от данных и использования.
    Ответ написан
    Комментировать
  • Где и как держать большую базу данных?

    shaks
    @shaks
    Загляни в mysql-slow.log, посмотри на тяжелые запросы, подшамань да подкрути их. там 146% есть гайки которые можно подкрутить.
    Пологируй все запросы чуток. Проанализируй каждый из них на ПРАВИЛЬНОЕ использование индексов. Поубирай лишние индексы (освободишь наверное процентов 20-30 пространства). Вобщем оптимизируй. И только если оптимизировать нечего - тогда уже стоит задумываться о шардах.
    Ответ написан
    4 комментария