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

如何实现简单的动态表与每日值

萧飞
2023-03-14

我正在通过构建一个非常简单的API项目来学习AWS API网关Lambda Dynamodb。

从2013-01-01开始,我每天都有一个值,每天都在更新,所以基本上是这样的:

[
    {
        "value": 1776.09,
        "date": "2013-01-01"
    },
    {
        "value": 1779.25,
        "date": "2013-01-02"
    },
    // ...
    {
        "value": 2697.32,
        "date": "2018-11-22"
    }
]

在API中,我想获取特定日期和范围的数据(datefrom-dateTo),我一直在阅读Dynamodb,并计划将date作为分区键,格式YYYY-MM-DD,并且没有排序键,但不确定这是否是这种类型的数据和范围查询的正确aproach,因为我假设我必须为范围查询进行全表扫描,尽管是一个小数据集。

有人能告诉我这个说法是否正确,或者我需要重新考虑我的表结构吗。

共有2个答案

任昊苍
2023-03-14

从这篇文章中复制我的答案

NOSQLdb的几个概念

  1. 写入应在主键上均匀分布。

看到给定的问题和dyanamodb模式,我想到的最明显的事情是

将键日志作为主键,将时间戳作为辅助键。并进行聚合使用

select*其中pk=logs,sk在x和y之间

但这将违反这两个概念。我们总是在一个pk上写作,总是从同一个pk上阅读。

对于这个特殊的问题,我们的PK应该足够随机(这样就没有热键)和足够确定性(这样我们就可以查询)

在设计密钥时,我们必须对应用程序进行一些假设。假设我们决定每小时更新一次。因此,可以将2018年1月7日-2017日作为关键日期。其中17表示17小时。这个键是确定的,但它不够随机。1月7日的每一次更新或阅读都将主要集中在同一个分区上。为了使密钥随机,我们可以使用类似md5的散列算法来计算它的散列。假设在接受哈希之后,我们的密钥变成1sdc23sjdnsd。如果您正在查看表数据,那么这将毫无意义。但是如果你想知道2018年1月7日到2017年1月7日的事件计数,你只需散列时间,然后用hashkey从dynamodb获取数据。如果您想知道2018年1月7日的所有事件,您可以重复24次获取并汇总计数。

这种模式会有一些问题

>

  • 如果您决定从每小时改为每分钟。

    如果您的大多数查询都是运行时查询,请向我提供过去2、4、6天的所有数据。这将意味着到db的往返次数太多。而且时间和成本都很低。

    经验法则是,当查询模式定义良好时,出于性能原因,使用NOSQL并存储结果。如果您试图在nosql上执行连接或聚合类型的查询,则需要根据您的技术选择强制拟合您的用例。

    您还可以查看存储时间序列数据的aws建议。

  • 景信瑞
    2023-03-14

    你的提议会奏效的。

    但是,如果希望提高设计效率,可以使用分区键YYYY,然后排序键可以是MM-DD。这样,您可以使用查询操作来限制结果(也可以使用扫描)。

    您甚至可以使用分区键的单个常量值和date作为排序键,但是通常不建议为每个项使用相同的分区键。

    无论哪种方式,您的数据都足够小,您可能只需要选择最易于开发和维护的实现。

     类似资料:
    • 本文向大家介绍C++ 实现静态链表的简单实例,包括了C++ 实现静态链表的简单实例的使用技巧和注意事项,需要的朋友参考一下 C++ 实现静态链表的简单实例 用数组描述的链表,即称为静态链表。 在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标cur。 这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存

    • 本文向大家介绍Vue.js实现简单动态数据处理,包括了Vue.js实现简单动态数据处理的使用技巧和注意事项,需要的朋友参考一下 直接上代码吧 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

    • 本文向大家介绍vue2 中如何实现动态表单增删改查实例,包括了vue2 中如何实现动态表单增删改查实例的使用技巧和注意事项,需要的朋友参考一下 最近项目中遇到的需求是要操作大量的表单,之前的项目中有做过这方的研究,只不过是用jquery来操作。 项目A 先简单说说以前项目A中的应用场景,可能有小伙伴儿也遇到相同的需求。A项目是公司的OA系统中有的项目,是用java的jsp渲染的页面,需求是要改成:

    • 本文向大家介绍PHP实现的简单日历类,包括了PHP实现的简单日历类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现的简单日历类。分享给大家供大家参考。 具体实现代码如下: 希望本文所述对大家的php程序设计有所帮助。

    • 本文向大家介绍如何通过JS实现日历简单算法,包括了如何通过JS实现日历简单算法的使用技巧和注意事项,需要的朋友参考一下 最近有用到日历可需要编辑文本的日历,为了绑定数据的方便,所以用js写了一套日历,其实思想也是很简单。实现步骤如下: 1、首先取得处理月的总天数 js不提供此参数,我们需要计算。考虑到闰年问题会影响二月份的天数,我们先编写一个判断闰年的自编函数: function is_leap(

    • 本文向大家介绍Spring AOP手动实现简单动态代理的代码,包括了Spring AOP手动实现简单动态代理的代码的使用技巧和注意事项,需要的朋友参考一下 什么是AOP我们先来看一张图 图中A就是通知,比如你要给每个方法前都加一个before()方法,目标类的每一个方法叫joinpoint(切入点),每个切入点都会用到通知,把通知和切入点连起来,点成线,线成面,这就是切面,也就是AOP,下面我们来