Как структурировать таблицу DynamoDB с метаданными для родительского объекта - PullRequest
0 голосов
/ 04 января 2019

Я создаю Rest API с DynamoDB в качестве бэкэнда.

У меня есть 2 сущности, которые связаны друг с другом: Project и Version, отношение: Project может иметь несколькоVersions

У меня есть 2 конечные точки:

projects / {project}

Возвращает Project со всеми вложенными Versions.

Ответвыглядит следующим образом:

{
    "name": "php",
    "abandoned": false,
    "versions": { ... }
}

projects / {project}? version = {version}

Возвращает один Version для указанного проекта.

Ответ выглядитвот так:

{
    "version": "5.3",
    "long_term_support": false,
    "support_ends": "2011-06-30",
    "security_ends": "2012-06-30"
}

Мое текущее определение таблицы выглядит так:

{
    "Table": {
        "AttributeDefinitions": [
            {
                "AttributeName": "name",
                "AttributeType": "S"
            },
            {
                "AttributeName": "version",
                "AttributeType": "S"
            }
        ],
        "TableName": "projects",
        "KeySchema": [
            {
                "AttributeName": "name",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "version",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "ACTIVE",
        "CreationDateTime": 1546603531.869,
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 0,
            "WriteCapacityUnits": 0
        },
        "TableSizeBytes": 104,
        "ItemCount": 4,
        "TableArn": "arn:aws:dynamodb:xxx",
        "TableId": "xxx"
    }
}

Вопрос в том, является ли эта структура оптимальной для моего варианта использования?Я не совсем понимаю, как на самом деле структурировать конкретные метаданные проекта (не версии).Допустим, у меня есть атрибут Project.IsAbandoned, который будет строкой о том, что проект был заброшен.Так как version является ключом сортировки, мне пришлось бы придумать константу (скажем, 0), содержащую все метаданные, такие как IsAbandoned, для правильного заполнения Project, прежде чем выполнять итерацию фактического Versions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...