Я закладываю таблицу DynamoDB с использованием функции импорта, доступной для таблицы. В моей таблице есть GSI. Я устанавливаю единицы емкости записи в 8K для GSI и таблицы.DynamoDB низкая потребляемая емкость записи с GSI
Но когда я запускаю конвейер данных, чтобы засыпать данные из s3. Мое количество потребляемой мощности достигает максимум 4k для таблицы GSI AND. Но когда я пробовал то же самое без GSI, моя потребительская емкость достигает ~ 8K.
Datapipeline configuration.
{
"objects": [
{
"failureAndRerunMode": "CASCADE",
"resourceRole": "DataPipelineDefaultResourceRole",
"role": "DataPipelineDefaultRole",
"pipelineLogUri": "s3://logger/logs/",
"scheduleType": "ONDEMAND",
"name": "Default",
"id": "Default"
},
{
"output": {
"ref": "DDBDestinationTable"
},
"input": {
"ref": "S3InputDataNode"
},
"maximumRetries": "2",
"name": "TableLoadActivity",
"step": "s3://dynamodb-emr-#{myDDBRegion}/emr-ddb-storage-handler/2.1.0/emr-ddb-2.1.0.jar,org.apache.hadoop.dynamodb.tools.DynamoDbImport,#{input.directoryPath},#{output.tableName},#{output.writeThroughputPercent}",
"runsOn": {
"ref": "EmrClusterForLoad"
},
"id": "TableLoadActivity",
"type": "EmrActivity",
"resizeClusterBeforeRunning": "false"
},
{
"writeThroughputPercent": "#{myDDBWriteThroughputRatio}",
"name": "DDBDestinationTable",
"id": "DDBDestinationTable",
"type": "DynamoDBDataNode",
"tableName": "#{myDDBTableName}"
},
{
"taskInstanceType": "m3.xlarge",
"bootstrapAction": "s3://#{myDDBRegion}.elasticmapreduce/bootstrap-actions/configure-hadoop, --mapred-key-value,mapreduce.map.speculative=false",
"taskInstanceCount": "5",
"name": "EmrClusterForLoad",
"coreInstanceCount": "1",
"coreInstanceType": "m3.xlarge",
"amiVersion": "3.8.0",
"id": "EmrClusterForLoad",
"masterInstanceType": "m3.xlarge",
"region": "#{myDDBRegion}",
"type": "EmrCluster"
},
{
"directoryPath": "#{myInputS3Loc}",
"name": "S3InputDataNode",
"id": "S3InputDataNode",
"type": "S3DataNode"
}
],
"parameters": [
{
"description": "Input S3 folder",
"id": "myInputS3Loc",
"type": "AWS::S3::ObjectKey"
},
{
"description": "Target DynamoDB table name",
"id": "myDDBTableName",
"type": "String"
},
{
"default": "0.25",
"watermark": "Enter value between 0.1-1.0",
"description": "DynamoDB write throughput ratio",
"id": "myDDBWriteThroughputRatio",
"type": "Double"
},
{
"default": "us-east-1",
"watermark": "us-east-1",
"description": "Region of the DynamoDB table",
"id": "myDDBRegion",
"type": "String"
}
],
"values": {
"myDDBRegion": "us-west-2",
"myDDBTableName": "KNEX_NODE",
"myDDBWriteThroughputRatio": "1",
"myInputS3Loc": "s3://DataToLoad/sampleData/"
}
}
Любые предложения по достижению максимальной пропускной способности записи для записи с помощью GSI?
Я думаю, что максимальная пропускная способность для раздела для динамо составляет 3k. И он разбивает таблицу, если требуется большая пропускная способность, чем это, или когда размер увеличивается более чем на 10 ГБ. Но я получаю максимальную пропускную способность 4k для таблицы и gsi. Но когда я засыпал без gsi, я получаю 8k за стол. И hashkeys как социальные идентификаторы, которые они однородно распределены. Для GSI я использую lastUpdated date. – user2980749
1) никто не знает максимальную пропускную способность на раздел. (за исключением амазонок), и они не хотят говорить. Я думаю, что его 1k из некоторых экспериментов я сделал. 2) lastUpdated date не является хорошим распределением, если ваши записи упорядочены этим. подумайте, что ваши первые 1M-записи находятся на той же последней дате обновления. в этом случае dynamodb имеет очень плохое распространение, и он будет разделять разделы при обновлении db. в этом случае вам необходимо удалить записи перед обновлением db. –
Я ошибался в том, чтобы переразделить его 1K на раздел для записи и 3k для чтения. http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html Я перетасовываю записи перед засыпкой. – user2980749