当前位置: 首页 > 知识库问答 >
问题:

AWS DynamoDB表结构

薛华奥
2023-03-14

我正在创建一个加密货币机器人,需要将其交易历史存储在某个地方。由于AWS DynamoDB在一定程度上是免费使用的,我认为它可以满足我的需求,但我在表结构方面有一些问题。

每笔交易都具有以下属性:

  • 加密货币符号

每天,我计划对按时间排序的最后200个项目以及大约50个新项目插入进行1次选择查询。

据我所知,一个表需要有一个唯一的主键,因此我使用html" target="_blank">加密货币符号作为分区键,使用交易id作为排序键,因为两者结合起来提供唯一性,但如果我没有弄错的话,此设置不允许我按时间对数据进行排序。

我能想到的一个解决方案是自己生成新的、完全唯一的交易ID,不要依赖exchange提供的交易ID,然后使用时间作为排序键,但我希望避免使用它。

也许有更好的方法来做这件事?

共有1个答案

陆翰学
2023-03-14

您应该使用symbol和tradeId作为主键,为了按日期进行查询,您可以创建一个GSI,其中yyyy-mm-dd作为分区键,hh:mm:ss(或者如果愿意,可以使用完整的时间戳)作为排序键。由于每天要进行50次插入,您甚至可以使用yyyy-mm作为GSI分区键。

为了选择最新的200,您可以使用键条件表达式查询GSI,该表达式为yyyymmdd=:today,sort=降序,limit 200。如果得到的结果少于200个,请重复前一天的查询。如果仍然少于200个结果,请继续每天查询一次,直到得到所需的数字。(如果选择使用yyyy-mm作为GSI分区键,请调整此策略以使用月而不是天。)

查看一个相关问题的答案,其中有关于这种方法的更多细节。

这种方法可能无法很好地扩展,但由于您正试图保持在DynamoDB的免费层内,因此可能不需要担心可伸缩性。

现在,如果您根本不关心最佳实践,只需使用yyyy-mm-dd作为主表的分区键,然后使用hh:mm:ss:symbol:tradeId作为排序键。您将能够按日期查询主表(但不能按任何其他方式)。

 类似资料:
  • 蓝牙设备对象​ 证书对象​ 证书主体对象​ Cookie对象​ 崩溃报告对象​ 桌面捕获源对象​ 显示器对象 打印机信息对象 文件过滤器对象​ 最近使用的项目​ 常用列表项​ CPU使用率对象即程序占用的CPU资源​ IO值对象​ 内存信息对象​ 进程内存信息对象​ 内存使用详细信息​ Mime类型缓冲区​ 矩形对象​ 删除客户端证书对象​ 删除密码对象​ Scrubber项对象​ 分段控制对象​

  • 谁能给我解释一下这个吗?

  • 什么是链接,为什么要使用,如何使用。 关系表 例子: 一个包含目录的数据库,其中每种类型物品占用一行,每种物品要存储的信息包括产品描述 和价格,以及生产该产品的供应商信息。 有一个供应商生产多种物品,何处存储供应商的信息(地址,电话等),如何分开存储。 同一个供应商存储的信息都是相同的,每种产品重复信息,浪费空间 如果供应商信息改变,执行改一次。 重复数据,难保证每次储存信息一致,不一致信息难管理

  • xorm 提供了一些动态获取和修改表结构的方法,通过这些方法可以动态同步数据库结构,导出数据库结构,导入数据库结构。

  • 主要内容:DESCRIBE:以表格的形式展示表结构,SHOW CREATE TABLE:以SQL语句的形式展示表结构创建完数据表之后,经常需要查看表结构(表信息)。在 MySQL 中,可以使用 DESCRIBE 和 SHOW CREATE TABLE 命令来查看数据表的结构。 DESCRIBE:以表格的形式展示表结构 DESCRIBE/DESC 语句会以表格的形式来展示表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,语法格式如下: DESCRIBE <表名>; 或简写成: D

  • 主要内容:Oracle ALTER TABLE示例,以下是纠正/补充内容:在本教程中,我们将学习如何使用Oracle 语句来修改表结构。 要修改现有表的结构,请使用语句。 以下说明语法: 在上面的语句中, 首先,指定要修改的表名称。 其次,指出想在表名称后执行的操作。 语句可用来: 添加一个或多个列 修改列定义 删除一列或多列 重命名列 重命名表 下面来看看一些例子来了解每个操作的工作原理。 Oracle ALTER TABLE示例 我们将使用在上一个教程中创建的表进行