DynamoDB индексирует только определенный набор значений - PullRequest
0 голосов
/ 26 апреля 2019

Мой индекс DynamoDB переполнен огромными данными.Я хотел бы выбрать значения, которые можно индексировать, и избегать индексации остальных.Возможно ли это?

Допустим, ниже приведены примеры элементов:

parent item:
{
    "hashKey":"a1"
    "indexHashKey":"parentType"
    "indexRangeKey":"date1"

}

child item:
{
    "hashKey":"a2"
    "indexHashKey":"childType"
    "indexRangeKey":"date11"

}

В моем случае я всегда буду просить index выбрать только записи parentType.Индекс загружается огромными данными, потому что childTypes также индексируются (и это так).Я хотел бы выбрать конкретные значения (скажем, «parentType1», «parentType2») для индексации в DynamoDB.Есть ли какая-либо функция, которую DynamoDB предоставляет для этой цели?

Альтернатива: Если такая возможность не предусмотрена для DynamoDB, тогда мне следует либо

* avoid storing the child type of the item. But it would be good to have the child type stored.

or 

* Maintain two different fields. One to store parent record type and another to store child record type. This looks ugly.

Любые предложения будут полезны.

1 Ответ

0 голосов
/ 26 апреля 2019

Для ясности, вы храните родительские и дочерние элементы в одной таблице и хотите, чтобы индекс в таблице содержал только дочерние элементы?Это правильное представление вашей проблемы?

Если вы не хотите, чтобы все данные в таблице DynamoDB были в индексе, вам необходимо создать разреженный индекс , который являетсяобычный индекс, где атрибуты, указанные для ключей хеша и диапазона индекса, НЕ присутствуют в каждом элементе таблицы.Ваша проблема в том, что ваши атрибуты indexHashKey и indexRangeKey находятся на ВСЕХ ваших родительских и дочерних элементах, поэтому все они отображаются в вашем индексе.Помните, что элементы в таблице DynamoDB могут иметь разные атрибуты;как минимум, они должны содержать хеш-ключ таблицы и ключ сортировки (если таковой имеется в таблице), но им не нужно содержать атрибуты, которые оказываются ключами для любого индекса, присоединенного к таблице.

Подумайте о том, чтобы изменить ваши элементы так, чтобы они включали только атрибуты хеш-индекса и ключа диапазона в родительские элементы.Например:

parent item:
{
    "hashKey":"a1"
    "parentIndexHashKey":"parentType"
    "parentIndexRangeKey":"date1"

}

Затем вы можете выполнить запрос по этому индексу по родительскому типу (например, parentType == "parentType2") и вернуть только родительские элементы в этой таблице с этим типом.

Если вам также необходимо выполнить аналогичный запрос только для дочерних элементов, вы можете создать второй разреженный индекс, который имеет только дочерние элементы, задав атрибуты для хеша этого индекса и ключи сортировки только для дочерних элементов.

child item:
{
    "hashKey":"a2"
    "childIndexHashKey":"childType"
    "childIndexRangeKey":"date11"
}

Кроме того, вы можете хранить родительские и дочерние элементы в отдельных таблицах DynamoDB, чтобы дочерние элементы не могли попасть в родительский индекс и мешать вашим запросам.

...