如何在 DynamoDB 中为聊天应用程序选择分区键

2023-12-02

我需要将 DynamoDB 用于聊天应用程序,该应用程序将在活动当天偶尔使用。该应用程序将在某一天读取/写入数千条消息,之后几乎不会再读取/写入消息。

这就是我的想法:

Table: Messages
HashKey: Event day name
SortKey: Message timestamp

我可以获取最近 20 条消息(聊天应用程序通常只获取最新数据,不是吗?),但所有读/写将仅定向到一个分区。

我可以尝试这样

Table: EventDayMessage
HashKey: Message timestamp

这样,读/写将扩展到更新的消息,但由于没有排序键,我无法获取最近的消息。

在我的场景中方法 2 更好吗?我可以使用什么作为排序键?还有其他更好的建议(除了切换数据库)吗?


我的第一个建议是转移到一个合适的数据库(如elasticsearch)来回答这个用法(基于时间的搜索)并为每天创建一个新索引

但如果你仍然想使用 dynamodb,一个好的 hack 可以是:

  • 如果您的应用程序每天写入/读取数千条消息,那么您不会获得很多分区(还取决于您的数据大小)。

假设您将有 3 个分区。 你的钥匙可以是这样的:

HashKey: Event day name + 'part_X' (where x is a number between 1-5. it can be a round rubin, or some '%' on a user_id or something like that)
SortKey: Message timestamp

因此,对于您的情况,要获取最后 20 条评论: 您应该从每个分区获得 20 条评论(hash = event_day_name _part_1, event_day_name _part_2 ..),然后到达最近的顶部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 DynamoDB 中为聊天应用程序选择分区键 的相关文章

  • 如何恢复丢失的aws服务器实例的私钥?

    我丢失了 AWS 实例的私钥 我在控制台面板中搜索了该选项 恐怕你可能不走运 当您启动实例时 您应该指定密钥的名称 您计划用于连接到实例的对 如果你不指定 启动实例时现有密钥对的名称 您 将无法连接到实例 当您连接到 例如 您必须指定与密钥
  • 由 aws API 制作的 HttpRequest 拦截器

    我正在开发一个项目 该项目使用 cognito 作为身份验证服务来保护使用 nodeJS 制作的无服务器休息 API 我已成功关闭未经身份验证的客户端的 API 现在 每当我从 Angular 客户端发出请求时 我都需要在标头中自动注入一个
  • MongoDB中批量FindAndModify的解决方案

    我的用例如下 我在 mongoDB 中有一组文档 我必须发送这些文档进行分析 文件格式如下 id ObjectId 517e769164702dacea7c40d8 日期 1359911127494 状态 可用 其他字段 我有一个阅读器进程
  • 调用 IndexFaces 操作时出现 InvalidS3ObjectException

    我正在尝试以下教程 https aws amazon com blogs machine learning easily perform facial analysis on live feeds by creating a serverl
  • 将大型高清视频文件上传到 Amazon Web Services S3

    最终目标 将大型视频文件 内容制作者将是专业用户 因此他们的一点额外工作并不是一个巨大的负担 然而 对他们 和我 来说 保持尽可能简单是理想的 如果可以使用网络表单来启动那就最好了 内容制作者不会有数百个 因此可以投入一些额外的时间或精力为
  • 从 Docker 容器中获取 AWS 实例元数据?

    是否有一种直接的方法可以从 Docker 容器内访问 AWS 实例元数据 例如 当尝试在 EC2 实例上获取 IAM 角色的凭证时 这将适用于实例本身 http 169 254 169 254 latest meta data iam se
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • AWS 存储桶和区域

    该应用程序结合使用载波carrierwave aws宝石 在迁移 Rails 版本 升至 4 2 Ruby 版本 2 2 3 并重新部署到同一临时服务器时遇到了障碍 AWS 存储桶最初是在免费套餐中创建的 即俄勒冈州 us west 2 但
  • 从 RabbitMQ 迁移到 Amazon SQS [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们的初创公司目前正在使用RabbitMQ with Python Django 对于消息队列 现在我们计划转移到Amazon SQS其高可用性
  • AWS DynamoDB 的 r 语言支持 [重复]

    这个问题在这里已经有答案了 这是对此的后续 更新问题 AWS dynamodb 支持 R 编程语言 https stackoverflow com questions 14224919 aws dynamodb support for r
  • CORS 击败 AWS LAMBDA :(

    我读了很多关于 CORS Lambda AWS API Gateway 配置的文章 包括 AWS 的设置帮助 http docs aws amazon com apigateway latest developerguide how to
  • ECS任务定义中容器之间的通信

    我在 ECS 中运行了一个任务定义awsvpc模式 包含 2 个 docker 容器 我的问题是如何在任务定义中的容器之间进行通信 它们的行为与 docker compose 类似吗 awsvpc 网络模式下的任务中的多个容器将共享任务 E
  • 适用于 AWS 区域的 Cassandra Ec2MultiRegionSnitch 或 GossipingPropertyFileSnitch

    我们在美国 AWS 区域有 3 个 Cassandra 节点 在新加坡 AWS 区域有 3 个节点 如果我必须构建多数据中心 我们是否必须使用 Ec2MultiRegionSnitch 或者我们可以使用 GossipingPropertyF
  • 如何在图数据库(如 Neo4j)中对现实世界的关系进行建模?

    我有一个关于在图形数据库中建模的一般性问题 但我似乎无法解决这个问题 您如何建模这种类型的关系 牛顿发明了微积分 In a 简单图 http docs neo4j org chunked snapshot graphdb neo4j rel
  • AWS 获取带有自定义域的预签名 URL

    以下是我正在做的事情 我正在使用自定义域为我的非公开 s3 存储桶资源生成预签名 URL 另外 为了添加证书 我为具有以下原始设置的存储桶创建了一个 Cloudfront 发行版 源域名 bucket name s3 amazonaws c
  • 为什么只有 50 个实例在 AWS lambda 上运行?

    我在用context logStreamName识别 lambda 实例 并发设置为无保留 但日志显示只有 50 个实例正在运行 我是否误解了logStream pre logStream pre实例 我从那里得到的信息这个博客 https
  • 如何处理自动缩放期间网络流量的突然激增

    我在 ELB 后面和 Auto Scaling 组中有两个 EC2 实例 扩大规模政策如下 CPUUtilization gt 70 持续 300 秒 添加一台服务器 当 Atoscaling 活动正在进行时 现有实例上的负载已达到 99
  • DynamoDB 冲突解决策略

    DynamoDB 的冲突解决策略是什么 Dynamo 的白皮书谈到了通过 GetItem 返回多个版本以供客户端解析 This SO 问题 https stackoverflow com questions 41933959 how do
  • AWS CLI s3 复制失败并出现 403 错误,尝试管理用户上传的对象

    尝试将文件从 S3 存储桶复制到我的本地计算机 aws s3 cp s3 my bucket name audio 0b7ea3d0 13ab 4c7c ac66 1bec2e572c14 wav fatal error An error
  • 如何更改AWS ECS集群中的实例类型?

    我在 AWS EC2 容器服务中有一个集群 设置完毕后 我使用了 t2 micro 实例 因为这些实例足以进行开发 现在我想使用更强大的实例 例如 m4 large 我想知道是否可以仅更改实例类型 这样我就不需要重新创建整个集群 我找不到如

随机推荐

  • Rails 2.3.9 查询参数的编码

    是否可以让rails 将查询参数解码为utf8 如果我有类似 foo param 的东西 我尝试访问控制器中的参数 该参数被编码为 ASCII 8BIT 这会导致很多事情被破坏 因为我们的许多其他字符串都是用 UTF 8 编码的 而 rub
  • 获得授权属性的许可?

    我已经实现了我自己的Authorize属性 我注意到当我使用时它会查询以检查权限 Authorize 有什么方法可以获取该权限并在应用该权限的当前控制器中使用它Authorize属性而无需重写和重新查询控制器中的代码 是的你可以 如果您将
  • iOS 8 下不显示键盘

    当专注于我的应用程序的文本字段时 它们都无法调出键盘 我无法输入任何字母 不过iOS 8之前还可以 我尝试旋转屏幕 发现键盘显示在屏幕范围之外 检查视图框架 它是1024 768 似乎是正确的 最后发现是模拟器的问题 不是iOS 8的bug
  • 无法转换为尺寸:膨胀布局时类型=0x1 [重复]

    这个问题在这里已经有答案了 我的 XML 文件
  • 正则表达式 - 如何用 PHP 替换字符串的最后 3 个单词

    尝试将最后 3 个单词封装在 span tag str Lorem ipsum dolor sit amet h2 preg replace w s w s w span 1 span str 这里是 h2 preg replace w s
  • 使用 Pyspark 进行虚拟编码 [重复]

    这个问题在这里已经有答案了 我希望使用 Pyspark 语法将分类变量虚拟编码为数值变量 如下图所示 我读入这样的数据 data sqlContext read csv data txt sep header true 在 python 中
  • 是否需要通过 TCP 进行应用程序级重传和确认?

    我有以下疑问 1 TCP 是否保证数据包的传送 因此如果使用的传输协议是 TCP 则是否需要应用程序级重传 假设我已经在客户端和服务器之间建立了 TCP 连接 并且服务器向客户端发送消息 然而 客户端离线并仅在 10 小时后返回 那么 TC
  • 为管理仪表板创建私有路由时出错

    我尝试使用下面的代码来私有路由管理仪表板 我正在使用react router dom 6 2 2 我需要帮助来找出只能由管理员访问的私人路线 我尝试了 stackoverflow 中所有现有的解决方案 app js
  • 打字稿错误属性在类型上不存在

    我是 angularjs 2 和 ionic 2 的新手 我正在使用带有 Validators FormControl 和 FormGroup 的 angularjs 表单 当我使用 ionicserve lab 执行项目时 一切都很好 但
  • qt 错误:未定义对“线程 vtable”的引用

    我有代码 include
  • 如何通过 System.setProperty() 启动多个版本的 Geckodriver

    我不知道我是否在监督某些事情 但是是否可以在同一个 JVM 中使用多个 geckodriver 版本 问题在于 System setProperty webdriver gecko driver path of the geckodrive
  • 将 scrapy 项目导出到不同的文件

    我正在从 moocs 上抓取评论 就像这样one 从那里我可以获取所有课程详细信息 其中 5 个项目和每个评论本身的另外 6 个项目 这是我的课程详细信息的代码 def parse reviews self response l ItemL
  • 如何以编程方式区分箭头函数和常规函数?

    之间没有明显的区别箭头函数 and a 常规功能 toString call function object Function toString call gt object Function or console dir function
  • 无法从上下文对象继承?

    我试图创建一个继承自上下文对象的对象 但是在从我继承的对象调用函数时 浏览器 Chrome 声明未捕获的类型错误 非法调用 这是基本代码 http jsfiddle net adrianh BKYfv 1 var c document ge
  • 如何将包含 Unicode 代理项对的 JSON 编码数据转换为字符串?

    所以我试图获取使用 unicode 指示器的数据并使其使用表情符号进行打印 目前它在txt中 文件 但我稍后会写入 Excel 文件 所以无论如何 我收到一个错误 我不知道该怎么办 这是我正在阅读的文字 Thanks UglyGod ud8
  • 如何处理 Google App Engine app.yaml 中的尾部削减

    我试图在这里回答这个问题时遇到了这个问题 提供 PHP 文件时删除 PHP 文件扩展名关于如何在 Google App Engine 的 app yaml 中路由某些请求 但我无法弄清楚如何使用单个 app yaml 正则表达式来映射可能有
  • 如何从 sidekiq 队列中删除特定类别的作业?

    我不小心在 Sidekiq 中排队了一堆作业 我不想擦除整个 Redis 存储 并将所有 Sidekiq 数据和排队作业重置为零 但我想删除可以由给定类识别的所有排队作业 我该怎么做 这些答案很有帮助 但没有回答我原来的问题 这些解决方案可
  • Content_main.xml 丢失

    我是 Android Studio 的新手 按照developer android提供的教程 我创建了一个新项目 他们要求创建一个空白活动 但由于没有这样的活动 我使用了空活动作为模板 然后教程说res layout文件夹里面会有一个con
  • JavaFx:如果我想在initialize()之后、场景显示之前做一些事情,我该如何实现?

    我想做一些事情 在控制器的initialize 方法完成之后 但在场景显示之前 在场景显示之前是否会调用任何方法 我想在该方法中添加一些代码 FXMLLoader loader new FXMLLoader loader setLocati
  • 如何在 DynamoDB 中为聊天应用程序选择分区键

    我需要将 DynamoDB 用于聊天应用程序 该应用程序将在活动当天偶尔使用 该应用程序将在某一天读取 写入数千条消息 之后几乎不会再读取 写入消息 这就是我的想法 Table Messages HashKey Event day name