【问题标题】:DynamoDB create index on map or list typeDynamoDB 在地图或列表类型上创建索引
【发布时间】:2015-07-27 12:14:11
【问题描述】:

我正在尝试为 DynamoDB 中地图对象内的属性添加索引,但似乎找不到这样做的方法。这是支持的东西还是索引真的只允许在标量值上?围绕此的文档似乎非常稀少。我希望索引功能类似于 MongoDB,但到目前为止,我使用点语法引用属性来索引的方法还没有成功。感谢您提供任何帮助或其他信息。

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    只能在顶级 JSON 属性上构建索引。此外,范围键必须是 DynamoDB 中的标量值(字符串、数字、二进制或布尔值之一)。

    来自http://aws.amazon.com/dynamodb/faqs/

    问:在 DynamoDB 中查询 JSON 数据有什么不同吗?

    没有。您可以创建全局二级索引或本地二级索引 在任何顶级 JSON 元素上。例如,假设您存储了一个 JSON 包含有关某人的以下信息的文件: 名字、姓氏、邮政编码和他们所有朋友的列表。 名字、姓氏和邮政编码将是顶级 JSON 元素。 您可以创建一个索引,让您根据名字、姓氏进行查询 姓名或邮政编码。好友列表不是顶级元素, 因此,您无法索引朋友列表。了解更多信息 有关全局二级索引及其查询功能,请参阅 此常见问题解答中的二级索引部分。

    问:可以索引哪些数据类型?

    所有标量数据类型(数字、字符串、二进制和布尔)都可以 用于本地二级索引键的范围键元素。放, 列表,并且地图类型不能被索引。

    【讨论】:

    • 那么在地图属性非常大的情况下,有效查询的正确方法是什么?
    • 我正在尝试在 json 元素上创建二级索引,但不知何故无法使用控制台和程序查询相同的索引。您能否分享一个示例,展示如何在 json 元素上创建索引并从中检索数据。
    【解决方案2】:

    我尝试在单独存储对象时执行 hash(str(object))。这个哈希给了我一个整数(数字),我可以在它上面使用二级索引。 Below is a sample in python,使用哈希函数很重要,它每次为值生成相同的哈希键。所以我使用的是sha1。

    # Generate a small integer hash:
    import hashlib
    def hash_8_digits(source):
        return int(hashlib.sha1(source.encode()).hexdigest(), 16) % (10 ** 8)
    

    这个想法是在保持实体完整的同时保持整个对象很小。即,不是将对象序列化和存储为字符串并改变对象的整个使用方式,而是存储一个较小的哈希值以及实际的列表或映射。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2013-10-24
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多