Виртуализация данных и пользовательский параллелизм

Есть ли у кого-нибудь указания / примеры, как решить многие проблемы, которые возможны в многопользовательских сценариях при использовании виртуализации данных. Допустим, речь идет о WPF и DataGrid. Реализация виртуальной коллекции, которая загружается по требованию, не так уж сложна. Однако без промежуточной области, в которой хранятся временные результаты исходного запроса, мы сталкиваемся с такими проблемами, как:

  1. Загрузка новой страницы может привести к получению неверных данных (одновременный пользователь добавляет и удаляет некоторые записи, что приводит к тому же общему количеству записей, но в результате страницы извлекают дубликаты записей, которые уже отображаются где-то выше в сетке)
  2. Сохранение выбора пользователя в сетке при прокрутке и загрузке новых страниц, при которой может быть вероятность того, что после того, как выбранные элементы истекли из кэша и после перезагрузки, мы обнаружим, что кто-то их удалил. Мы можем отменить выбор всего и показать сообщение пользователю, но:/ Кроме того, если вы выбираете с помощью Shift-click (множественный выбор) где-то ближе к концу списка, что нужно делать, когда некоторые элементы "появляются" в середине списка при загрузке некоторых средних страниц (одновременно добавленные пользователем элементы).

1 ответ

Полезно иметь в виду, что на экране вашего пользователя ничего технически не актуально. В тот момент, когда вы показываете это, вы отстаете от основного набора данных.

1) Да, конечно. Но вы всегда можете отследить первую запись, которую вы показываете в своей сетке, и получить оттуда размер следующей страницы. Те, которые будут удалены, будут, конечно, не видны. При желании вы можете попробовать использовать библиотеку, такую ​​как ZeroMQ или RabbitMQ, и изменить широковещательный набор данных и обновить свою сетку данных в реальном времени, если они отображаются в данный момент. Это все еще не будет идеально синхронизировано, но вы уменьшите окно, в котором они не будут синхронизированы.

2) Когда вы выбрали элементы, вы отслеживаете их первичные ключи. Я не знаю, что вы хотите сделать с теми, которые уже удалены из основного набора. Но вы всегда можете действовать на всех остальных, верно? Даже если они больше не отображаются, вы можете отслеживать PK. И повторно выберите их при загрузке страницы.

Другие вопросы по тегам