五、其他的特色:
在第一步開發中實現的還只是只讀,很快會有能讀寫的版本出來。
目前的計劃是把數據庫對象映射成文件和目錄對象。讓我們來看看
例子:
--8<-----------------------------
#建立表
CREATE TABLE invoice (
invoice_id int(10) unsigned NOT NULL auto_increment,
invoice_no int(10) unsigned DEFAULT ’0’ NOT NULL,
payee char(40) DEFAULT ’’ NOT NULL,
PRIMARY KEY (invoice_id),
KEY payee (payee)
);
# 插入數據
INSERT INTO invoice VALUES (1,100,’Company AB’);
INSERT INTO invoice VALUES (2,101,’Company CD’);
INSERT INTO invoice VALUES (3,102,’Company EF’);
--8<-----------------------------
因為 MySQL 沒有辦法使用記錄號,所以我們必須建立主鍵。
就有了以下的目錄結構:
/mountpoint/database/table/primary_key/field
這樣,每個列出現在不同的文件行之中,文件樹的結構如下:
/mnt/mysql/mydata/invoice/1/invoice_id
/mnt/mysql/mydata/invoice/1/invoice_no
/mnt/mysql/mydata/invoice/1/payee
/mnt/mysql/mydata/invoice/2/invoice_id
/mnt/mysql/mydata/invoice/2/invoice_no
/mnt/mysql/mydata/invoice/2/payee
/mnt/mysql/mydata/invoice/3/invoice_id
/mnt/mysql/mydata/invoice/3/invoice_no
/mnt/mysql/mydata/invoice/3/payee
另外,還有第二個辦法可以使用:
/mountpoint/database/table/.table
和
/mountpoint/database/table/primary_key/.record
/mnt/mysql/mydata/invoice/.table
/mnt/mysql/mydata/invoice/1/.record
/mnt/mysql/mydata/invoice/1/invoice_id
/mnt/mysql/mydata/invoice/1/invoice_no
/mnt/mysql/mydata/invoice/1/payee
/mnt/mysql/mydata/invoice/2/.record
/mnt/mysql/mydata/invoice/2/invoice_id
/mnt/mysql/mydata/invoice/2/invoice_no
/mnt/mysql/mydata/invoice/2/payee
/mnt/mysql/mydata/invoice/3/.record
/mnt/mysql/mydata/invoice/3/invoice_id
/mnt/mysql/mydata/invoice/3/invoice_no
/mnt/mysql/mydata/invoice/3/payee
這些文件是隱含的,以防重復,主要用來方便地通過文本文件
浏覽器來查看。
現在,在那些需要使用SQL 語句搜索最小,最大,最後等數據,
可以通過符號連接來實現了:
/mountpoint/database/table/primary_key/.max
或者
/mnt/mysql/mydata/invoice/invoice_id/.max
或者指向
/mountpoint/database/table/field
和
/mnt/mysql/mydata/invoice/3
同樣的就可以返回一行的 min/max/sum/avg 等數值。
這能很快並且很容易地實現。
/mnt/mysql/mydata/.keys/
/mnt/mysql/mydata/.keys/invoice_id/
/mnt/mysql/mydata/.keys/payee/
符號連接到主鍵:
/mnt/mysql/mydata/.keys/.primary_key/
實際上指向
/mnt/mysql/mydata/.keys/invoice_id/
還有一些隱藏文件提供鍵類型:
/mnt/mysql/mydata/.keys/invoice_id/.type
/mnt/mysql/mydata/.keys/payee/.type
第一個文內容為:¨PRIMARY KEY¨ 第二個為 ¨KEY¨ 。
另外還可以用索引來排序記錄,如果讀取下面的目錄:
/mnt/mysql/mydata/.keys/payee/asc/
PHP 的readdir() 函數就以升序返回數據的符號連接。
另外還有一些全局函數:
/mountpoint/.version
/mountpoint/.last_insert_id
/mountpoint/.uptime
/mountpoint/database/.raid (0/1)
/mountpoint/database/.type (ISAM/MyISAM/HEAP/DBD)
/mountpoint/database/.tables
/mountpoint/database/table/.created
/mountpoint/database/table/.last_updated
/mountpoint/database/table/.last_checked
/mountpoint/database/table/.count