- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Задача такова:
Есть две таблицы table1 и table2. Строки в этих таблицах имеют уникальные индексы, соответственно id1 и id2 (остальные данные в таблицах не имеют значения к вопросу). Количество записей в таблицах от 100 000.
Есть индексная таблица index в которую занесены попарные связи элементов из table1 и table2 то есть просто пары из id1 и id2. Количество записей в этой таблице от 10 000 000, то есть в среднем на один элемент из table1 или table2 приходится по 100 таких связей, это в среднем, так где-то от 10 до 10000.
Собственно вычислительная задача: Приходит новый элемент из table1 и информация о связях его с элементами и table2. Требуется запустить выборку по таблице index и найти те элементы из таблицы table1 у которых совпадет наибольшее количество связей с новым элементом. То есть строго говоря, нужно для каждого элемента из table1 посчитать количество совпадающих связей с новым элементом, и отобрать те, у которых количество наибольшее. Хотя для решения задачи не нужно найти все, нужно найти несколько с наибольшим количеством совпадений. Несколько это 3-10.
Вопрос состоит на данный момент в том, на каком движке баз данных это правильнее всего делать. Ограничение только одно: ОС Debian. Пока что попробовал на MySQL MyISAM и innoDB. innoDB работает гораздо медленнее (может я правда что-то не так оптимизировал), а MyISAM дохнет, если вторая задача приходит до того, как посчиталась предыдущая.
Буду благодарен за любые советы по оптимизации данной задачи.
попробуйте сделать в index не такое соответствие
tab1[3]->tab2[8]
tab1[3]->tab2[234]
а такое
это в разы уменьшит объем index
Ragnarok добавил 22.04.2011 в 14:42
Требуется запустить выборку по таблице index и найти те элементы из таблицы table1 у которых совпадет наибольшее количество связей с новым элементом. То есть строго говоря, нужно для каждого элемента из table1 посчитать количество совпадающих связей с новым элементом, и отобрать те, у которых количество наибольшее. Хотя для решения задачи не нужно найти все, нужно найти несколько с наибольшим количеством совпадений. Несколько это 3-10.
а ещё можно заранее высчитать вхождения и завести под них отдельную таблицу. в добавляющих/обновляющих скриптах соответственно тоже добавить обновление новой таблицы