Я новичок в No SQL DB и без сервера. В моем приложении есть таблица с именем Trips
. Параметры таблиц: {id, route, cost, selling, type, date, LR, asset }
и куча других не относящихся к делу номеров документов, где идентификатор генерируется с помощью uuid.
Теперь я хочу запросить базу данных для получения
- Возврат всех поездок в диапазоне дат с использованием параметра даты.
- Возврат всех поездок для актива за данный период времени с использованием параметра даты и актива.
- Возврат всех поездок для маршрута в заданный промежуток времени, используя параметр маршрута даты.
2 и 3 работают нормально, используя keyConditionExpression, но для 1 мне нужно использовать filterExpression для сканирования вместо запроса, который может сделать его относительно медленным, так как он выполняется после завершения запроса. Есть ли лучший способ сформировать схему?
В таблице Trips
схема как таковая
tripTable:
Type: "AWS::DynamoDB::Table"
Properties:
AttributeDefinitions:
[
{ "AttributeName": "id", "AttributeType": "S" },
{ "AttributeName": "date", "AttributeType": "S" },
{ "AttributeName": "Asset", "AttributeType": "S" },
{ "AttributeName": "Route", "AttributeType": "S" },
]
KeySchema:
[
{ "AttributeName": "date", "KeyType": "HASH" },
{ "AttributeName": "id", "KeyType": "RANGE" },
]
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
StreamSpecification:
StreamViewType: "NEW_AND_OLD_IMAGES"
TableName: ${self:provider.environment.TRIPS}
GlobalSecondaryIndexes:
- IndexName: TripsVSAssets
KeySchema:
- AttributeName: asset
KeyType: HASH
- AttributeName: date
KeyType: RANGE
Projection:
ProjectionType: ALL
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"
GlobalSecondaryIndexes:
- IndexName: RoutesVSAssets
KeySchema:
- AttributeName: route
KeyType: HASH
- AttributeName: date
KeyType: RANGE
Projection:
ProjectionType: ALL
ProvisionedThroughput:
ReadCapacityUnits: "5"
WriteCapacityUnits: "5"