• Почему запрос медленно выполняется MariaDB?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Звездочка * означает что все найденные документы будут физически переданы по сети на клиента.
    Поэтому твои два эксперимента надо расширить. Проверить чем отличались условия с точки зрения
    сети. Куда (как далеко) пердавались эти 1000 документов.
    Ответ написан
    Комментировать
  • Почему запрос медленно выполняется MariaDB?

    @alexalexes
    Очень принципиально по производительности имеет значение количество атрибутов в строке выборки, и есть ли там бинарные типы данных или длинные строки - это именно то, что будет просаживать производительность при попытке сделать большую выборку.
    Если в реальной системе из этой таблицы выбираются сначала "легкие" атрибуты в тысячи записей, а потом по конкретным записям дозапрашиваются "тяжелые" атрибуты (бинарные данные, длинные строки).
    То синтетический тест:
    SELECT * FROM articles LIMIT 1000
    к реальной жизни не будет иметь никакого отношения, потому, что вы выбираете все атрибуты (*), при наличии "тяжелых" атрибутов, в здравом уме никто не будет делать такие большие выборки. Разве что, если это не импорт/экспорт - но это сам по себе процесс затяжной.
    Ответ написан
    Комментировать
  • Как соцсети формируют ленту новостей?

    @romazhan
    Алгоритм выдачи новостей, который может учитывать рекламные посты, слайдеры и приоритеты выдачи, состоит в том, чтобы дать каждому посту некую "весовую" оценку, а затем отсортировать новости по этой оценке.

    Например, вы можете присваивать некий базовый "вес" каждому посту в зависимости от его типа (рекламный пост, слайдер, обычный пост и т.д.). Затем вы можете учитывать дату публикации и присваивать больший вес более свежим постам. Также вы можете учитывать приоритет выдачи и присваивать больший вес постам с большим приоритетом.

    После того как вы присвоите каждому посту "весовую" оценку, вы сможете отсортировать новости по этой оценке, чтобы получить окончательный список новостей в нужном порядке.

    При использовании БД для хранения новостей, вам нужно будет придумать способ присваивания "весовой" оценки новостям. Это может быть сделано, например, через добавление дополнительного столбца в таблице с новостями, где будет храниться "весовая" оценка каждой новости. В зависимости от вашей реализации, эта оценка может быть целым числом, дробным числом или строкой. Например, вы можете создать столбец "priority" типа integer и хранить там целочисленный "вес" каждой новости. Чем больше это число, тем больший приоритет у новости.

    Что на счет алгоритма выдачи "веса"? Это довольно таки трудоемкая задача. Можно использовать разные подходы для формирования приоритета постов. Один из таких подходов - использование алгоритма баллов, который учитывает несколько факторов, таких как:
    • Время публикации: чем новее пост, тем выше его приоритет.
    • Количество лайков, репостов, комментариев: чем больше активности вокруг поста, тем выше его приоритет.
    • Пользователь, опубликовавший пост: если это популярный пользователь, то его посты могут иметь более высокий приоритет.

    Учитывайте эти и другие факторы при расчете баллов для каждого поста. Например, вы можете присвоить баллы следующим образом:
    • Новый пост: +10 баллов
    • Каждый лайк: +1 балл
    • Каждый репост: +3 балла
    • Каждый комментарий: +5 баллов

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

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Просто формализируйте задачу:
    1. лента новостей содержит максимум 30 элементов
    2. есть функция для выдергивания платных постов (видимо их нужно в топе держать, соответственно у вас есть таблица их приоритетов и таблица показав, что бы показывались только четко уплаченное количество раз

    Теперь по реализации.
    1 реализуется тупо в лоб.
    2 это ваша бизнеслогика, но есть ньюанс у вашего обекта есть поле важность.
    3 вы получили допустим 30 новостей + 2 заказных. , отбрасываете 2 обычные новости и выводите этот список. Например проплаченная новость идет 1, потом 3 нормальных и 2 проплаченная
    Ответ написан
    1 комментарий