感谢耐心的回复.
LeanEngine是云端的引擎这点我是知道的,其实我是想知道代码在云端执行的时候,操作数据调用的是javaScript SDK的API,这时他的底层是不是跟前端一样通过网络请求来访问数据?
代码在云端执行,数据库也在云端,那么他们为什么还要通过网络请求来操作呢?

是一样的 因为 rest api 是我们后端唯一的接口,任何的操作包括 sdk 最终都是通过 rest api 完成的。

点赞功能我也有点困扰。如果用云引擎返回数据,缓存就不好做了吧

如果要显示点赞用户列表 array 没法分页 和根据点赞时间排序吧

如果有分页与排序需求,建议单独存成 Like 表。

恩 单独一个表就是有一个问题 列表中判断当前用户是否点赞...并且不是每个post请求一个API去判断

1 人赞了这个帖子.

可以找我们给 Like 表添加联合唯一索引,然后在 Like 的 afterSave hook 里给 Post +1

把 Like 信息冗余到 Post 里,Post 保存一份「likedUsers」数组,新增 Like 记录的时候同时往 Post 更新这个数组。

cc @z11

哦 知道了,谢谢 ghost

谢谢,这个方法前期是可以的
不过还有个疑问,一个 明星的动态列表 往往每个动态都是几百个点赞 甚至几千个点赞
这种情况 请问是怎么实现的?

Like 表用于在 Post 详情页(分页、排序地)显示点赞列表。

Post 的 likedUsers 与 likedUsersNumber 数据是冗余的,用于在 Post 列表页显示数据,这部分数据不需要完整,比如 likedUsers 只需要保存最近的 20 个就够了。

此外,还可以使用我们的 LeanCache redis 服务,来保存 Post 完整的 likedUsers 数据。

按照目前的方案数据存储两个地方
like表数据用来显示
array数据用来判断 一个列表 当前用户是否点赞 便利循环array里面是否存在当前用户id
这样的便利数据在 明星列表中的动态就不行了吧,因为每个动态的array 数据是巨大的

显示没有问题,现在的疑问就一个...

就在 array数据巨大的时候 ,一个列表中如何判断 哪些动态点赞哪些没点赞

判断 一个列表 当前用户是否点赞

这个需求可以构建一个 Like 查询,user == currentUser && post in postList。

如果索引合适,这个查询成本不高。

这样还是一个列表每一条数据都请求API了哦

这样一个列表只有一次查询,user == currentUser && post in postList 这个查询的结果是一个列表。

使用CQL是吧? 这个功能我还没用过, 好的, 我去试试。 谢谢

不需要用到 CQL,是可以有 in 查询的,拿 js sdk 举例:

new AV.Query('Like')
  .equalTo('user', user)
  .containedIn('post', postList)
  .find();
1 人赞了这个帖子.

恩 那太好了

做的时候想到个问题,这样查询得到的是 Like 表里该用户的 postList 对应的数据
那不是直接 where userId 可以得到一样的结果

where userId 会查到所有该用户的点赞记录,可能会很多,事实上你的需求只需要匹配当前列表就够了。