redreem
29.10.2013 - 12:48
Игорь_Vasinskyможно сделать и "по серъезному"
запилить целый менеджер, обслуживающий айдишники
с контролем целостности и прочего
Игорь_Vasinsky
29.10.2013 - 12:48
Цитата |
лишний запрос? в файле в 100500 раз быстрее. |
если речь идёт о 1 млн пользователей и алгоритме для них?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
redreem
29.10.2013 - 12:51
Игорь_Vasinsky1 млн онлайн?
вопрос требует четких изысканий по возможным сценариям.
для рядового бложка-новостника-каталожика - все нормально.
Подниму пост...
т.к. не могу найти ответ на вопрос, как MYSQL вставляет несколько строк внутрь INNODB, нашел похожую тему на другом форуме там тоже никто не знает.
Вставляя строки, он может пропустить строку из другого коннекта, другого процесса или в этот момент доступ монополен?
p.s. использую транзакции
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
30.10.2013 - 12:51
какая разница тот или другой процесс
$mysqli->insert_id вернёт последний id строки добавленной в этом процессе
но ты то будешь от этого id выше и выше плясать - а в это время там накидают строк.
как ты разделишь строки в таблицы добавленные в твоём процессе и в других?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
Допустим я вставил 10 строк.
Id последней строки 100.
...пока я перегружал страницу вставили еще 50...
итак имеем id_last=100.
Текущий=150, но мне он не интересен.
Я просто беру и от 100 отнимаю 10. Получаю, что первая из 10 вставленных строк имеет id=90.
Не?
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
30.10.2013 - 13:06
ты добавлял 3 строки , я в это время 5 строк
ты
я
я
ты
ты - last insert
я
я
я
забери свои 3 строки - как?
я не в курсе, у меня не было таких задач. хоть id коннекта привязывай в БД
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
30.10.2013 - 13:08
Я отвечу, но не совсем в тему
Если использовать Постгре, то там такой проблемы нету. Все айдишники легко получить сразу же. Даже если они будут идти не подряд - допустим, работают сразу 2 команды вставки (из разных скриптов), то всё равно получим корректные данные. Ну, типа того, как Игорь пример привел - разруливается очень легко и просто.
А в Мускуле... Вставляй по одной строке, наверное?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Игорь_Vasinsky
Вот я о чем и говорю...
Цитата |
другого процесса или в этот момент доступ монополен? |
может такое быть, как ты описал или нет? Или вот так происходит строго
пока
ты
ты
ты - last insert
не закончится
я
я
я
я
я
не произойдет.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Вот здесь прочитал:
http://phpclub.ru/mysql/doc/ansi-diff-transactions.html, что вроде как INSERT в MYSQL атомарен, как бы пока процесс не закончится другой не начнется, но до конца не уверен.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Предлагают применять LOCK TABLES, но мне это не нужно.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата (ABC @ 30.10.2013 - 08:43) |
Вставляя строки, он может пропустить строку из другого коннекта, другого процесса или в этот момент доступ монополен?
|
При обычных настройках последовательность автоинкрементных элементов не нарушается. Нарушить её можно только при режиме innodb_autoinc_lock_mode = 1 или 2, и то при использовании INSERT... SELECT, так как мускул не знает заранее, сколько зарезервировать элементов.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin
Т.е. мульти вставка ну множественный INSERT INTO одним запросом, "заставит" ждать другой такой же запрос, как я понял? Да, вероятно так и должно быть.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Он не заставляет никого ждать. Он просто резервирует количество элементов, если знает заранее. При "мультивставке" знает.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Игорь_Vasinsky
30.10.2013 - 13:22
ABC
я же говорю - я не в курсе - я только предположения высказал
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.