无法在cloudant DB中更快地获取数据

时间:2015-04-16 13:02:58

标签: ios objective-c cloudant ibm-cloud

我正在使用云蚂蚁Db为我的iOS应用程序,名称为tasks_master,有近1000个文档。当我尝试从云端获取数据时,它花费了将近30秒的时间来获取我在下面的代码中尝试过的数据。

- (NSURL*) replicatorURL {    
    AppDelegate *app = [[UIApplication sharedApplication]delegate];       
    NSString *db_name = @"tasks_master";

    NSString *url = [NSString stringWithFormat:@"https://%@:%@@%@.cloudant.com/%@",
                 username,
                 password,
                 username,db_name];
    return [NSURL URLWithString:url];
}

- (void) sync:(UIViewController *)sender {
    [self pullReplication:sender];
    [self pushReplication:sender];
}


-(void)pullReplication:(UIViewController *)sender {
    [self log:@"Starting pull replication"];       
    NSURL *url = [self replicatorURL];

    AppDelegate *delegate1 = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    CDTReplicatorFactory *factory = delegate1.replicatorFactory;

    CDTReplicator *replicator = [factory onewaySourceURI:url targetDatastore:delegate1.datastore];
    [self startAndFollowReplicator:replicator label:@"pull"];
}

- (void) pushReplication:(UIViewController *)sender {   
    [self log:@"Starting push replication"];

    NSURL *url = [self replicatorURL];
    AppDelegate *delegate1 = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    CDTReplicatorFactory *factory = delegate1.replicatorFactory;
    CDTReplicator *replicator = [factory onewaySourceDatastore:delegate1.datastore targetURI:url];
    [self startAndFollowReplicator:replicator label:@"push"];
}

当我打电话给任务时

-(void)fetchtasks{
[[[CDTTodoReplicator alloc]init]sync];

self.indexManager = [[CDTIndexManager alloc] initWithDatastore:self.datastore

                                                         error:&error];   

indexName= [self.datastore ensureIndexed:@[@"originator",@"members",@"meeting_status"] withName:@"meeting_index"];  




query=@{@"$and":@[@{@"meeting_status":@"Scheduled"},                    @{@"$or":@[@{@"originator":app.userName},@{@"members":app.userName}]}]};


result = [self.datastore find:query];

}

任何人都可以帮助我更快地获取数据。

1 个答案:

答案 0 :(得分:3)

我已经写了一个小帮手类来减少一些锅炉板用于此类事情。它是上面引用的视频中使用的那个。

Cloudant.h https://gist.github.com/xpqz/f8b304353080c3963a45

Cloudant.m https://gist.github.com/xpqz/62b5267c250f04c30f9b

将文档添加到Cloudant数据库时,它们可通过所谓的主索引(也称为所有文档)获得。这可以通过' curl'轻松检查。从命令行,例如:

% curl https://skruger.cloudant.com/routes/_all_docs

您存储的每个文档都将显示在主索引的返回数据中。

设计文档有不同的用途 - 它们定义了二级索引,称为视图,主要编写为小javascript函数,定义了map-reduce操作以公开数据的某些方面。视图允许您以其他方式索引文档,以获得免费获得的文档ID。

您可以通过自己创建设计文档直接创建自己的视图,但访问数据库的客户端软件有时也会自动创建设计文档和视图,当您看到_design下出现的内容时,您可能会感到困惑创建

总结:每个文档都出现在主索引_all_docs中。设计文档用于保存用于生成二级索引的javascript函数,称为视图。这些可以明确创建,也可以在您的背后自动生成。通过客户端软件。

更多信息:

  1. Primary index and all docs
  2. Design documents and secondary indexes
  3. Search indexes and Lucene
  4. 的Stefan