[英]Handling very large databases in iOS
我想知道如何在iOS中處理非常大的數據庫嗎?
說明:
我正在為公司制作一個應用程序,它將負責所有日常交易和運營(這意味着每天幾百到幾千個 )。 該應用程序實際上僅顯示日常交易,但會將所有內容保留在數據庫中,以防萬一(因此我無法刪除它們)。
由於需要使應用程序具有高度的響應性,因此我正在尋找一種方法來高效地加載(核心數據提取)僅最新的操作,而從長遠來看,當數據庫變大時,不會降低速度。 知道每當操作更新時,我都會立即刷新顯示的表。
我在iOS上找不到任何有關此問題的文章,因此找不到任何好的做法或正確的處理方式。
在MySQL服務器上,我會這樣:*為日常的“活動”操作設置一個數據庫,完成后將其刪除,然后將其移至“完成的”操作數據庫。 *設置Cron作業以在夜間轉儲/備份每日/每月的數據庫,並在第二天有一個新的輕量級數據庫。
令人遺憾的是,似乎不可能在iOS上創建動態表,甚至無法創建“完成的”數據庫,這仍然需要在每次關閉操作時訪問較重的數據庫,這可能導致內存不足的崩潰。
實際上,我認為您可以嘗試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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.