2016-02-12 28 views
0

要使用PHP web應用程序同步到源碼數據庫MySQL數據庫SQLite的同步,我要MySQL來從PHP到移動應用(iOS/Android設備)

  1. 創建SQLITE表的「視圖」鏡在MySQL
  2. 在MySQL選擇更改過的數據上鏡「視圖」
  3. 使用mysqldump來轉儲源碼的SQL,並將其保存在文件服務器上
  4. 從移動
  5. 導入數據文件直接到源碼下載

另一方法將不使用中間「視圖」表和轉儲數據使用「選擇」或mysqldump和解析它的裝置或服務器上,所以這將是由源碼

可讀是有什麼缺點是爲SQLITE在客戶端設備上需要的每個表創建鏡像「視圖」?或者是否有另一種「標準」方式來同步這兩個我在互聯網上沒有找到的方法?

編輯:搜索和編碼後一些更多的我終於決定去像這樣:

  1. 打造「插入......」爲從服務器上PHP源碼聲明並將其保存到一個壓縮文件
  2. 下載在移動設備上的文件,並插入提取SQL直接SQLITE

這裏是用於生成mysqldump的像輸出的PHP代碼:

/** key [SQLITE column name] => value [MySQL select column] */ 
$table_structure = array(
'id' => 'id', 
'title' => 'title', 
'type' => 'COALESCE(type, "")', /** u need to wrap any column that is nullable like this **/ 
'flags' => 'COALESCE(type, "")', /** u need to wrap any column that is nullable like this **/ 
'view_field' => 'view_field', 
'view_year' => 'view_year', 
.... 
.... 
'updated_at' => 'UNIX_TIMESTAMP(updated_at)'); 
$into_query = ''; 
$into_values = ''; 
$indexer = 0; 
foreach ($table_structure as $sqlite => $mysql) { 
$into_query .= (($indexer !== 0)? ',':'').$sqlite; 
$into_values .= (($indexer !== 0)? ',",",':'').'"\'",'.$mysql.',"\'"'; 
$indexer++; 
} 
$output_filepath = "some where nice"; 
$query = 'SELECT CONCAT("INSERT INTO '.$table.'('.$into_query.') VALUES(",'.$into_values.',");") FROM '.$table.' ' ... "INTO OUTFILE $output_filepath CHARACTER SET utf8"; 

我希望這是一個好辦法,可以幫助某人某一天:)

回答

0

方法1:使用SQLite數據庫文件

任何一步,你的問題已經提到的是正確的。這種方法用於從設備發送大量數據(很多表)到web/php反之亦然。

它需要時間在較慢的互聯網連接以及2G。在3G中它的速度很快(它也取決於你在移動/ PHP上編寫的任何代碼來上傳&下載文件)。

確保數據庫文件的大小如果大的話就製作包含數據庫文件的zip文件。


方法2:讓使用JSON(SELECT *)解析在設備

這一個是當你已經失去了它有很多領域的表很長的過程。你必須從表中逐一獲取數據,將它發送到服務器/ php它的後處理髮回數據。那麼你必須再次在設備表中插入數據。

這也取決於INTERNET以及你的代碼。它的設備速度太慢,需要更多時間。


兩種方法共同的東西送了只在需要時或/接收那些需要的設備/ PHP數據。不要發送未使用的數據以便快速工作。

+0

thanx for zip文件提示 – Penman