Задать вопрос
Ответы пользователя по тегу SQL
  • MySQL запрос, как?

    Stdit
    @Stdit
    Если все запросы к статистике заранее известны, может быть полезна предварительная агрегация путем денормализации на триггерах. К примеру, таблице page_stat назначить триггер after insert, который заносит запись в таблицу page_uid (page, uid), если такая там ещё не имеется. Запрашивать page_uid будет уже полегче, хотя всё равно потребуется пересчёт. Чтобы избежать и его в том числе, можно и на эту таблицу поставить триггер after insert, который в случае появления новой записи инкрементирует счетчик конкретной страницы в третьей таблице page_uniques_count (page, count). Те данные, что уже есть в базе, надо будет перед активацией триггеров соответственно прогнать запросом и занести в служебные таблицы. Ситуация осложняется введением запросов на количество уников за определенный (не произвольный) период времени (например, за день, месяц). Это реально организовать соответствующим образом, добавив в служебные таблицы дату, округленную до нужного интервала. Для каждого такого интервала может потребоваться отдельная таблица-счетчик, но более крупные интервалы можно получить из мелких (например, по месецам из ежедневной) путем классической агрегации через group by, которая в этом случае будет работать значительно быстрее, чем с сырыми данными из page_stat.
    Ответ написан
    1 комментарий
  • Агрегация статистики в SQL-хранилище?

    Stdit
    @Stdit
    Вариант с map-reduce — не факт, что будет более быстродействующим решением. Поможет денормализация. Чтобы избежать агрегации на каждом запросе статистики, и ударных нагрузок на процессор и память во время таких запросов, логично во время занесения каждой очередной записи увеличивать счетчики, находящиеся в специальных таблицах. Для этого на вставку можно поставить триггер, инкрементирующий нужный счетчик (счетчик текущего часа, счетчик текущего дня). Разумеется, под каждую форму статистического запроса потребуется отдельный счетчик.
    Ответ написан
    1 комментарий
  • Как определить какой SQL запрос тормозит на сервере

    Stdit
    @Stdit
    У многих субд существует специальный лог для медленных запросов.
    Ответ написан
    Комментировать
  • Redis vs SQLite vs PostgreSQL

    Stdit
    @Stdit
    Помимо РСУБД, мы используем MongoDB. Замечательная и быстрая штука, которая позволяет хранить коллекции из деревьев любой формы, строить индексы по любым их узлам, легко масштабируется горизонтально, имеет довольно мощную систему запросов на чтение и обновление. Недостаток — отсутствие джойнов, проблемы с агрегацией, они решаются путём предварительной агрегации при изменении данных или переучётом по крону.
    Ответ написан
    9 комментариев
  • Чем заменить медленный запрос с LIKE?

    Stdit
    @Stdit
    Ответ написан
    Комментировать
  • Почему NOSQL БД становятся популярными?

    Stdit
    @Stdit
    К примеру, многие разработчики предпочитают ORM (Object-relational mapping). NoSQL база (не любая, конечно) предоставляет нативный интерфейс для этой модели, ликвидируя осложнения от реляционной прослойки. В том числе для объектов с нефиксированным набором свойств. Из-за этого упрощается приложение, увеличивается производительность и облегчается шардинг. Естественно, NoSQL не является абсолютной панацеей и заменой SQL, но в некоторых решениях имеет более высокую эффективность и удобство, поэтому и находит там своё применение.
    Ответ написан
    Комментировать