我想知道如何在iOS中处理非常大的数据库?
说明:
我正在为该公司制作应用程序,它将持有所有日常交易和操作(这意味着数百至每天数千)。 该应用程序实际上只显示每日交易,但保留数据库中的所有内容以防万一(因此我无法删除它们)。
由于需要应用程序具有高度反应性,我正在寻找一种方法来有效地加载(Core Data Fetch)最新操作,而不会在数据库变得非常大的情况下长时间放慢速度。 知道每当操作更新时,我立即刷新显示的表。
我在iOS上找不到任何与此相关的文章,所以我找不到任何好的做法或正确的方法来处理它。
在MySQL服务器上,我会这样做: *为每日“活动”操作设置一个DB,完成后删除它们并将它们移动到“已完成”操作DB。 *设置一个Cron作业,以便在晚上转储/备份每日/每月数据库,并在第二天使用新的轻量级数据库。
可悲的是,似乎无法在iOS上创建动态表,甚至创建“已完成”的数据库,这仍然需要在每次关闭操作时访问繁重的数据库,这可能导致内存崩溃。
答案 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;