处理web api和odata中的大型数据集

ama*_*eur 5 c# asp.net rest odata asp.net-web-api

最近几周我一直在使用asp.net web api取得了巨大的成功.它真的帮助我为移动客户端生成一个界面,以便通过http进行编程.

我达到了需要一些帮助的地步.

我有一个新的端点,它可以是一个数据库,可以返回100K的结果.我正在使用OData过滤数据并返回一组分页的数据.

由于多重请求可能会发生这种情况,我对性能感到担忧.每次从数据库返回100K记录并不理想.所以我有一些想法.

第一个是缓存100K结果,让OData每次都做到这一点.我正在使用AppFabric分布式缓存作为其负载平衡环境.然而,在AppFabric中缓存如此大量的数据可能会导致内存并发症,所以我认为最好避免这种情况.

接下来的选择是忘记OData的神奇之处,并将我使用的过滤器发送到数据库,每次只返回所需的数据.所以换句话说,每次都要点击数据库.

我可以看一下使用缓存处理程序,如本文中概述的版本缓存在http缓存中 - > http://byterot.blogspot.ie/2012/06/aspnet-web-api-caching-handler.html缺点这是因为如果数据通过另一个系统更新,则缓存的数据不会过期.

关于我如何处理这种情况的任何其他提示,大量数据,使用odata与web api一起过滤?

小智 2

假设您使用实体框架,直接返回 EF 的 IQueryable 是最佳选择。这样,OData 的魔力将直接作用于您的数据库。$limit 和 $take 将直接映射到您的 SQL 查询。