如何在 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 中为聊天应用程序选择分区键 的相关文章

  • Cloudfront 异常“If-Match 版本缺失或对资源无效。”更新分布时

    使用 AWS Node SDK 更新 Cloudfront 发行版时出现以下异常 message The If Match version is missing or not valid for the resource code Inva
  • AWS Cognito 作为网站的 Django 身份验证后端

    我对 Cognito 的理解是 它可以用来代替本地 Django 管理数据库来对网站的用户进行身份验证 然而 我没有找到任何带有通过 Cognito 登录屏幕的基本 Hello World 应用程序的详细示例 如果有人可以发布一篇文章 逐步
  • Alexa Skill - 以编程方式更新意图

    我正在尝试创建一个 Alexa 技能 它可以使用相当广泛的可能的短语数量 手写太多了 我可能可以通过编程方式生成列表 但它经常更改 因此我希望它经常更新 我是否可以调用 Amazon API 来更新自定义槽类型的可能值 而无需始终手动登录并
  • 如何在没有终端节点令牌的情况下确认 Amazon SNS 的订阅?

    在我的 JAVA 应用程序中 我使用 Amazon SNS 向客户发送电子邮件 一旦我将一位客户 电子邮件 ID 订阅到我的 SNS 主题 它要求客户确认订阅以接收电子邮件 有什么方法可以在您的应用程序本身中确认订阅 无需客户的帮助 不 这
  • aws eb deploy 不加载环境变量

    我正在通过 eb deploy 将 symfony 项目部署到 ec2 实例 aws linux 2 部署后迁移脚本运行良好 但当我尝试使用 ec2 user 运行 symfony 命令时 出现有关数据库凭据错误的错误 这是因为我推送了带有
  • 使用带有分区键和排序键的 bash 删除 DynamoDB 表中的所有项目

    我尝试在 bash 中使用 AWS CLI 删除 DynamoDB 表中同时具有分区键和排序键的所有项目 到目前为止我发现的最好的东西 https gist github com pushplay d2cac7ca1a10a5a49f694
  • 非关系数据库设计[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解您使用过的设计策略非关系型 nosql 数据库 也就是说 不使用传统关系设计或 SQL 的 大多数是新的 数据存储类 例如
  • 如何在API网关前面添加CloudFront

    API 网关 APIG 虽然它使用 CloudFront CF 但不支持 CDN 边缘缓存 当我将 CF 发行版配置为使用 APIG 作为自定义源时 我收到权限被拒绝错误 如何配置 CF 来解决此问题 在 API Gateway APIG
  • boto 库是线程安全的吗?

    具体来说 我对从多个线程 放置 获取 更新等 使用 DynamoDB 表对象感兴趣 如果这不安全 那么是否有一种安全的方法 即每个线程可能有一个表对象 关于在 boto 中使用线程的任何其他陷阱或技巧表示赞赏 boto 库使用 httpli
  • 自动缩放时如何更改新实例标签名称

    我在我的设备上创建了一个新闹钟AWS基于我也创建的指标的帐户 我用这个警报来自动缩放 当启动我正在使用的新实例时User Data字段来设置这个新实例 我面临的唯一问题是我无法修改标签 特别是标签Name 这个新实例 如果我不更改它 所有新
  • 使用 AWS Lambda 从 AWS S3 读取并提取巨大的 zip 文件

    我正在开发数据管理应用程序 客户可以上传zip file approx 250 MB 与多个text files approx 1500 MB on AWS S3 但由于记忆有限aws lamda 最大 1536MB 大小 我能够提取 50
  • 您可以克隆 AWS lambda 吗?

    针对不同环境的克隆 分期 QA PROD DEV 等 有没有一种快速简单的方法来克隆我的 lambda 给出不同的名称并从那里调整配置 您需要在新帐户中重新创建 Lambda 函数 转到 lambda 函数 单击 操作 并导出您的函数 下载
  • 什么时候不应该使用 Cassandra? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 相关话题已经有很多讨论了卡桑德拉 http cassandra apache org lately Twitter Digg Facebook
  • 使用端口 80 的 AWS Elastic Beanstalk 上的 WebSocket 问题

    我正在将一个 node js 应用程序从 Heroku 迁移到在端口 80 上使用 WebSocket 的 AWS Elastic Beanstalk WebSocket 在 AWS Elastic Beanstalk 上返回 301 错误
  • 如何使用 PHP SDK 在 AWS SES 发送的电子邮件中实现 List-Unsubscribe 标头

    我尝试使用 AWS PHP SDK 添加自定义标头 以便可以实现 List unsubscribe 标头 问题是我找不到任何地方如何实现它 我已阅读文档但什么也没有 http docs aws amazon com aws sdk php
  • 如何让AWS Lambda停止执行?

    我有一个AWSLambda 函数执行操作Kinesis Firehose 该函数使用退避机制 此时我认为这是浪费我的计算时间 但无论如何 在我的代码中的某个时刻 我希望执行失败 我应该使用什么命令来停止执行 附注 我发现有这样的命令 con
  • Laravel 作业推送至 Amazon SQS 但未处理

    我正在运行 Laravel 5 3 我正在尝试测试队列作业 并且我已将队列配置为使用 Amazon SQS 我的应用程序能够将作业推送到队列中 并且我可以在 SQS 中看到该作业 但它留在那里 从未被处理 我尝试过跑步php artisan
  • 使用 python 写入 aws lambda 中的 /tmp 目录

    Goal 我正在尝试将 zip 文件写入 python aws lambda 中的 tmp 文件夹 因此我可以在压缩之前提取操作 并将其放入 s3 存储桶中 Problem 操作系统 Errno30 只读文件系统 这段代码在我的计算机上进行
  • 在describe-vpcs中按标签过滤的正确语法是什么?

    我试图理解 aws ec2 cli 调用 我希望描述所有 VPC 然后在自定义标记上描述文件管理器 vpcname myvpc 但是在尝试多种组合后 我不断收到有关 filters 的格式和使用的冲突错误 使用作为参考 http docs
  • Nginx 配置文件在 Elastic Beanstalk 部署期间被覆盖?

    我需要将 p3p 标头添加到标准 Nodejs 和 Nginx Elastic Beanstalk 上的静态资源位置 我创建了一个ebextension脚本如上所解释这个问题 https stackoverflow com question

随机推荐

  • 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