2009-11-04 24 views
1

我目前正在探索如果一個定製MySQL引擎可以滿足我的需求。我一直在尋找http://forge.mysql.com/wiki/MySQL_Internals_Custom_Engine。我想知道的一件事是:我可以使用已經存在的(二進制)文件創建引擎嗎?MySQL定製引擎:已有數據

如果是,我猜(?)沒有「CREATE TABLE...」那麼,MySQL怎麼知道這個表?

EDITED 說我有一個工具,書寫稱爲「records.bin」一個大的二進制文件是下面的C結構的串聯

struct Record 
    { 
     char field1[10]; 
     int field2; 
    }; 

我想寫一個自定義的MySQL引擎來執行下面的查詢:

((declare table t1 as 'records.bin' exists somewhere ???)) 
select field1 from t1 where field2=1; 

應該是可能的,因爲文件說:

最基本的存儲引擎 實現只讀表掃描。 這樣的引擎可能被用來支持 SQL查詢的日誌和其他數據 文件,這些文件被填充在MySQL的 之外。

+0

你的問題不清楚。請重新說明。 – longneck 2009-11-05 03:58:31

+0

@Pierre你有沒有試過解決這個問題? – oob 2011-12-14 04:39:31

+0

@oob不,我發現文檔太複雜了。 – Pierre 2011-12-14 07:33:50

回答

1

如果「二進制文件」你的意思是一個數據文件從MySQL數據目錄撕開,我很懷疑,你可以使用一個存儲引擎生成的數據文件填充一個表中的另一個存儲引擎。

如果通過「二進制文件」你的意思是一個mysqldump,那麼是的,這應該沒有問題。 mysqldump應該包含一個create table語句給你 - 如果沒有,你可以自己做(做一個SHOW CREATE TABLE t並複製結果)。

您還可以將存儲引擎之間的表,而不用傾銷/重載他們,用ALTER TABLE t ENGINE = e;

2

是的,這是可能的。僅僅因爲CREATE TABLE實際上在像myisam這樣的傳統存儲引擎中創建文件並不意味着你必須這樣做。

實際上,CSV存儲引擎將使用數據目錄中現有的已命名的CSV文件。如果該文件不存在,那麼它將創建一個空白文件。