Собственно задача
Допустим два пользователя просматривают данные большой таблицы. и один из них редактирует запись. после коммита, приложение второго получает уведомление от БД(Firebird), что в таблице X произошли изменения. Уведомление
не может содержать идентификатора записи. Второму приложению надо бы обновить данные в модели, чтобы пользователь видел актуальную информацию.
Реселектить модель каждый раз не хочется - накладно да и не удобно для пользователя.
Можно попробовать получить id измененной записи обходными путями и проапдейтить только ее в модели. Но, т.к. записи грузятся в кеш частями, записи может еще не быть в модели. А к тому моменту как второй пользователь до нее доползет, из базы выберется старая копия, т.к. бд версионная. fetchMore() тоже не выход т.к. таблица может оказаться большой.
Можно делать селект только идентификаторов и подгружать те записи из БД которые в данный момент на экране. Количество обращений к базе растет, но выборка идет по первичному ключу, т.е. оч. быстро. Не очень понятно стоит ли выносить выборку нужных записей в отдельный поток или нет. Если да - то встает вопрос синхронизации при частых дерганиях скроллбара.
Как вы обновляли данные в таких случаях? покажите свой велосипед
если коротко -
нужна логика когда и как обновлять модельРеселектов модели конечно не избежать полностью, но можно попытаться сократить их количество. Может быть вы знаете как это все работает например в .net. Я нашел старую статью про BDE
http://www.ibase.ru/devinfo/bde.htm, вроде как их живой кеш рефрешит данные которые в данный момент на экране.