Спасибо за свое «фе», но хоть бы подсказал где глаза болят больше всего.
Такие конструктивные комментарии отбивают все желание писать что-либо на хабре.
Привет,
У использования абстракции для импорта данных есть один минус — скорость, часто этот минус больше плюса по простоте реализации.
Время импорта 10 продуктов подобным способом составляет порядка 10 секунд на моём ноутбуке.
Импорт 100k+, 150k+ товаров превращается в кошмар и ужас при каждом обновлении.
И еще если кеш очистится из-за какого-то чудо-кода модуля и начинает тормозить фронт…
Самый надежный способ на практике:
1. Загрузка данных в транзитную transit_flat табличку тупеньким скриптиком.
2. Создаем товар создав строчки в «catalog_product_entity», «catalog_product_entity_int» для атрибутов visibility, status, tax_class.
3. catalog_category_product для привязки к категории, catalog_product_website для привязки к магазину.
4. И для каждого нужного атрибута:
Insert into catalog_product_entity{_int|_varchar|_text} from… transit.field_x as value select transit_flat transit inner join catalog_product_entity as cpe ON… on duplicate update…
5. Для склада все просто: все всегда лежит в «cataloginventory_stock_item», можно «cataloginventory_stock_status» обновить сразу и не ждать индексатора.
Описанный выше метод работает быстро так как все операции происходят в памяти базы данных mysql: search using index — O(log(N)), full scan — O(N), insert — O(1).
10-20 минут для каталога, который некоторые считают огромным, хватает.
Прошу прощения, что так сжато.
Надеюсь найдется время договориться по NDA, подготовить «консерву» быстрого импорта.
Коллега, мы (все IT) решаем одну единственную задачу, но разными способами.
Уменьшить затраты времени для человека. Точное выражение которой:
T = посетители*(время загрузки)+(время сжатия)+(время интеграции решения)
Если использовать ваш «молоток», то время интеграции решения с обработкой всех ссылок на картинки и его поддержка может обойтись дороже, чем «топор» обработки Accept.
Я просто вкрутил это дело в свое время за часов 20 от идеи до боевого.
Pagespeed, который работает как ваш молоток, жрет немало памяти и медленней отдает html из-за отсутствующей картинки. Использовал сам.
Если все запросы за картинками идут простыми GET запросами.
Простой запрос GET, простой ответ, в зависимости от заголовка.
Хром и все приличные браузеры добавляют заголовок Accept:… image/webp…
Что сомнительного если браузер получит ответ с заголовком Content-Type: image/webp и WebP картинкой внутри?
Не глядя на User-Agent, просто по Accept заголовку, по факту оказывается вполне достаточно.
Браузеру важен какой Content-Type, он доступен по ссылке *.png или *.jpg значения не имеет.
И не тратит такие ценные миллисекунды на обработку html.
Уже полгода перехватываю и Accept: image/webp и подменяю картинки на месте.
Никаких проблем и жизнь прекрасна, только Content-Type в ответе нужно указать image/webp.
И никаких правок в html, забыли про пункт «оптимизируй картинки» совсем.
Коллеги, а Математиков которые знают что такое O(N) и O(M*N) не пробовали выводить?
Одного курса по сложности аглогитмов хватит все остальное — технические инструменты.
И никакая магистратура не нужна, просто увеличиваем N.
Ребята прекрасно пинимают, что это — фундамент на котором работают как гиганты так и встраиваемы системы.
Еще лучше, уже идем в нужном нарпавлении.
Как получить сообщение о фактической оплате сразу после оплаты?
Продавцу нужно будет еще какую-то кнопку нажимать уже после оплаты.
Коллега, IT чаще всего решает задачу оптимизации времени.
Для данного случая: Задача
Mаксимально быстро и дешево открыть точку самовывоза/покупки товара, для интернет-магазина. Все акции и программы лояльности должны быть сквозными по умолчанию.
Найти самый быстрый путь для данных от БД магазина до терминала и принтера чеков. Решение
Использовать custom scheme для передачи необходимых данных для приема оплаты, печати чека в приложения на устройствах iOS и Android и попросить поставщиков касс/терминалов сделать такие API в приложениях. Ожидаемый результат
Это должно уменьшить к-во часов инженеров на интеграции, уменьшить время запуска новой точки продаж, уменьшить стоимость поддержки на местах. Может и отрыть двери для построения розничных сетей под крышами Интернет-магазинов.
Срезали 150ms инициализации системы.
Так держать.
Такие конструктивные комментарии отбивают все желание писать что-либо на хабре.
Если хочется почитать дело — оригинал.
У использования абстракции для импорта данных есть один минус — скорость, часто этот минус больше плюса по простоте реализации.
Импорт 100k+, 150k+ товаров превращается в кошмар и ужас при каждом обновлении.
И еще если кеш очистится из-за какого-то чудо-кода модуля и начинает тормозить фронт…
Самый надежный способ на практике:
1. Загрузка данных в транзитную transit_flat табличку тупеньким скриптиком.
2. Создаем товар создав строчки в «catalog_product_entity», «catalog_product_entity_int» для атрибутов visibility, status, tax_class.
3. catalog_category_product для привязки к категории, catalog_product_website для привязки к магазину.
4. И для каждого нужного атрибута:
Insert into catalog_product_entity{_int|_varchar|_text} from… transit.field_x as value select transit_flat transit inner join catalog_product_entity as cpe ON… on duplicate update…
5. Для склада все просто: все всегда лежит в «cataloginventory_stock_item», можно «cataloginventory_stock_status» обновить сразу и не ждать индексатора.
Описанный выше метод работает быстро так как все операции происходят в памяти базы данных mysql: search using index — O(log(N)), full scan — O(N), insert — O(1).
10-20 минут для каталога, который некоторые считают огромным, хватает.
Прошу прощения, что так сжато.
Надеюсь найдется время договориться по NDA, подготовить «консерву» быстрого импорта.
Так даже pagespeed умеет, рекомендую для начала.
Уменьшить затраты времени для человека. Точное выражение которой:
T = посетители*(время загрузки)+(время сжатия)+(время интеграции решения)
Если использовать ваш «молоток», то время интеграции решения с обработкой всех ссылок на картинки и его поддержка может обойтись дороже, чем «топор» обработки Accept.
Я просто вкрутил это дело в свое время за часов 20 от идеи до боевого.
Pagespeed, который работает как ваш молоток, жрет немало памяти и медленней отдает html из-за отсутствующей картинки. Использовал сам.
Простой запрос GET, простой ответ, в зависимости от заголовка.
Хром и все приличные браузеры добавляют заголовок Accept:… image/webp…
Что сомнительного если браузер получит ответ с заголовком Content-Type: image/webp и WebP картинкой внутри?
Браузеру важен какой Content-Type, он доступен по ссылке *.png или *.jpg значения не имеет.
И не тратит такие ценные миллисекунды на обработку html.
Никаких проблем и жизнь прекрасна, только Content-Type в ответе нужно указать image/webp.
И никаких правок в html, забыли про пункт «оптимизируй картинки» совсем.
Поздарваляю :)
Не важно у кого на каком курсе.
Важно, что архитектор должен понимать куда какие потоки данных куда текут.
Одного курса по сложности аглогитмов хватит все остальное — технические инструменты.
И никакая магистратура не нужна, просто увеличиваем N.
Ребята прекрасно пинимают, что это — фундамент на котором работают как гиганты так и встраиваемы системы.
Code Contribution Day, синхронно с Венецией.
Все ТУТ
Как получить сообщение о фактической оплате сразу после оплаты?
Продавцу нужно будет еще какую-то кнопку нажимать уже после оплаты.
Для данного случая:
Задача
Mаксимально быстро и дешево открыть точку самовывоза/покупки товара, для интернет-магазина. Все акции и программы лояльности должны быть сквозными по умолчанию.
Найти самый быстрый путь для данных от БД магазина до терминала и принтера чеков.
Решение
Использовать custom scheme для передачи необходимых данных для приема оплаты, печати чека в приложения на устройствах iOS и Android и попросить поставщиков касс/терминалов сделать такие API в приложениях.
Ожидаемый результат
Это должно уменьшить к-во часов инженеров на интеграции, уменьшить время запуска новой точки продаж, уменьшить стоимость поддержки на местах. Может и отрыть двери для построения розничных сетей под крышами Интернет-магазинов.
Подключали PinPad.
Чтоб было больше уверенности у покупателя.
Все один в один c Терминалом 2Can / Яндекс mPOS
Если сравнить с: