Java 保存dynamoDB表的最佳文件格式是什么?

Java 保存dynamoDB表的最佳文件格式是什么?,java,database,amazon-web-services,backup,amazon-dynamodb,Java,Database,Amazon Web Services,Backup,Amazon Dynamodb,因为我在Amazon上的管道有很多问题,所以我决定使用java将我的数据库备份到文件中。我的表是50GB,那么我需要最好的方式来保存它。 这是读取元素并将其写入文件的java代码: public static void fetchItems() { try{ FileWriter file=new FileWriter(path); ScanResult result = null; long sum=0; do{

因为我在Amazon上的管道有很多问题,所以我决定使用java将我的数据库备份到文件中。我的表是50GB,那么我需要最好的方式来保存它。 这是读取元素并将其写入文件的java代码:

public static void fetchItems() {
    try{
        FileWriter file=new FileWriter(path);
        ScanResult result = null;
        long sum=0;
        do{
            ScanRequest req = new ScanRequest();
            req.setTableName(dataTable);

            if(result != null){
                req.setExclusiveStartKey(result.getLastEvaluatedKey());
            }

            result = dynamoDB.scan(req);
            List<Map<String, AttributeValue>> rows = result.getItems();

            for(Map<String, AttributeValue> map : rows){
                try{
                    JSONObject json=new JSONObject(map);
                    file.write(json.toString());
                } catch (NumberFormatException e){
                    System.out.println(e.getMessage());
                } catch (IOException e) {
                    System.out.println(e.getMessage());

                }
            }
            sum+= result.getItems().size();
            System.out.println("Result size: " + sum);

        } while(result.getLastEvaluatedKey() != null);
        file.flush();
        file.close();
    }catch(IOException e){
        System.out.println(e.getMessage());
publicstaticvoidfetchitems(){
试一试{
FileWriter文件=新的FileWriter(路径);
ScanResult结果=空;
长和=0;
做{
ScanRequest req=新的ScanRequest();
请求setTableName(数据表);
如果(结果!=null){
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
结果=发电机扫描(req);
列表行=result.getItems();
用于(地图:行){
试一试{
JSONObject json=新的JSONObject(映射);
file.write(json.toString());
}捕获(数字格式){
System.out.println(e.getMessage());
}捕获(IOE异常){
System.out.println(e.getMessage());
}
}
sum+=result.getItems().size();
System.out.println(“结果大小:+sum”);
}while(result.getLastEvaluatedKey()!=null);
flush()文件;
file.close();
}捕获(IOE异常){
System.out.println(e.getMessage());
文件的扩展名是什么?如何保存数据? 在我的代码中,文件太大,很多字段为空(新JSONObject(map)存在问题),有人有想法吗? 在我找到的文件中:

{“租赁业主”:{“SS”:null,“BS”:null,“b”:null,“s”:“ip-120-115-91-22346.eu-west-1.compute.internal:ef5c43f7-f5b7-49cf-99e6-8601db2922e2”,“n”:null,“l”:null,“m”:null,“null”:null,“布尔”:null},“leaseKey”:{“SS”:null,“BS”:null,“b”:null,“s”:“Sharded-000000000002”,“n”:null,“l”:null,“NS”:null,“m”:null,“null”,null,“布尔”:null,},“OwnersSwitchessinceCheckpoint:{“SS”:null,“BS”:null,“b”:null,“s”:null,“n”:“0”,“l”:null,“NS”:null,“m”:null,“BOOL”:null},“checkpoint:{“SS”:null,“BS”:null,“b”:null,“s”:“4955156731479336289724454124452290470154007534402”,“n”:null,“l”:null,“l”:null,“NS”:null,“m”:null,“null”,null,“BOOL”:null},“leaseCounter:{“SS”:null,“BS”:null,“b”:null,“b”:null,“s“:null,“n”:“34905”,“l”:null,“NS”:null,“m”:null,“null”:null,“BOOL”:null}}{“租赁所有者”:{“SS”:null,“BS”:null,“b”:null,“s”:“ip-120-115-91-22346.eu-west-1.计算.内部:ef5c43f7-f5b7-49cf-99e6-8601db2922e2”,“n”:null,“l”:null,“m”:null,“null,“null”,null,“null,“null”,null,“BOOL”:null},“leaseKey:{“SS”:null”,null,“null”,null,“s”:null,“s:”{“SS”:null”,null,“null,“null”,null,“s”:000000”,sharn:“sharn”:::::“l”:”:null,“NS”:null,“m”:null,“null”:null,“BOOL”:null},“ownerswitchessincescheckpoint”:{“SS”:null,“BS”:null,“b”:null,“b”:null,“b”:null,“n”:“0”,“l”:null,“NS”:null,“m”:null,“null”,null,“BOOL”:null},“checkpoint”:{“SS”:null,“BS”:null,“b”:null,“s”:“4955156733104347347927392878132951197327927446370”,“n”:null,“l”:null,“NS”:null,“m”:null,“BOOL”:null,“BOOL”,“租赁计数器”:{“SS”:null,“BS”:null,“b”:null,“s”:null,“n”:“34913”,“l”:null,“NS”:null,“m”:null,“null”:null,“BOOL”:null}{“租赁所有者”:{“SS”:null,“BS”:null,“b”:null,“s”:“ip-120-115-91-22346.eu-west-1.计算。内部:ef5c43f7-f5b7-49cf-99e6-8601DB2922E22”,“n”:null,“l”:null,“NS”:null,“m”:null,“null”,null,“BOOL”:null,“BLUEEKEY”,null“{:“:null,“s”:“shardId-000000000001”,“n”:null,“l”:null,“NS”:null,“m”:null,“null”:null,“BOOL”:null},“ownerswitchessncecheckpoint”:{“SS”:null,“BS”:null,“b”:null,“s”:null,“n”:“0”,“l”:null,“NS”:null,“m”:null,“null”,“null”:null,“checkpoint”:{“SS”:null,“BS”:null,“b”:null,“s”:“49551567310470355444923501290796040147120685904178”,“n”:null,“l”:null,“NS”:null,“m”:null,“null”:null,“BOOL”:null},“leaseCounter”:{“SS”:null,“BS”:null,“b”:null,“s”:null,“n”:“34912”,“l”:null,“NS”:null,“m”:null,“null”:null,“BOOL”:null}

之后,我将不得不实施还恢复应用程序。
谢谢

我是用csv格式写的,看起来最简洁。第一行应该包含字段名(有点像excel标题)因此,它们不会每行重复一次,并且仍然能够解析文件。空值只是相邻的逗号。

在映射值中没有空值,这些值是由JsonObject创建的。我可以尝试使用csv,但我认为它会创建一个非常大的文件,比dynamo表更大。这取决于表中的项是否共享大多数属性或者每个项目都有一个完全不同的“模式”(属性)。csv对于接近rdbms样式的表是一个很好的选择(大多数属性在大多数项目中都存在)。好的,现在我正在尝试恢复,但是字符“s”给出了问题,因为它表示后面的值的类型:但是,当我阅读并将其放入dynamo时,系统没有识别出它。我不理解问题所在。我认为最好是你打开一个新问题,详细说明问题。我认为,如果你也尝试解决数据管道问题,可能会更好。数据管道提供了一些有用的功能,需要重新发明。示例:是自动调节读取吞吐量,以确保备份作业不会导致实时流量读取受到限制。简言之,自己动手意味着重新发明吞吐量管理、cron、错误处理和通知、数据格式管理、筛选等功能。