在过滤数据网格的现有数据时,哪个更有效:
- filtering the existing data collection OR
- querying database with filter clauses发布于 2011-01-28 04:43:22
好了,您已经从数据库中提取了一个数据子集,并将其呈现给了用户。人世间万事大吉。现在,讨厌的用户想要对数据进行进一步的过滤。假设我们不是通过游标之类的方式访问大量数据集,那么数据已经在内存中了。我很想在那里过滤它们。
如果数据没有快速变化,并且存在一定程度的过时的可能性是可以接受的,那么就没有充分的理由返回数据库来提取已有数据的子集。您已经通过网络提取了一次数据,为什么还要再做一次呢?
如果数据确实需要更新,那么忘记我刚才所说的一切,去向DB索要它。
这个想法可能介于数据访问层和数据访问层之间。在这里,您将监视数据年龄,并确保即使用户在几个小时内不断更改相同数据集的筛选,也会从数据库中定期刷新。对过滤数据的请求也应该呈现给这一层,这样你的应用程序就不会察觉到它是实际从内存中获取的,还是只是从内存中获取的。如果你认为其中一种方法(内存或数据库)实际上总是更好的,那么这种关注点的分离将对你继续前进很有帮助,因为你将能够改变底层代码并保持你的应用程序不变。
发布于 2011-01-28 03:18:55
一般而言,对数据库进行过滤更有效率,因为数据库不仅要返回的数据更少,而且通常要处理的数据也更少(例如,它可以使用索引来减少要处理的记录量)。此外,在大多数基础设施中,数据库与客户端不在同一台服务器上,因此还存在返回未过滤数据所涉及的其他资源。一般来说,需要处理的数据越多,在数据库上进行过滤的效率就越高。
但很明显,如果应用程序手头已经有数据库首先必须查询的信息,那么也可能存在使代码/客户端中的过滤更有效的情况。
但所有这些都非常模糊,最终它取决于您的应用程序。如果你说你有一个数据网格,而用户对同一静态数据的过滤器做了很多更改,那么在数据库上过滤将导致数据库服务器上大量不必要的流量和工作负载,而未过滤的缓存在客户端上的数据将提高效率。
发布于 2012-01-08 18:36:52
肯定是在过滤现有的数据集合。
有几个解决方案来过滤现有的DataGridCollection,但在我看来,最好的解决方案是那些只使用标准WPF DataGrid控件的样式,而不发明新的继承DataGird类型或依赖于另一个第三方控件的解决方案。下面是我找到的最好的解决方案:
我个人使用的
https://stackoverflow.com/questions/4819752
复制相似问题