কী স্কিমায় গুণাবলীর সংখ্যা অবশ্যই অ্যাট্রিবিউট সংজ্ঞাতে সংজ্ঞায়িত গুণাবলীর সংখ্যার সাথে মেলে


114

আমি ডায়নামোডিবি জাভাস্ক্রিপ্ট শেল ব্যবহার করে একটি সাধারণ টেবিল তৈরি করার চেষ্টা করছি এবং আমি এই ব্যতিক্রম পাচ্ছি:


    {   
    "message": "The number of attributes in key schema must match the number of attributes defined in attribute definitions.",
    "code": "ValidationException",
    "time": "2015-06-16T10:24:23.319Z",
    "statusCode": 400,
    "retryable": false 
    }

আমি যে টেবিলটি তৈরি করতে চাইছি তার নীচে:


    var params = {
        TableName: 'table_name',
        KeySchema: [ 
            { 
                AttributeName: 'hash_key_attribute_name',
                KeyType: 'HASH',
            },

        ],
        AttributeDefinitions: [ 
            {
                AttributeName: 'hash_key_attribute_name',
                AttributeType: 'S', 
            },
            {
                AttributeName: 'attribute_name_1',
                AttributeType: 'S', 
            }
        ],
        ProvisionedThroughput: { 
            ReadCapacityUnits: 1, 
            WriteCapacityUnits: 1, 
        },


    };
    dynamodb.createTable(params, function(err, data) {
        if (err) print(err); 
        else print(data); 
    });

তবে যদি আমি কীস্কেমাতে দ্বিতীয় বৈশিষ্ট্য যুক্ত করি তবে এটি দুর্দান্ত কাজ করে। কার্যকারী টেবিলের নীচে:


    var params = {
        TableName: 'table_name',
        KeySchema: [ 
            { 
                AttributeName: 'hash_key_attribute_name',
                KeyType: 'HASH',
            },
            { 
                AttributeName: 'attribute_name_1', 
                KeyType: 'RANGE', 
            }

        ],
        AttributeDefinitions: [ 
            {
                AttributeName: 'hash_key_attribute_name',
                AttributeType: 'S', 
            },
            {
                AttributeName: 'attribute_name_1',
                AttributeType: 'S', 
            }
        ],
        ProvisionedThroughput: { 
            ReadCapacityUnits: 1, 
            WriteCapacityUnits: 1, 
        },


    };
    dynamodb.createTable(params, function(err, data) {
        if (err) print(err); 
        else print(data); 
    });

আমি কী স্কিমায় ব্যাপ্তি যুক্ত করতে চাই না। এটি ঠিক করার কোন ধারণা?


এটি কি কেবল ডায়নামোডিবিলোকালের বিরুদ্ধে ঘটবে? আপনি যখন প্রকৃত পরিষেবার বিরুদ্ধে একই জিনিস করার চেষ্টা করবেন তখন কী ঘটে?
এমকোবিট

আমার কাছে এখনও AWS অ্যাকাউন্ট নেই, তাই এটি প্রকৃত পরিষেবার বিরুদ্ধে পরীক্ষা করতে পারিনি। আমি ডায়নামোডিবি স্থানীয় (ডায়নামডবি_লোকাল_2015-04-27_1.0) এর সর্বশেষতম সংস্করণটি ব্যবহার করছি।
NAbbas

4
আমি ডিনামোডবি_লোকাল_2016-04-19
ক্রিস

4
কিছুই নয়, মিংলিয়ংয়ের টিএল; ডিআর সব বলে।
ক্রিস

উত্তর:


242

TL; DR এ কোনও অ-কী বৈশিষ্ট্য সংজ্ঞা অন্তর্ভুক্ত করবেন না AttributeDefinitions

ডায়নামোডিবি স্কিমহীন (মূল স্কিমা ব্যতীত)

এর অর্থ হল, আপনি টেবিলটি তৈরি করার সময় আপনার কী স্কিমা (বৈশিষ্ট্যটির নাম এবং প্রকার) নির্দিষ্ট করতে হবে। ভাল, আপনার কোনও অ-কী বৈশিষ্ট্য নির্দিষ্ট করার দরকার নেই। আপনি কোনও বৈশিষ্ট্যযুক্ত কোনও আইটেম পরে রাখতে পারেন (অবশ্যই কীগুলি অবশ্যই অন্তর্ভুক্ত থাকবে)।

থেকে ডকুমেন্টেশন পৃষ্ঠাটিতে , AttributeDefinitionsহিসাবে সংজ্ঞায়িত করা হয়:

টেবিল এবং সূচকগুলির জন্য কী স্কিমাকে বর্ণনা করে এমন একটি বৈশিষ্ট্যের অ্যারে।

আপনি যখন টেবিল তৈরি করেন, AttributeDefinitionsক্ষেত্রটি কেবল হ্যাশ এবং / অথবা রেঞ্জ কীগুলির জন্য ব্যবহৃত হয়। আপনার প্রথম ক্ষেত্রে, হ্যাশ কীটি কেবল (নম্বর 1) থাকে যখন আপনি 2 টি অ্যাট্রিবিউটডফিনিশন সরবরাহ করেন। এটি ব্যতিক্রমের মূল কারণ।


11
আমি বিশ্বাস করি এক ব্যতিক্রম সহ, AttributeDefinitionsযদি কীটি hashrange
সূচকটিতে

25

আপনি যখন নন-কী বৈশিষ্ট্যটি ব্যবহার করেন "AttributeDefinitions", আপনাকে অবশ্যই এটি সূচক হিসাবে ব্যবহার করতে হবে, অন্যথায় এটি ডায়নামোডিবি কাজ করার পথে নয়। লিঙ্কটি দেখুন ।

সুতরাং আপনি "AttributeDefinitions"যদি সূচক বা প্রাথমিক কী হিসাবে এটি ব্যবহার না করেন তবে কোনও নন-কী বৈশিষ্ট্য রাখার দরকার নেই ।

var params = {
        TableName: 'table_name',
        KeySchema: [ // The type of of schema.  Must start with a HASH type, with an optional second RANGE.
            { // Required HASH type attribute
                AttributeName: 'UserId',
                KeyType: 'HASH',
            },
            { // Optional RANGE key type for HASH + RANGE tables
                AttributeName: 'RemindTime', 
                KeyType: 'RANGE', 
            }
        ],
        AttributeDefinitions: [ // The names and types of all primary and index key attributes only
            {
                AttributeName: 'UserId',
                AttributeType: 'S', // (S | N | B) for string, number, binary
            },
            {
                AttributeName: 'RemindTime',
                AttributeType: 'S', // (S | N | B) for string, number, binary
            },
            {
                AttributeName: 'AlarmId',
                AttributeType: 'S', // (S | N | B) for string, number, binary
            },
            // ... more attributes ...
        ],
        ProvisionedThroughput: { // required provisioned throughput for the table
            ReadCapacityUnits: 1, 
            WriteCapacityUnits: 1, 
        },
        LocalSecondaryIndexes: [ // optional (list of LocalSecondaryIndex)
            { 
                IndexName: 'index_UserId_AlarmId',
                KeySchema: [ 
                    { // Required HASH type attribute - must match the table's HASH key attribute name
                        AttributeName: 'UserId',
                        KeyType: 'HASH',
                    },
                    { // alternate RANGE key attribute for the secondary index
                        AttributeName: 'AlarmId', 
                        KeyType: 'RANGE', 
                    }
                ],
                Projection: { // required
                    ProjectionType: 'ALL', // (ALL | KEYS_ONLY | INCLUDE)
                },
            },
            // ... more local secondary indexes ...
        ],
    };
    dynamodb.createTable(params, function(err, data) {
        if (err) ppJson(err); // an error occurred
        else ppJson(data); // successful response
    });

2

আমারও এই সমস্যা ছিল এবং আমি যদি এখানে অন্য কাউকে সহায়তা করে তবে আমার জন্য কী ভুল হয়েছে তা এখানে পোস্ট করব।

আমার সালে CreateTableRequest, আমি জন্য একটি খালি অ্যারে ছিল GlobalSecondaryIndexes

CreateTableRequest createTableRequest = new CreateTableRequest
{
  TableName = TableName,
  ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = 2, WriteCapacityUnits = 2 },
  KeySchema = new List<KeySchemaElement>
  {
     new KeySchemaElement
     {
        AttributeName = "Field1",
        KeyType = KeyType.HASH
     },
     new KeySchemaElement
     {
        AttributeName = "Field2",
        KeyType = KeyType.RANGE
     }
  },
  AttributeDefinitions = new List<AttributeDefinition>()
  {
     new AttributeDefinition
     {
         AttributeName = "Field1", 
         AttributeType = ScalarAttributeType.S
     },
     new AttributeDefinition
     {
        AttributeName = "Field2",
        AttributeType = ScalarAttributeType.S
     }
  },
  //GlobalSecondaryIndexes = new List<GlobalSecondaryIndex>
  //{                            
  //}
};

টেবিল তৈরিতে এই লাইনগুলি মন্তব্য করা আমার সমস্যার সমাধান করেছে। সুতরাং আমি অনুমান করি তালিকাটি nullখালি নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.