嵌套数组(属性)上的分页

编程入门 行业动态 更新时间:2024-10-25 15:33:44
本文介绍了嵌套数组(属性)上的分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试遵循社交网络的NoSQL数据库模型中的"一张表"原则。但这给我带来了很多问题。假设我现在的模型是这样的:

Table-Groups { name: "Group1" topics: [ name: "Topic1" posts: [ { id: "tid1" author: "Walter White" message: "Hello from Post1" comments: [ { id: "cid1" author: "Jessy" message: "Yo nice post Mr. White" } { id: "cid2" author: "Saul" message: "Jeze Walt" } ] } //... Many other posts here ] //... Many other topics within the group ] } //... Not so many other groups

我可以对帖子或评论数组进行分页吗? 因为我(理论上)在POST数组中会有很多帖子,所以我必须阅读大量数据,而实际上我只想阅读最近的10篇帖子。POST中的数组注释也是如此。是否可以对这些数组进行分页?

我可以将主题数组中的属性"name"用作sortKey吗?(topic.name) 有没有办法将嵌套数组的属性用作排序关键字?在我的示例中,一个组中有许多主题。因此,使用主题名称作为排序关键字(如果我被允许拆分表,甚至使用分区关键字)是有意义的。

我有一种感觉,我应该至少将表格一分为二。这样,我就可以使用topicname作为分区键,使用组名作为排序键。但是我是NoSQL DBS的新手,我学到的是您应该只使用一个表。你的意见是什么?

推荐答案

我可以对帖子或评论数组进行分页吗?

没有。您的模型有一个名为Group的项目。当您的服务器运行GetItem时,将为您返回所有主题,并且在主题内还将返回所有评论。

您的模型中还有另一个大问题:您的组可能会无限增加,而DynamoDB项的最大大小是400KB。检查this docs:

"DynamoDB中的最大项大小为400 KB,其中既包括属性名称二进制长度(UTF-8长度),也包括属性值长度(同样是二进制长度)。属性名称计入大小限制。"

换句话说,有时您将无法保存更多主题或帖子。

我可以将主题数组中的属性"name"用作sortKey吗?(topic.name)

没有。选中此docs。它声明:"每个主键属性必须是标量(即它只能容纳单个值)。主键属性只允许使用字符串、数字或二进制数据类型。其他非键属性没有这样的限制。"

我有一种感觉,我应该把桌子至少一分为二。这样,我就可以使用topicname作为分区键,使用组名作为排序键。

我认为你不应该分成两张桌子。您可以这样对DynamoDB建模,并且只保留一个表:

  • 在您的表中使用hashKey和sortKey。

  • 按如下方式保存您的组项目:

    • HashKey:Group(字符串group,不是变量)
    • sortKey:groupId
    • 名称:groupName
  • 以此方式保存您的主题项目:

    • HashKey:groupId
    • sortKey:topicId
    • 名称:topicName
  • 按如下方式保存您的帖子项目:

    • HashKey:topicId
    • sortKey:postId
    • 作者:author
    • 消息:message
  • 以此方式保存评论项目:

    • HashKey:postId
    • sortKey:commentId
    • 作者:author
    • 消息:message
  • 这样,如果您要检索单个项目,您可以使用完整密钥hashKey和rangeKey运行一个GetItem。

    相反,如果您希望使用分页进行查询,则只需在查询中提供hashKey,并根据需要将其限制为10(docs关于查询限制)。

    最后,如果您想按时间(在您的案例中是最近的时间)查询,您可以在排序关键字前面加上日期/时间。比如2019-08-11-22-03-03_SOME_STRING。检查此docs关于使用时间的查询。

    更多推荐

    嵌套数组(属性)上的分页

    本文发布于:2023-11-22 15:16:48,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1617938.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:嵌套   分页   数组   属性

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!