Спасибо. Реализовал через создания класса формы с набором Q_PROPERTY и затем прокидывания в общий предок для всей формы. По событию на это поле уже яваскриптом каждый отдельный блок формы рассовывает данные из нужных полей по контролам и устанавливает биндинг для автоматического сохранения. При сохранении читаются все поля из метаобъекта и сохраняются в файл.
собственно выборка которая меня интересует происходит без задействования поля parent, поэтому думаю таблица категорий не нужна. Мне нужно вытащить 4 товара и как минимум у одного из них должно быть charity=true. В данный момент (на этапе разработки) решил двумя запросами, позднее планировал замерять производительность запросов которые пришли в голову при описании вопроса. Но мне кажется у этой задачи должно быть более простое решение, чем навороченный юнион или процедура.
Николай Маев: Часть полей вырезал т.к. там около 20 полей для описания вторичных свойств товара. Один товар может принадлежать к более чем одной категории. Внешних связей не определяю, целостность контролирую на уровне приложения.
VZVZ: Конкретно fsync (само название функции) это функция библиотеки libc , а основным "потребителем" этой библиотеки является линукс (а еще андроид и некоторые другие мобильные ОС на базе линукса). Но эту библиотеку можно использовать и на других системах, включая винду.
В целом функции синхронизации обязательно есть во всех современных ОС и языковых библиотеках (libc стандартная библиотека языка Си, для винды и C# это вероятно Microsoft C Run-time Library). В винде такая функция тоже есть, но т.к. я специализируюсь именно на линукс-юникс системах, я не знаю как она там называется.
Низкоуровневые оптимизации - тема очень обширная, вам стоит проанализировать вашу задачу и расставить приоритеты в ней. Тут как нигде актуальна дилемма 90\10 - на первые 90% задачи тратится 10% времени, но на оставшиеся 10% задачи - уходит до 90% всего времени... Если вы задаётесь этим вопросом исходя из повышения собственной квалификации - то это очень хорошо, но если вы решаете конкретную задачу, залезая в эти дебри вы рискуете потратить тонну времени, получив в итоге минимальную выгоду.
VZVZ: Соответственно про синхронизацию в базах данных запрос нужно дополнить названием базы :) Но как правило в современных субд синхронизация включена всегда, это требование ACID.
VZVZ: Когда приложение запрашивает у ФС какой либо элемент, ФС сначала смотрит в свой кэш, а потом, если нужный кэш отсутствует(или текущий устарел), читает с диска и прочитанное так же ложит в кэш. Этот механизм необходим чтобы снизить износ диска когда идет частое обращение к "горячим" данными. Поэтому даже записанное в кэш становится доступно для всех приложений моментально.
Проблема кэша в том, что если между записью в кеш и "сбросом" на диск произойдёт, например, отключение электроэнергии - данные будут потеряны. Вероятность этого весьма мала, т.к. сброс на диск в современных ФС происходит в короткий промежуток времени - от 50 до 500мс в зависимости от настроек, но все равно такая ситуация реальна.
Когда нужен факт физической записи на диск нужно использовать принудительную синхронизацию с диском, но к сожалению в стандартной поставке php не обладает таким функционалом, поэтому использование более низкоуровневых функций не поможет (в них попросту нет вызова fsync). Такой функционал можно добавить только через расширения, например Eio (функция eio_fsync), но это расширение не присутствует в стандартном наборе и потому отсутствует у большинства хостеров.
Почитать о синхронизации ФС можете загуглив фразу fsync - это название стандартной сишной функции из библиотеки libc, которая есть в каждом дистрибутиве linux (в винде может называться чуток по другому). Если нет проблем с английским - вот неплохая статья https://en.wikipedia.org/wiki/Sync_(Unix)
АртемЪ: Согласен, по хорошему в компании должен быть отдел разработки и отдел ит безопасности. Хороший программист != хороший спец по безопасности, но лично мое мнение - профессиональный программист обязан быть хорошим спецом по безопасности(не нужно быть профи, но знать должен много, очень много).
Да, возможно я погорячился с более высокой безопасностью, т.к. говорил о не таком уж и частом случае, когда над проектом работают действительно профи.
Про закрытые проекты не спорю, до сих пор не могу избавиться от ненависти к винде за её дырявые нулевые, да и Flash у всех на слуху. И бэкдоры случаются.
АртемЪ: Поэтому я и написал, что это всего лишь дополнительное препятствие, не более того...
А по поводу заказного проекта - я специально оставил дисклаймер, что это относится лишь к профессиональным исполнителям.
За последние лет 5 мир уже не раз доказывал, что открытая система != надёжная система. Сколько там heartbleed жил в openssl ? А пудель? Количество "глаз" смотрящих в код бесполезное число, пока все эти "глаза" не являются спецами по безопасности. В ядре линукса, в постгресе и других проектах, за которыми стоят убер-профи и то встречаются use-after-free и прочие проблемы "моветоны". Опенсурс - не гарантия более высокой безопасности.
Не пробовал, при следующем зависании попробую, но есть сомнения, т.к. нум-лок, капс и скрол-локи - не работают во время зависания, как и остальные клавиши\сочетания (пробовал Ктрл+Альт+Дел :D ).
@ZoomZoom а разве проблемы с БП не должны приводить к ребуту или полному отключению, а не к зависанию?
@oia у меня ядро скомпилено с опцией panic=3 (щас посмотрел специально), и команда sysctl kernel.panic выводит kernel.panic = 3 и это не помогает... в момент предполагаемого зависания в логах нет вообще ничего, ни одной строки, вообще... отсюда я делаю вывод что зависание скорее всего аппаратное, просто напросто останавливается выполнение команд и ядро даже не имеет возможности среагировать...