- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева

Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть таблица MyISAM, 3 млн записей.
Из таблицы делается выбор одной записи таким запросом
SELECT table.* FROM yaca
LEFT JOIN table2 ON table2.pid = table.id
WHERE isnull(table2.pid)
limit 0,1
сразу за получением строки делается запрос
INSERT INTO table2 (pid, update_id, state) и т.д.
затем получают некие данные из внешнего источника
и потом UPDATE table2 SET данные WHERE pid = pid тот что вставляли во втором запросе
Все это работает на парсере в цикле в режиме 200 запросов в минуту, а будет 500-600
Задача - перебрать всю таблицу и вставить соотв. данные во вторую таблицу.
Вроде должно работать так, что этот инсерт по идее, должен для следующей итерации выбирать следующую строку и так до победного, но фиг там, дублей по 5 штук :gm:
Скорость выполнения первого запроса мало отличается от обычного SELECT id FROM table LIMIT 0,1
Вопрос:
Блокируя в InnoDB строку, какие шансы конфликта при большой скорости запросов?
Есть какие-нибудь решения для MyISAM типа эмулятора лока строки?
Вопрос:
Блокируя в InnoDB строку, какие шансы конфликта при большой скорости запросов?
Ноль.
Есть какие-нибудь решения для MyISAM типа эмулятора лока строки?
Нет
вы не могли бы формулировать вопрос или описать, что вам нужно, а не рассказывать печальную историю ваших непонятных экспериментов?
Из кода кое-как понятно, что вам нужна раздача заданий параллельно работающим парсерам ЯК.
сделайте так :
возьмите id программы-обработчика - обычно это pid процесса или потока. Если парсеры запускаются на разных машинах, то нужно сфабриковать уникальный ид для каждой машины.
дальше, учитывая размер таблицы, выгодно согнать пакет заданий в дополнительную табличку и уже по ней выбирать (помечать) задания по одному :
update ... set worker_pid=$pid, status=pending where order by ... limit 1; - эта пометка выполняется полностью атомарно в myisam. последующий выбор этой же записи :
select .. where worker_pid=$pid and status=pending order by ..limit 1;
P of EAA: Optimistic Offline Lock