2017-11-23 4 views
0

Ich habe eine einfache Tabelle in meiner DynamoDB, und ich möchte eine einfache Abfrage tun, nur eine Liste, wo status = activeAbfrage in DynamoDB ohne Global Index

const AWS = require('aws-sdk'); 
const config = require('../../../../config/dynamo'); 

const { URI } = config; 

AWS.config.update({ 
    region: 'us-east-1' 
}); 

const dynamodb = new AWS.DynamoDB({ 
    endpoint: new AWS.Endpoint(URI) 
}); 

const params = { 
    AttributeDefinitions: [{ 
    AttributeName: 'idPhysicalPerson', 
    AttributeType: 'N' 
    }, 
    { 
    AttributeName: 'cpf', 
    AttributeType: 'S' 
    }], 
    KeySchema: [{ 
    AttributeName: 'idPhysicalPerson', 
    KeyType: 'HASH' 
    }, 
    { 
    AttributeName: 'cpf', 
    KeyType: 'RANGE' 
    }], 
    ProvisionedThroughput: { 
    ReadCapacityUnits: 5, 
    WriteCapacityUnits: 5 
    }, 
    TableName: 'PhysicalPerson' 
}; 
dynamodb.createTable(params, (err, data) => { 
    if (err) { 
    console.log(err, err.stack); 
    } else { 
    console.log(data); 
    } 
}); 

diese Tabelle eine Menge von Eigenschaften enthält, und wenn ich Willst du eine einfache Abfrage durchführen, muss ich diese Felder immer in einen globalen Index setzen?

Ich möchte nur alle Daten erhalten, die den active Status hat, aber in einer realen Anwendung, wenn ich eine Funktion wie advanced filter, wo ich eine Menge von Eigenschaften festlegen können, Wie kann dies in DynamoDB behandelt werden whitout setzen alle Eigenschaften in Globaler Index?

Antwort

1

Sie suchen nach dem scan feature.

In DynamoDB ist das nicht empfehlenswert, wenn Sie einen großen Datensatz haben (because it reads the entire dataset before returning what you want).

Sie können einen Verbundsortierschlüssel zu tun, wo alle Ihre Daten verfügbar sind:

cpf_otherValue_otherValue2_...

Vielleicht nicht alle, aber die zwei Drittel am häufigsten verwendete und Abfrage mit begins_withhttp://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression

Oder vielleicht, wenn Sie erweiterte Suchfunktion haben, wäre es besser, ein ElasticSearch-Cluster anstelle von DynamoDB zu haben: DynamoDB ist ein Schlüssel/Wert-Speicher, der große Dataset und hohen Durchsatz unterstützt, erweiterte Suchfunktion ist kein häufiger Anwendungsfall: aber wieder, wenn Sie haben nicht zu viele Daten, ich Das kann funktionieren.

Verwandte Themen