{"data":{"markdownRemark":{"frontmatter":{"title":"Массовое обновление данных в бд на laravel/lumen (innoDB)","date":"21 January 2016","path":"/massovoe-obnovlenie-dannyh-v-laravel/","author":null,"excerpt":"Статья,о том как обновлять кучу данных в MySql за небольшое время и с небольшими нагрузками.","tags":["Laravel","Lumen","MySQL","PHP"],"coverImage":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAMABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMFAv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAF2ojKoEkT/xAAaEAACAgMAAAAAAAAAAAAAAAAAAhETARIh/9oACAEBAAEFAsNyRmWbGLW0tY//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAwEBPwGn/8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQIBAT8Bh//EAB0QAAECBwAAAAAAAAAAAAAAAAABEQIQISIxYeH/2gAIAQEABj8CyxcViRJPs4f/xAAcEAEAAgMAAwAAAAAAAAAAAAABACERMUFhgZH/2gAIAQEAAT8h0BL1UUFkzvHY2yQDT5muwNK5FXKnxP/aAAwDAQACAAMAAAAQQP8A/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8QK//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/ECP/xAAeEAEAAQQCAwAAAAAAAAAAAAABEQAhMVFBcWGhwf/aAAgBAQABPxCJg0F5CsRfc+qsEwRBpl3ebUKY5hnEzx3Q0Qi4cbDvmllJ0ExBJtp85pmiuZT5X//Z","aspectRatio":1.6744186046511629,"src":"/static/ac5ee1b18d1ac573d4acf7c809eaefb8/b4295/photo-1526978000081-e4a67d225813.jpg","srcSet":"/static/ac5ee1b18d1ac573d4acf7c809eaefb8/127d5/photo-1526978000081-e4a67d225813.jpg 200w,\n/static/ac5ee1b18d1ac573d4acf7c809eaefb8/7ef6a/photo-1526978000081-e4a67d225813.jpg 400w,\n/static/ac5ee1b18d1ac573d4acf7c809eaefb8/b4295/photo-1526978000081-e4a67d225813.jpg 800w,\n/static/ac5ee1b18d1ac573d4acf7c809eaefb8/487eb/photo-1526978000081-e4a67d225813.jpg 1080w","sizes":"(max-width: 800px) 100vw, 800px"}}}},"id":"b3dd992f-ff1a-5653-9eb7-2e1a40856b4c","html":"<p>Суть проста, если нужно обновлять много данных, то просто заключите часть запросов в транзакции.</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">    <span class=\"token comment\">// Получаем данные, к примеру из базы</span>\n    <span class=\"token variable\">$data</span> <span class=\"token operator\">=</span> <span class=\"token constant\">DB</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">table</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'users'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token variable\">$counter</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">foreach</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$data</span> <span class=\"token keyword\">as</span> <span class=\"token variable\">$value</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Если счётчик в 0, то стартуем транзакцию</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$counter</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n            <span class=\"token constant\">DB</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">beginTransaction</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token variable\">$counter</span><span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n    \n        <span class=\"token comment\">// Выполняем какие-то действия</span>\n        <span class=\"token variable\">$type</span> <span class=\"token operator\">=</span> <span class=\"token variable\">$value</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token property\">type</span> <span class=\"token operator\">===</span> <span class=\"token number\">2</span><span class=\"token operator\">?</span><span class=\"token number\">5</span><span class=\"token punctuation\">:</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    \n        <span class=\"token comment\">// Обновляем данные</span>\n        <span class=\"token constant\">DB</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">table</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'users'</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">where</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'id'</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$value</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token property\">id</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token operator\">></span><span class=\"token function\">update</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">array</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'type'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token variable\">$type</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n        <span class=\"token comment\">// Счётчик достиг нужного порога - коммитим изменения в DB</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$counter</span> <span class=\"token operator\">>=</span> <span class=\"token number\">999</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token constant\">DB</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">commit</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token variable\">$counter</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token comment\">// Снова коммит для оставшихся</span>\n    <span class=\"token constant\">DB</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">commit</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Таким способом обновление данных займёт гораздо меньше времени.</p>","excerpt":"Суть проста, если нужно обновлять много данных, то просто заключите часть запросов в транзакции. Таким способом обновление данных займёт…"}},"pageContext":{"isCreatedByStatefulCreatePages":false,"type":"posts","next":{"frontmatter":{"path":"/syuriken-blender/","title":"Сюрикен. Blender","tags":["Blender","Идутвук"]},"fileAbsolutePath":"/srv/www/softroot.ru/src/posts/2016-01-20-syuriken-blender.md"},"previous":{"frontmatter":{"path":"/kak-to-zimoy-tumannym-utrom-blender/","title":"Как то зимой туманным утром. Blender","tags":["Blender","Идутвук"]},"fileAbsolutePath":"/srv/www/softroot.ru/src/posts/2016-01-23-kak-to-zimoy-tumannym-utrom-blender.md"}}}