Dynamodb:使用两个以上属性的查询

2023-11-25

在 Dynamodb 中,您需要在索引中指定可用于进行查询的属性。

如何使用两个以上的属性进行查询?

使用 boto 的示例。

Table.create('users', 
        schema=[
            HashKey('id') # defaults to STRING data_type
        ], throughput={
            'read': 5,
            'write': 15,
        }, global_indexes=[
            GlobalAllIndex('FirstnameTimeIndex', parts=[
                HashKey('first_name'),
                RangeKey('creation_date', data_type=NUMBER),
            ],
            throughput={
                'read': 1,
                'write': 1,
            }),
            GlobalAllIndex('LastnameTimeIndex', parts=[
                HashKey('last_name'),
                RangeKey('creation_date', data_type=NUMBER),
            ],
            throughput={
                'read': 1,
                'write': 1,
            })
        ],
        connection=conn)

如何使用 boto 查找名字为“John”、姓氏为“Doe”并于“2015 年 3 月 21 日”创建的用户?


您的数据建模过程必须考虑您的数据检索需求,在 DynamoDB 中您只能通过哈希或哈希 + 范围键进行查询。

如果通过主键查询不足以满足您的要求,您当然可以通过创建二级索引(本地或全局)来拥有备用键。

但是,在某些情况下可以使用多个属性的串联作为主键,以避免维护二级索引的成本。

如果您需要按名字、姓氏和创建日期获取用户,我建议您将这些属性包含在哈希和范围键中,这样就不需要创建额外的索引。

哈希键应包含一个可由应用程序计算的值,同时提供统一的数据访问。例如,假设您选择按如下方式定义键:

哈希键(名称):名字#姓氏

范围键(已创建):MM-DD-YYYY-HH-mm-SS-毫秒

如果提到的属性不足以使您的密钥在表中唯一,您可以随时附加其他属性。

users = Table.create('users', schema=[
        HashKey('name'),
        RangeKey('created'),
     ], throughput={
        'read': 5,
        'write': 15,
     })

将用户添加到表中:

with users.batch_write() as batch:
     batch.put_item(data={
         'name': 'John#Doe',
         'first_name': 'John',
         'last_name': 'Doe',
         'created': '03-21-2015-03-03-02-3243',
     })

用于查找创建于“03-21-2015”的用户 John Doe 的代码应类似于:

name_john_doe = users.query_2(
   name__eq='John#Doe',
   created__beginswith='03-21-2015'
)

for user in name_john_doe:
     print user['first_name']

重要考虑因素:

我。如果您的查询开始变得过于复杂,并且由于具有太多连接字段而导致哈希或范围键太长,那么一定要使用二级索引。这是一个好兆头,表明仅主索引不足以满足您的要求。

二.我提到哈希键应该提供统一数据访问:

“Dynamo 使用一致的散列来跨其密钥空间进行分区 副本并确保均匀的负载分布。统一密钥 分布可以帮助我们实现均匀的负载分布假设 密钥的访问分配并没有高度倾斜。”[DYN]

Hash Key不仅可以唯一标识记录,而且是确保负载分配的机制。范围键(使用时)有助于指示主要一起检索的记录,因此,也可以针对这种需要优化存储。

下面的链接有关于该主题的完整解释:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.UniformWorkload

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

Dynamodb:使用两个以上属性的查询 的相关文章

  • 如果值已经是字符串,我是否应该避免转换为字符串?

    有时您必须使用列表理解将所有内容转换为字符串 包括字符串本身 b str a for a in l 但我必须这样做 b a if type a str else str a for a in l 我想知道是否str在字符串上已经足够优化no
  • Python ImageTk.PhotoImage 使用 alpha 通道缓慢加载 png

    我编写了一个小程序来加载和显示图像 一切正常 直到我到达 示例中的 png 文件 shade png 显示这张小图片需要七七秒 PhotoImage 是否有错误或者我错过了一些 范围 这是我的示例代码 from PIL import Ima
  • 如何在Python中获得更精确的十进制值[重复]

    这个问题在这里已经有答案了 from math import sqrt a 1e 8 b 10 c 1e 8 x1 b sqrt b 2 4 a c 2 a x2 b sqrt b 2 4 a c 2 a print x1 format x
  • 使用 Flask 从 Jinja 模板中的 settings.py 文件获取变量

    假设我有 settings py 文件 其中包含一堆常量 将来可能会更多 如何访问 Jinja 模板中的这些变量 Flask 会自动将您的应用程序的配置包含在标准上下文 http flask pocoo org docs templatin
  • 如何在 django 表单中设置自定义 HTML 属性?

    我有一个 Django 表单 它是页面的一部分 假设我有一个字段 search input forms CharField u Search word required False 我只能通过模板访问它 form search input
  • 如何在 Google App Engine 中为模型定义唯一属性?

    我需要一些独特的属性 我怎样才能实现这个目标 有没有类似的东西unique True 我正在使用适用于 Python 的 Google App Engine Google 提供了执行此操作的函数 http code google com a
  • 如何计算具有较大中间值的总和

    我想计算 for n m两个值都是 1000 以内的整数 最终结果是一个不大于 1000 的数字n但中间值对于 python 来说太大了 无法处理 你怎么解决这个问题 我将函数定义如下 from scipy misc import comb
  • 无法从亚马逊Windows实例的公共IP访问node.js服务器

    我正在 Windows 服务器的亚马逊微实例上运行 Node js 服务器 我无法使用亚马逊实例的公共IP访问node js服务器 我可以使用 localhost 12345 从实例访问 node js 服务器 但无法使用实例的公共 IP
  • python 中使用 scipy 截断正态分布

    我正在尝试使用截断正态分布scipy在Python3 我想做一些简单的事情 绘制以 0 5 为中心 范围从 0 到 1 的截断法线的 pdf 我有以下代码行 from scipy import truncnorm import matplo
  • 中断QThread睡眠

    我想知道如何暂停 QThread 然后在收到信号时恢复 我已阅读并知道我可以做这样的事情 def run self self ready False while not self ready self sleep 1 QtCore Slot
  • 如何使用 Python Flask-Security 使用 bcrypt 加密密码?

    我正在尝试使用 Flask Security 文档中的标准基本示例 并使其正常工作 除了密码以明文形式存储之外 我知道这一行 user datastore create user email email protected cdn cgi
  • 仅打印字符串中的元音

    我是Python新手 我正在尝试打印字符串中的所有元音 因此 如果有人输入 嘿 一切都好吗 所有元音都需要打印 但我不知道怎么做 所以这不是计算元音 而是打印元音 现在我已经得到了这个 sentence input Enter your s
  • 将 Python 3 的“范围”“向后移植”到 Python 2 是一个坏主意吗?

    我的一门课程要求用 Python 完成作业 作为练习 我一直使用如下脚本确保我的程序可以在 Python 2 和 Python 3 中运行 bin bash Run some PyUnit tests python2 test py pyt
  • python 中的优化标准化

    在优化过程中 对输入参数进行归一化 使它们处于同一数量级 通常会很有帮助 这样收敛效果会更好 例如 如果我们想要最小化 f x 而合理的近似值是 x0 1e3 1e 4 则将 x0 0 和 x0 1 归一化到大约相同的数量级可能会有所帮助
  • 如何使用 Python 3 在 OpenCV 3 上正确加载 cv2.KeyPoint 和描述符?

    有一天 我不得不恢复一个使用 OpenCV 3 和 Python 2 7 的旧项目 在此代码中 要加载 cv2 KeyPoint 我执行以下操作 import numpy as np import cPickle import cv2 ke
  • 带有 graphviz_layout 的水平树

    在Python中 使用networkx 我可以用以下方法绘制垂直树 g nx balanced tree 2 4 pos nx graphviz layout g prog dot nx draw g pos labels b all no
  • Mac 上的 PythonXY?

    如何在 Mac OS X Lion 上安装 Python 我开始了 它应该能够通过 macports 但无论如何我找不到 mac ports 网站上所述的端口 pythonXY 我对 MAC 和 pythonXY 都不太了解 但在 pyth
  • 每次 apache 重新启动时,flask-login 会话都会被破坏

    我正在使用烧瓶登录https github com maxcountryman flask login https github com maxcountryman flask login和领域记住登录用户 http packages py
  • pylint:忽略 rcfile 中的多个

    在我的 django 项目中 我使用的是外部编写的应用程序 但编写得很糟糕 现在我想从我的 pylint 报告中忽略这个应用程序 但是我无法让 pylint 忽略它 Pylint 已经忽略了南方的迁移 如下所示 MASTER ignore
  • Python 线程与 Linux 中的多处理

    基于此question https stackoverflow com questions 807506 threads vs processes in linux我假设创建新流程应该几乎和创造新线程在Linux中 然而 很少的测试显示出截

随机推荐

  • 批量删除除指定文件和目录之外的所有文件和目录[重复]

    这个问题在这里已经有答案了 我正在尝试使用该目录中的 bat 文件删除特定目录中的所有文件和目录 我见过这在 Linux 上完成没有问题 但在 Windows 命令环境中这似乎是一件苦差事 示例 temp 1 bat 保留 temp 特殊文
  • 我应该使用枚举作为鉴别器吗?

    枚举什么时候会崩溃 为了支持现有系统中的新功能 我只是考虑对数据库模式中的实体表实现某种形式的鉴别器 为了从做最少的事情开始 我首先决定在业务实体层使用整数列和 C 枚举 以提高可读性 这将提供穷人的多态性 最终可能发展为实际的多态性 并可
  • 如何将 cv::Mat 转换为 pcl::pointcloud

    如何从 opencv Mat 点云到 pcl pointcloud 颜色对我来说并不重要 重要的是点本身 你可以这样做 pcl PointCloud
  • 比 get_headers() 更快的东西

    我正在尝试制作一个 PHP 脚本来尽快检查网站的 HTTP 状态 我目前正在使用 get headers 并在 mysql 数据库中的 200 个随机 url 循环中运行它 检查全部 200 个 平均需要 2m 48s 我能做些什么来让它
  • Java中的运算符重载

    请问Ja va中是否可以重载运算符 如果它在 Java 中的任何地方使用 请告诉我 不 Java 不支持用户定义的运算符重载 Java 唯一接近 自定义 运算符重载的方面是对字符串的 处理 这会导致常量的编译时连接或使用 StringBui
  • 使用 SPARQL 查询查找最短路径

    我试图了解 SPARQL 查询的计算限制 并且我想知道如何编写一个查询来确定两个对象之间是否存在有向路径 我知道一种针对特定长度的路径执行此操作的方法 SELECT a b c d WHERE a
  • 未捕获的类型错误:当我尝试将数据发送到 url 时,无法读取未定义的属性“ajax”

    我创建了一个表单来获取用户的反馈 我只是尝试将表单数据发送到 url 但我收到此错误 未捕获的类型错误 无法读取未定义的属性 ajax function sendData ajax url www yashkjhsah php type P
  • 打印内核的页表条目

    具有 4 级页表的虚拟内存映射 0000000000000000 00007fffffffffff 47 bits user space different per mm ffff800000000000 ffff80ffffffffff
  • 如果数据库丢失,SQLite 连接失败? (已删除/移动)

    我里面有以下方法class DBConnection 我这样调用该方法 SQLiteConnection conn DBConnection OpenDB 当我想打开连接时 以便我可以执行查询 当我想关闭连接时 我可以调用类似的方法 方法
  • $locationProvider.html5Mode(true) 问题

    一直在处理一些我陷入困境的 locationProvider 问题 我有一个简单的单页页面 但我收到以下错误 TypeError Cannot read property replace of undefined at trimEmptyH
  • Geopy:检索英文国家/地区名称

    我正在尝试反转地理编码坐标并使用 geopy 检索相应的国家 地区代码 然而 Geopy似乎没有提供获取国家代码的方法 因此 我尝试先检索国家 地区名称 然后将它们转换为代码 不幸的是 我的代码给了我非英语的国家 地区名称 如何获取英文国家
  • RxJS Observables 的 Promise.all 行为?

    在 Angular 1 x 中 我有时需要制作多个http请求并对所有响应执行某些操作 我会将所有的承诺放入一个数组中并调用Promise all promises then function results Angular 2 最佳实践似
  • 由于 rJava 导致尝试在 R 中加载包时出现问题

    当我打字时require xlsx 为了加载包xlsx在 R 中 显示以下消息 gt require xlsx Loading required package xlsx Loading required package xlsxjars
  • 将 Python argparse.Namespace() 视为字典的正确方法是什么?

    如果我想使用的结果argparse ArgumentParser 这是一个Namespace对象 具有需要字典或类似映射的对象的方法 请参阅集合 映射 正确的做法是什么 C gt python Python 2 7 3 default Ap
  • Typescript 索引签名和方法

    为什么下面的代码给出ts 2411 error class Greeter key string string number greeting string constructor message string this greeting
  • 如何删除ListBox中的多个选定项?

    我的 Windows 窗体包含两个列表框 Listbox1 包含一些项目 listbox2 为空 当我按下表单上的按钮时 应将 listbox1 中的多个选定项目从 Listbox1 中删除并复制到 Listbox2 中 我尝试在 list
  • JavaScript WeakMap 不断引用经过 gc 处理的对象

    我正在经历 JavaScript 弱映射 在 google chrome 开发者控制台中尝试此代码后 使用 js flags expose gc 运行 我不明白为什么弱映射继续引用 a b 如果 a 是GC 编辑 var a listene
  • Java中Arraylist转Json的方法

    我有一个数组列表 数组列表包含一堆域对象 如下图所示 Domain domainId 19 name a dnsName a com type 0 flags 0 Domain domainId 20 name b dnsName b co
  • 如何在客户端-服务器 PlayN 游戏中处理 RPC?

    我想使用 PlayN 创建客户端 服务器纸牌游戏 例如心 虽然我主要关注 HTML5 输出 但我希望与输出平台无关 以防我将来决定制作 Android 客户端 我应该如何处理RPC机制 这些是我想到的选项 通过 get post 方法将 J
  • Dynamodb:使用两个以上属性的查询

    在 Dynamodb 中 您需要在索引中指定可用于进行查询的属性 如何使用两个以上的属性进行查询 使用 boto 的示例 Table create users schema HashKey id defaults to STRING dat