簡體   English   中英

在iOS中處理超大型數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM