实现带有数据库、客户端和后端的列表的延迟加载

Posted

技术标签:

【中文标题】实现带有数据库、客户端和后端的列表的延迟加载【英文标题】:Implementation of lazy loading for lists with DB, client and backend 【发布时间】:2016-11-21 12:30:53 【问题描述】:

我有一个更普遍的问题,关于如何在我的项目中为列表、网格等实现延迟加载。我的问题不是关于特定的框架或语言,因为我使用 C#、java、android 开发不同的项目类型, winform等。

我的问题是,如何在 RESTful 环境中实现这种延迟加载模式?

例如,我有一个包含大约 2 个 mio 数据集的数据库。用户在客户端选择一些过滤器,服务器响应大约 100.000 条记录。展示它们的内容太多了,在列表控件中“加载和呈现”项目的时间需要几分钟(在糟糕的日子里)。更好的方法是向用户显示前 200 个项目,并根据需要加载下一个块。

另一个例子是在移动设备上搜索图像。如果搜索结果约为 10.000,则用于加载图像的移动流量将呈爆炸式增长。因此最好显示最多 20 个条目,例如,如果用户滚动到底部,则加载接下来的 20 个。

那么,我怎样才能在后端/数据库/客户端存档呢?不幸的是,我无法查询“从表中选择 200 到 400 ...”。

在一些外部 API 上,我可以发送一个“页面令牌”来获取下一个项目块。但是我怎么知道用户要求哪个“页面”?

我尝试过的一个不好的方法是在每个请求中加载整个集合(第一个示例中的 100.000 条记录),并且只提供需要的部分。但是当客户端数量增加并且每分钟有 10.000 个客户端执行此操作时,这是非常浪费资源的。

【问题讨论】:

【参考方案1】:

您可以为此使用分页。例如,客户端请求 x 条目的第一页,因此服务器将只从数据库中获取它(参见 LINQ 的 skip/take):

DB.Skip(pageNumber * pageSize).Take(pageSize);

客户端可以毫无问题地更改过滤器、pageNumber(“下一页”)或 pageSize。

【讨论】:

以上是关于实现带有数据库、客户端和后端的列表的延迟加载的主要内容,如果未能解决你的问题,请参考以下文章

延迟来自客户端的并发请求,直到创建 HttpSession

MyBatis专题-延迟加载

如何处理 angular2 延迟加载路由失败

Jpa/Hibernate 字节码增强:字段延迟加载

具有延迟加载、过滤和排序的 jsf 数据表

如何使用 mongodb 数据延迟加载角度