1

我將嘗試描述我選擇好技術的問題。用於複製或簡單傳輸數據的數據庫

我有很多機器將數據本地存儲在數據庫中。有一臺客戶機擁有自己的數據庫。我需要的是從所有機器提取數據並存入客戶數據庫。 現在我已經開始實施一些RPC,但我不知道它的好主意。因爲我需要手動照顧每張桌子。數據庫是SQLite。

有什麼更好的。進行一些RPC調用或找到一些輕量級數據庫與複製?也許NoSQL db喜歡MonoDB?

+0

我有一個非常類似的設置,你有。你打算從其他數據庫中提取一些特定的數據,或者只是把它們全部和他們的數據放到你的客戶數據庫中? – Andy

+0

我可以說所有數據(到目前爲止有10個表) – userbb

回答

0

我有一個類似的設置,我有幾個服務器收集各種統計信息並存儲在sqlite3數據庫中。結合起來非常簡單。我有一個連接到每個服務器的python腳本,將每個數據庫文件下載到一個臨時文件夾中。然後我打開第一個,並使用連網的每一個文件,然後插入*每個表中的所有其他數據庫合併到一個聯合數據庫:

conn = connect('/tmp/database1.sl3'); 
curs = conn.cursor(); 

mergeDatabases(curs, 8); 

def mergeDatabases(curs, j): 
    for i in range(2, j): 
      print "merge in database%d" %i 
      print "ATTACH '/tmp/database%d.sl3' AS foo%d;" %(i,i) 
      curs.execute("ATTACH '/tmp/database%d.sl3' AS foo%d;" %(i,i))  
      curs.execute("insert into db select * from foo%d.db;" %i) 
      curs.execute("insert into vars select * from foo%d.vars;" %i) 

      curs.execute("detach foo%d;" %i) 
+0

合併之後,您需要在下次合併之前清除服務器數據庫?那麼不要下載整個已經下載的數據? – userbb

+0

如果你願意。那就是我所做的,因爲我現在在本地擁有數據庫文件,我不需要它在服務器上。在我的情況下,服務器空間也是有限的。 – Andy

+0

如何在複製數據庫之前鎖定數據庫,以便其他進程無法寫入它? – userbb