2012-05-29 37 views
1

我在使用C++ linux的應用程序中的sqlite數據庫中工作。我有一個要求在另一臺機器上覆制sqlite數據庫。關於sqlite複製

爲此,由於sqlite沒有複製機制,也沒有任何網絡API,我想用C++ fstream讀取sqlite db文件並在另一臺機器上創建一個新的db文件。

我掙扎了一天。

任何人都可以幫助我。

下面是代碼:

ifstream _fstream; 
_fstream.open("Sourcefile",ios::in); 
ofstream _ostream; 
_ostream.open("ReplicatedFile",ios::out); 
_ostream << _fstream; 
_ostream.close(); 
_fstream.close(); 

回答

1

你可能想看看內置的SQLite Backup API允許對數據庫的在線備份。這可以用來創建一種複製形式,您當然必須自己將文件移動到遠程位置(如果需要)。可能最好使用sqlite_backup_*()函數,而不是直接訪問文件,因爲sqlite函數會鎖定數據庫。

+0

是啊...像你說的,我使用的備份API來創建備份。創建備份後,我想將備份文件移動到遠程位置。爲此,我正在嘗試使用io streams類。你能幫我怎麼做到嗎? –

0

隨着數據庫變得越來越大,複製它將是一個壞主意。

您可以改爲使用litereplica

它會在其他機器上保留數據庫的副本。

您將需要替換應用程序中的sqlite3.c文件或鏈接到庫。

0

我知道原帖是舊的,但這可能會幫助其他人有類似的問題。我不確定這是否是您想要的,但是如果您需要跨多個服務器(分佈式)執行復制,則Rqlite可能適合您。

rqlite是一個分佈式關係數據庫,它使用SQLite作爲其存儲引擎。 rqlite使用Raft在SQLite數據庫的所有實例之間達成一致,確保對系統進行的每一項更改都是針對SQLite數據庫的法定數量進行的,或者根本沒有。

,你可以在這裏閱讀更多: http://www.philipotoole.com/replicating-sqlite-using-raft-consensus/

希望它能幫助,