2011-01-27 4 views
0

Хотя фильтрация существующих данных по сетке данных, что является более эффективным:Фильтрация DataGrid - эффективный способ

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

Это зависит от того, сколько данных, насколько близко данные (такие же машина, тот же сегмент ЛВС, тот же WAN, другая сторона мира более дюжины перелетов), и фильтр будет больше * больше * данных, а не меньше. – Lazarus

+0

@ Lazarus: фильтр принесет меньше данных, всегда – WhoIsNinja

ответ

1

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

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

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

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

1

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

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

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

0

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

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

Смежные вопросы