当前位置: 首页 > 面试题库 >

从哈希键检索不同的值-DynamoDB

祝高阳
2023-03-14
问题内容

我有一个dynamodb表来存储电子邮件属性信息。我在电子邮件上有一个哈希键,在时间戳(数字)上有范围键。使用电子邮件作为哈希键的最初想法是按电子邮件查询所有电子邮件。但是我想做的一件事是检索所有电子邮件ID(在哈希键中)。我为此使用了boto,但不确定如何检索不同的电子邮件ID。

我当前提取10,000条电子邮件记录的代码是

conn=boto.dynamodb2.connect_to_region('us-west-2')
email_attributes = Table('email_attributes', connection=conn)
s = email_attributes.scan(limit=10000,attributes=['email'])

但是要检索不同的记录,我将必须进行全表扫描,然后在代码中选择不同的记录。我的另一个想法是维护另一个表,该表将仅存储这些电子邮件并进行有条件的写入,以查看是否存在电子邮件ID(如果不存在),然后写入。但是我试图考虑这是否会更昂贵,并且将是有条件的写入。

Q1.) Is there a way to retrieve distinct records using a DynamoDB scan?
Q2.) Is there a good way to calculate the cost per query?

问题答案:

使用DynamoDB扫描,您需要在客户端上过滤掉重复项(在您的情况下,使用boto)。即使使用反向架构创建GSI,您仍然会得到重复的副本。给定一个名为stamped_emails的email_id
+ timestamp的H + R表,所有唯一的email_ids的列表是H + R
stamped_emails表的实例化视图。您可以在stamped_emails表上启用DynamoDB流,将Lambda函数订阅到stamped_emails的Stream,该函数将PutItem(email_id)放置到名为emails_only的仅散列表中。然后,您可以扫描emails_only,并且不会重复。

最后,关于您的成本问题,即使您仅从这些项目中请求某些计划的属性,Scan也会读取整个项目。其次,Scan必须通读每一项,即使它已由FilterExpression(条件表达式)过滤掉了。第三,扫描顺序读取项目。这意味着出于计量目的,每个扫描调用都被视为一个大读取。这样做的成本含义是,如果“扫描”呼叫读取200个不同的项目,则不一定要花费100个RCU。如果每个项目的大小为100字节,则该扫描调用将花费ROUND_UP((20000字节/
1024 kb /字节)/ 8 kb / EC RCU)= 3
RCU。即使此调用仅返回123个项目,如果“扫描”必须读取200个项目,在这种情况下也会产生3个RCU。



 类似资料:
  • 当人们说Hashmap比列表更快时,我对Hashmap或Hashtable的概念更困惑。我很清楚散列的概念,其中的值存储在给定密钥的散列代码中。 但是,当我想检索数据时,例如,它是如何工作的,我在一个HashMap中存储n个带有n个不同键的字符串。如果我想检索与特定键关联的特定值,它将如何在O(1)的时间内返回它?因为散列密钥将与所有其他密钥进行比较,对吗?

  • 问题内容: 我不知道如何实现从php到java的这几行。 好吧,我尝试将其转换,但是得到了不同的结果! java中的结果不同于php中的结果。 你能帮我吗??先感谢您 :) 问题答案: 您不能在不将其转换为字符串的情况下直接使用seq20吗?我会这样:

  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个

  • 我正在开发一款Android应用程序。在我的应用程序中,我集成了Facebook登录。我的facebook登录工作正常。但当我制作release apk并运行该应用程序并尝试登录Facebook时,它就不工作了。请看下面我的场景。 我生成如下的发布apk 然后我使用jks文件路径生成keyhash。 我得到了一个散列键,然后将其添加到开发人员配置文件设置中。 当我在我的设备上安装并运行apk并使用

  • 我有个问题。从数据库检索salt值时,我的哈希密码值不匹配。 登记php > 用户输入用户名和密码。 通过POST收集用户名和密码。 生成随机盐值将盐值添加到密码值的末尾(由用户输入)。并散列全部值。 将用户名、盐、hashed密码和原始密码插入数据库(仅用于测试) } 登录。php > if(isset($_POST["用户名"]) }

  • 长度为10的哈希表使用带有哈希函数h(k)=k mod 10的开放寻址和线性探测。在向空哈希表中插入8个值后,该表如下所示 使用同一哈希函数和线性探测的键值的多少个不同插入序列将产生如上所示的哈希表? 答案是128。 我知道91,2,13,24,77是5!=120但我不知道其他8种组合是什么?