Фильтрация данных - эффективный способ - PullRequest
0 голосов
/ 27 января 2011

При фильтрации существующих данных сетки данных, что более эффективно:

- filtering the existing data collection OR
- querying database with filter clauses

Ответы [ 3 ]

1 голос
/ 27 января 2011

Хорошо, вы вытащили часть данных из базы данных и представили ее пользователю.Все прекрасно в мире.Теперь надоедливый пользователь хочет применить дополнительную фильтрацию к данным.Предполагая, что мы не обращаемся к массивным наборам данных с помощью курсоров и тому подобного, данные уже находятся в памяти.Мне бы очень хотелось их там отфильтровать.

Если данные быстро не меняются и вероятность некоторой степени устаревания приемлема, то нет веских причин возвращаться в базу данных для извлечения.подмножество того, что у вас уже есть.Вы уже перевели данные по проводам один раз, зачем делать это снова.

Если данные действительно нуждаются в обновлении, забудьте все, что я только что сказал, и попросите БД об этом.

Идея, вероятно, находится где-то посередине, которая будет определена вашим уровнем доступа к данным.Здесь вы будете следить за возрастом данных и следить за тем, чтобы, даже если пользователь продолжал изменять фильтрацию одного и того же набора данных в течение нескольких часов, он периодически обновляется из базы данных.Запрос на отфильтрованные данные также должен быть представлен этому слою, чтобы ваше приложение не обращало внимания на то, действительно ли оно выбрано или просто отправлено из памяти.Такое разделение интересов поможет вам двигаться вперед, если вы когда-нибудь решите, что тот или иной подход (память или база данных) на самом деле всегда лучше, поскольку вы сможете изменить базовый код и оставить свое приложение без изменений.

1 голос
/ 27 января 2011

В общем, фильтрация в базе данных более эффективна, потому что база данных не только имеет меньше данных для возврата, но обычно она также имеет меньше данных для транзакции (например, она может использовать индексы для уменьшения количества записей, которые должны быть обработаны) , Кроме того, в большинстве инфраструктур база данных находится не на том же сервере, что и клиент, и поэтому существуют также другие ресурсы, связанные с возвратом нефильтрованных данных. Как правило, чем больше данных необходимо обработать, тем эффективнее будет фильтрация в базе данных.

Но могут также быть обстоятельства, которые делают фильтрацию в коде / клиенте более эффективной, в основном, если приложение уже имеет под рукой информацию, которую база данных должна сначала запросить.

Но все это очень расплывчато, в конце концов это зависит от вашего приложения. Если вы говорите, что у вас есть сетка данных, и пользователь вносит много изменений в фильтры, относящиеся к одним и тем же статическим данным, фильтрация в базе данных приведет к большому количеству ненужного трафика, а рабочая нагрузка на сервер БД, а нефильтрованные кэшированные данные на клиенте увеличат эффективность.

0 голосов
/ 08 января 2012

Определенная фильтрация существующего сбора данных.

Существует несколько решений для фильтрации существующей DataGridCollection, но, на мой взгляд, лучшие решения - это те, которые используют только стили со стандартным элементом управления WPF DataGrid без изобретения нового унаследованного типа DataGird или в зависимости от другого партийный контроль. Ниже приведены лучшие решения, которые я нашел:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...