3

開発の構造および要件の変更中。キーとインデックスの設定を変更する必要があるため、増分テーブルの更新が壊れる可能性があります。だから今の私の解決策は、テーブルを削除し、それを雲の構造から再作成することです。 メジャーテーブルの変更時にdynamodbデータを移行するにはどうすればよいですか?

しかし、どのように生産の展開でこの問題を解決するには?以下のようにdynamodbのデプロイメントを自動化することは可能ですか?

  1. 古いテーブルを削除します

答えて

2

  • 新しいテーブルに新しいテーブルに古いテーブルから
  • 移行データを作成しますはい、このような展開構造を自動化することは完全に可能です。テーブルを作成するコードを持っている限り、古いテーブルからすべてのデータを取得し、データを変更してから、すべてのデータを新しいテーブルにアップ・タイムでドロップする必要はありません。あなたがそのようなことをしたい言語を書いたら、もう少し手伝ってください。

    私は前にこれをやったと私はあなたがJavaでこれを行うことができますどのように小さな総称化コードサンプルの下に追加しました。

    ダイナモに格納されたオブジェクトタイプのクラス指定されたテーブル作成のためのJavaメソッド:テーブルを削除する

    /** 
    * 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メソッドを:

    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()); 
        } 
    } 
    

    Iは、テーブル全体をスキャンし、すべてのウンチになりますそのリストをマップしてオブジェクトを新しいタイプに変換し、そのタイプの新しいテーブルを別の名前で作成し、新しいオブジェクトをすべてプッシュしてから、古いテーブルを削除してから古いテーブルの参照を切り替える新しいものへ。残念ながら、これは、テーブルを消費するすべてが2つのステージングテーブルを切り替える必要があることを意味します。

  • +0

    私はjavascriptのエンドポイントを使用していますが、このトピックを深く掘りに興味があると思います。これは一般的なAWSソリューションの共通の問題ではないと思われますか? – nenTi

    +0

    これを行う方法(特にjavascriptで)にはAWSのドキュメントはありませんが、私はそれを調べて、すぐにあなたに連絡してみます。 –

    関連する問題