DynamoDB create index on map or list type

后端 未结 2 660
名媛妹妹
名媛妹妹 2020-12-15 02:58

I\'m trying to add an index to an attribute inside of a map object in DynamoDB and can\'t seem to find a way to do so. Is this something that is supported or are indexes rea

相关标签:
2条回答
  • 2020-12-15 03:30

    I have tried doing hash(str(object)) while I store the object separately. This hash gives me an integer(Number) and I am able to use a secondary index on it. Below is a sample in python, it is important to use a hash function which generates the same hash key every time for the value. So I am using sha1.

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

    The idea is to keep the entire object small while still the entity intact. i.e. rather than serializing and storing the object as string and changing whole way the object is used I am storing a smaller hash value along with the actual list or map.

    0 讨论(0)
  • 2020-12-15 03:45

    Indexes can be built only on top-level JSON attributes. In addition, range keys must be scalar values in DynamoDB (one of String, Number, Binary, or Boolean).

    From http://aws.amazon.com/dynamodb/faqs/:

    Q: Is querying JSON data in DynamoDB any different?

    No. You can create a Global Secondary Index or Local Secondary Index on any top-level JSON element. For example, suppose you stored a JSON document that contained the following information about a person: First Name, Last Name, Zip Code, and a list of all of their friends. First Name, Last Name and Zip code would be top-level JSON elements. You could create an index to let you query based on First Name, Last Name, or Zip Code. The list of friends is not a top-level element, therefore you cannot index the list of friends. For more information on Global Secondary Indexing and its query capabilities, see the Secondary Indexes section in this FAQ.

    Q: What data types can be indexed?

    All scalar data types (Number, String, Binary, and Boolean) can be used for the range key element of the local secondary index key. Set, list, and map types cannot be indexed.

    0 讨论(0)
提交回复
热议问题