分页算法实现辅助

时间:2016-05-21 21:24:12

标签: algorithm api implementation

我正在编写分页算法,但我对最佳实现方式感到困惑。我已阅读有关使用Offset的文章以及发布新内容时的问题。替代方案是使用搜索方法

那我到底想要完成什么呢?我相信你们中的一些人可能听说过Tinder。当您加载应用程序时,会出现一组卡片。这些卡片中充满了您可能喜欢或不喜欢的其他用户的信息。我假设一个简单的查询有一个限制来检索用户是为第一次调用完成的。但是,在用户滑动几次后,该应用程序会拨打越来越多的电话。我想做类似的事情。这是我目前的设置。

APP的Psuedo代码:

1) Lets say I have choose to load 10 cards initially.
2) User keeps swiping 
3) When a user has 3 more cards left my app makes another call to the API and gets 10 more cards.
4) Repeat from step 2.

我遇到的一些问题是API方面的逻辑(不是应用程序端)。

1) User started the app and the API fetched initial 10 cards. When it comes
time for step 3, just making another call based on whom the user has
liked/disliked can load duplicates of the remaining 3 cards
2) If I choose to use offset, new users will mess up the pagination as a 
duplicate will be loaded.

我认为我的第一个解决方案是拥有一个临时表来存储用户已加载的内容。一旦用户喜欢/不喜欢某个人,该条目就会从该表中删除。这个逻辑的问题在于,假设用户最初加载10张卡片,然后仅刷卡5张并离开应用程序。现在我有5个用户存储在临时表中,不会为用户加载,因为它已经加载并且没有任何操作。另外还有额外的开销。

所以我的问题是什么是创建API的最佳方法,它允许我加载卡而不重复。我不认为一次加载一个是非常有效的(对服务器的调用太多)。最后一点:我不是直接从用户表中获取。我正在接受用户然后将它们放入算法中。该算法吐出一组10个用户。

如果你通过这篇长篇文章,我道歉。我只是想让你知道我真诚地试图想出一个解决方案,只需要一点推力。

2 个答案:

答案 0 :(得分:1)

  

我认为我的第一个解决方案是拥有一个临时表   存储用户已加载的内容。一旦用户喜欢/不喜欢   人,该条目从该表中删除。 这个问题   逻辑是,假设用户最初加载10张卡,然后滑动   只有5和 离开应用 现在我有5个用户存储在临时   不会为用户加载的表,因为它已经存在   加载并且没有任何操作。另外还有额外的开销

我想在您当前的方法问题中强调“离开应用”和“并且没有任何操作”。

如果您在用户离开应用时实际执行某些操作,该怎么办?

我的意思是,你可以删除(从临时表中)那5个他没有看到的剩余临时记录以避免这个问题吗?

通过阅读所有描述,您似乎可以通过这样做来解决它。

我希望这会有所帮助。

答案 1 :(得分:0)

我认为这可以在SQL sevel上更容易解决,例如(伪SQL)

create table user (PK ID id, VARCHAR(20) name, etc)

create table like (ID source FK user$id, ID target FK user$id, bool liked)

-- my current app user is id=5453
select top 10 
from user 
where id not in (select id 
                 from like 
                 where source=5453) 

您选择了来源未见过的前10位用户。每当他看到喜欢/不喜欢的目标时,就会添加一个新行。最好发送10个类似的结果,然后在请求下一个10的同一API调用中批量插入这10行。如果你想要更积极的缓存,那么你需要在App端进行过滤。