在iOS中处理非常大的数据库

时间:2014-08-20 02:57:17

标签: ios core-data ios7

我想知道如何在iOS中处理非常大的数据库?

说明:

我正在为该公司制作应用程序,它将持有所有日常交易和操作(这意味着数百至每天数千)。 该应用程序实际上只显示每日交易,但保留数据库中的所有内容以防万一(因此我无法删除它们)。

由于需要应用程序具有高度反应性,我正在寻找一种方法来有效地加载(Core Data Fetch)最新操作,而不会在数据库变得非常大的情况下长时间放慢速度。 知道每当操作更新时,我立即刷新显示的表。

我在iOS上找不到任何与此相关的文章,所以我找不到任何好的做法或正确的方法来处理它。

在MySQL服务器上,我会这样做: *为每日“活动”操作设置一个DB,完成后删除它们并将它们移动到“已完成”操作DB。 *设置一个Cron作业,以便在晚上转储/备份每日/每月数据库,并在第二天使用新的轻量级数据库。

可悲的是,似乎无法在iOS上创建动态表,甚至创建“已完成”的数据库,这仍然需要在每次关闭操作时访问繁重的数据库,这可能导致内存崩溃。

1 个答案:

答案 0 :(得分:0)

实际上我认为您可以尝试使用sqlite api来匹配MySQL服务器中的相同操作。但是,您必须删除CoreData并重写所有内容,即TableView,TableCell等。 像这样处理DataSource:

sqlite3 * tradeDB;
sqlite3_open_v2([path UTF8String], &tradeDB, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nil);
sqlite3_stmt * recordset;
int res = sqlite3_prepare_v2(tradeDB, "select count(*) from someTable", -1, &recordset, nil);
if (res!=SQLITE_OK) {
    return nil;
}//end if

res = sqlite3_step(recordset);
if (res!=SQLITE_ROW) {
    _result = nil;
}else{
    char * res_char = (char*)sqlite3_column_text(recordset, 0);
    if (!res_char)
        _result = nil;
    else
        _result = [NSString stringWithUTF8String:res_char];
    //end if
}//end if
sqlite3_finalize(recordset);

if (!_result) {
    _result = @"0";
}//end if
return self;