Gewusst wie: migrieren von dynamodb-Daten, die auf großen Tabelle ändern?

Während der Entwicklung der Strukturen und Anforderungen ändern sich. Schlüssel und index-Einstellungen müssen geändert werden, das könnte brechen inkrementelle Tabelle aktualisieren. Also meine Lösung bisher ist, um die Tabelle zu löschen und es neu aus dem cloudformation-stack.

Aber wie dieses problem zu lösen mit der Produktion-Bereitstellung? Ist es möglich zu automatisieren dynamodb-Bereitstellung wie folgt?

  1. Sie auf neue Tabelle erstellen
  2. Migrieren der Daten aus der alten Tabelle in eine neue Tabelle
  3. Löschen Sie die alte Tabelle
InformationsquelleAutor nenTi | 2017-05-03



One Reply
  1. 2

    Ja, es ist durchaus möglich zu automatisieren solch einem Einsatz Struktur. Solange Sie code, um eine Tabelle zu erstellen, sollte es ziemlich einfach, um alle Daten von einer alten Tabelle, die Daten ändern, und dann laden Sie alle zu einer neuen Tabelle, ohne dass ein Tropfen in der Zeit. Wenn Sie schreiben, welche Sprache Sie gerne tun würden, solch eine Sache kann ich Ihnen helfen ein bisschen mehr.

    Habe ich dies getan, bevor und ich habe unten eine kleine generified code-Beispiel, wie Sie dies tun könnte in Java.

    Java-Methode für das erstellen einer Tabelle die Klasse der Objekt-Typ gespeichert dynamo:

     /**
     * Creates a single table with its appropriate configuration (CreateTableRequest)
     */
    public void createTable(Class tableClass) {
        DynamoDBMapper mapper = createMapper(); //you'll need your own function to do this.
    
        ProvisionedThroughput pt = new ProvisionedThroughput(1L, 1L);
        CreateTableRequest ctr = mapper.generateCreateTableRequest(tableClass);
        ctr.withProvisionedThroughput(new ProvisionedThroughput(1L, 1L));
    
        //Provision throughput and configure projection for secondary indices.
        if (ctr.getGlobalSecondaryIndexes() != null) {
            for (GlobalSecondaryIndex idx : ctr.getGlobalSecondaryIndexes()) {
                if (idx != null) {
                    idx.withProvisionedThroughput(pt).withProjection(new Projection().withProjectionType("ALL"));
                }
            }
        }
    
        TableUtils.createTableIfNotExists(client, ctr);
    }
    

    Java-Methode zum löschen der Tabelle:

    private static void deleteTable(String tableName) {
        AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
        DynamoDB dynamoDB = new DynamoDB(client);
        Table table = dynamoDB.getTable(tableName);
        try {
            System.out.println("Issuing DeleteTable request for " + tableName);
            table.delete();
            System.out.println("Waiting for " + tableName + " to be deleted...this may take a while...");
            table.waitForDelete();
    
        }
        catch (Exception e) {
            System.err.println("DeleteTable request failed for " + tableName);
            System.err.println(e.getMessage());
        }
    }
    

    Würde ich scan die gesamte Tabelle und plop, alle Inhalte in eine Liste und ordnen Sie dann durch, die Liste, die Umwandlung der Objekte in den neuen Typ, und erstellen Sie eine neue Tabelle, der Typ, aber mit verschiedenen Namen, schieben alle Ihre neuen Objekte, und löschen Sie dann die alte Tabelle nach dem einschalten alle Verweise, die Sie möglicherweise von der alten Tabelle in die neue. Leider bedeutet dies, dass alles, was verbraucht Ihre Tabellen gehen zu müssen, um in der Lage sein, um wechseln Sie zwischen Ihren beiden staging-Tabellen.

    • Ich bin mit javascript Endpunkt und wäre daran interessiert, den Graben tiefer in dieses Thema. Ist das nicht eigentlich ein häufiges problem zu sein mit einem gemeinsamen AWS-Lösung für Sie?
    • Ich glaube nicht, dass es irgendwelche AWS-docs auf, wie dies zu tun (vor allem bei javascript), aber ich werde das prüfen und versuchen, zurück zu Ihnen Recht bald.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.