gpt4 book ai didi

ios - (iOS) 离线同步数据库 - 服务器

转载 作者:IT王子 更新时间:2023-10-29 06:22:58 26 4
gpt4 key购买 nike

尝试实现一个应用程序,该应用程序在连接到互联网时将存储在本地数据库中的离线数据发送到网络服务器。我使用下面显示的代码。据我测试,它工作正常,不确定它是否适用于大量记录。我想知道对此代码进行任何调整是否可以提高性能???

注意

  • 我知道这对于离线同步来说是最糟糕的代码,所以尝试更好地调整它。
  • 它是从应用程序到服务器的单向同步。

    -(void)FormatAnswersInJSON {

    DMInternetReachability *checkInternet = [[DMInternetReachability alloc] init];
    if ([checkInternet isInternetReachable]) {
    if ([checkInternet isHostReachable:@"www.apple.com"]) {//Change to domain
    responseArray = [[NSMutableArray alloc] init];

    dispatch_async(backgroundQueue, ^(void) {

    NSArray *auditIDArray = [[NSArray alloc] initWithArray: [self getUnuploadedIDs]];
    for (int temp = 0; temp < [auditIDArray count]; temp ++) {

    // Code to post JSON to server

    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    if (!error) {
    NSString *responseID = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    if ([responseID isEqualToString:@"ERROR"]) {
    //Error uploading records
    } else {
    [responseArray addObject:responseID];
    }
    } else {
    //Error
    return;
    }
    }
    dispatch_async( backgroundQueue, ^{

    /* Based on return code update local DB */
    for (int temp = 0; temp < [responseArray count]; temp ++) {
    [self updateRecordsForID:[auditIDArray objectAtIndex:temp] withID:[responseArray objectAtIndex:temp]];
    }
    });
    });
    }
    }
    }

    - (void)upload { //Called when internet connection available

    if(backgroundQueue){
    dispatch_suspend(backgroundQueue);
    dispatch_release(backgroundQueue);
    backgroundQueue = nil;
    }
    backgroundQueue = dispatch_queue_create("com.XXXX.TestApp.bgqueue", NULL);
    dispatch_async(backgroundQueue, ^(void) {
    [self FormatAnswersInJSON];
    });
    }

最佳答案

如果这段代码摆在我面前,我的做法是:

  • 查看用例并定义“大量记录”:一次 50 条记录更新会定期发生吗?或者它会在 1s 和 2s 中?我的用户有 wifi 连接还是通过付费网络连接?等等。
  • 如果可能,请在野外进行测试。如果我的用户群足够小,请收集真实数据并以此指导我的决策,或者仅将功能发布给一部分用户/beta 测试和衡量。
  • 如果数据告诉您,请优化此代码以提高效率。

我的优化途径是进行组处理。粗略的算法是这样的:

for records in groups of X
collect
post to server {
on return:
gather records that updated successfully
update locally
}

这假定您可以修改服务器代码。您可以以 10、20、50 等为一组进行分组。这一切都取决于发送的数据类型和大小。

组算法意味着更多的预处理客户端,但有减少 HTTP 请求的优点。如果您只想获得少量更新,这是 YAGNI和过早的优化。

不要让这个决定阻止您发货!

关于ios - (iOS) 离线同步数据库 - 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com