天天看點

某社群600萬使用者資料導入MYSQL、MSSQL、Oracle資料庫方法

因為獲得的資料庫檔案是一個文本檔案www.csdn.net.sql,是以需要用到mysql中的LOAD DATA INFILE指令,LOAD DATA INFILE的文法結構如下:

View Code

觀察文本結構,發現每一行都是如下所示結構:

中間用"#"進行分割。是以我們建立的表必定含有username,password和email字段,但是我們還必須為表添加一個主鍵列,并讓其自動增長,這樣我們在添加資料的時候就不需要手動添加主鍵列。是以表結構如下:

注意:MySQL中MyISAM引擎與InnoDB引擎有一些差別,但是這并不是本篇部落格的主題,是以略過不提。

在建立表以後,我們就可以通過 load data infile指令導入資料了,具體的導入指令如下:

大概運作了1分鐘左右就導入完成了,導入完成以後顯示:

  安裝的MySQL5.1預設的資料庫檔案存放的路徑是:C:\Documents and Settings\All Users\Application Data\MySQL 中,比如我們的csdndb就在路徑C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data\csdndb當中。如果經常恢複系統的話,放在c盤不安全,可以在安裝的時候修改安裝路徑。如下圖所示:

在Sql Server中,使用BULK INSERT指令導入資料,該指令以使用者指定的格式将資料檔案導入到資料庫表或視圖中。BULK INSERT文法結構如下:

(6428632 行受影響),耗時:00:02:00

其中fieldterminator = ' # ',表示列分隔符,rowterminator = '\n'表示行分隔符。

上面的操作雖然将資料導入到了資料庫中,但是我們會發現資料庫表csnd1沒有主鍵列,那麼如果我們在表中添加一個www.csdn.net.sql檔案中沒有的主鍵列以後,該如何進行資料庫導入呢?經過多次測試,無法使用原來的bulk insert指令進行導入,但是可以用類似bulk的指令進行導入。

首先建立帶主鍵id的csdnuser表:

然後使用如下指令進行導入:

(6428632 行受影響),耗時:00:01:25

 首先建立資料庫表,我們在scott使用者下建立csdn表

建立控制檔案D:\www.csdn.net.sql

打開cmd指令行,使用sqlldr指令進行導入,導入指令如下:

輸出的日志檔案為resulthis.out,他在C:\Users\xuwei目錄下,因為上述sqlldr就在該目錄下運作的。resulthis.out内容如下:

通過上述日志可以發現導入耗時為29.86秒。

參考:

  起初考慮為主鍵建立sequence,然後通過觸發器來插入主鍵,但是一直報錯。後來通過控制檔案中使用sequence來插入主鍵完成操作。

建立資料庫表:CSDNUSER

_______________________________________________

如果要求索引的等級BLEVEL,可以通過以下查詢語句求出:

但是發現查找結果為0。後來發現是因為上述建表出現問題,就是沒有為primary key命名,如果沒有指定primary key的名稱,那麼系統為預設設定一個名稱,比如SYS_C0038642之類的主鍵名稱。是以我們首先删除上述主鍵,然後再添加主鍵。

當然也可以直接在建表到時候就建立主鍵名稱

在建立主鍵的時候,我們發現花費了一些時間,這是因為主鍵也是占據一定磁盤空間的。

————————————————————————————

建立控制檔案:ora_csdn2.ctrl

在cmd中執行sqlldr指令

resulthis.out内容如下:

通過java程式為www.csdn.net.sql源檔案添加一列age,生成一個新的檔案www.csdn22.net.sql

建立資料庫表:csdnuser3

建立控制檔案ora_csdn3.ctrl

通過上述日志可以發現導入耗時為38.00秒。

一個簡單而容易忽略的問題是,沒有對導入的表使用任何索引和/或限制(主鍵)。如果這樣做,甚至在使用ROWS=參數時,會很明顯降低資料庫導入性能。

可以添加 DIRECT=TRUE來提高導入資料的性能。當然,在很多情況下,不能使用此參數。

通過指定 UNRECOVERABLE選項,可以關閉資料庫的日志。這個選項隻能和 direct 一起使用。

可以同時運作多個導入任務。

正常導入可以通過使用 INSERT語句來導入資料。Direct導入可以跳過資料庫的相關邏輯(DIRECT=TRUE),而直接将資料導入到資料檔案中。比如direct導入将不檢測主鍵的唯一性。

用法: SQLLDR keyword=value [,keyword=value,...]有效的關鍵字:

insert     --為預設方式,在資料裝載開始時要求表為空

append  --在表中追加新記錄

replace  --删除舊記錄(用 delete from table 語句),替換成新裝載的記錄

truncate --删除舊記錄(用 truncate table 語句),替換成新裝載的記錄

TRAILING NULLCOLS -- 表的字段沒有對應的值時允許為空

本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2012/06/08/2541678.html,如需轉載請自行聯系原作者