亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

MySQL 文件系統

添加時間:2014-6-26 17:21:33  添加: 思海網絡 

實際上,這不是通常意義上的文件系統,它沒有磁盤空間,
而是使用MySQL 守護程序來存儲數據。可以把SQL 表和
一些函數通過文件系統來實現。

一、怎樣實現?

讓我們來看使用實例:

[root@localhost /root]# mount -t corbafs -o `cat /tmp/mysqlcorbafs.ior` none
/mnt/mysql/


[root@localhost /root]# mount
/dev/hda3 on / type ext2 (rw)
none on /proc type proc (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda1 on /mnt/win type vfat (rw,mode=777)
/dev/hda4 on /mnt/linux type vfat (rw,noexec,nosuid,nodev,mode=777)
none on /mnt/mysql type corbafs
(rw,IOR:01e50d401b00000049444c3a436f72626146532f46696c6553797374656d3a312e
300000010000000000000030000000010100000a0000003132372e302e302e310008041800
0000000000009224bc335663462a01000000ef7ae13c0943c59f)

[root@localhost /root]# ls -la /mnt/mysql/

total 0

-r-xr-xr-x 1 root root 4096 dets 29 22:21 .uptime
dr-xr-xr-x 1 root root 4096 dets 29 22:21 test
dr-xr-xr-x 1 root root 4096 dets 29 22:21 mysql

[root@localhost /root]# cat /mnt/mysql/.uptime

1994

[root@localhost /root]# cat /mnt/mysql/mysql/user/Host

cpq.spam.ee
cpq.spam.ee
localhost
localhost
localhost
localhost
localhost
localhost

[root@localhost /root]# cat /mnt/mysql/mysql/user/Insert_priv
N
N
N
N
N
N
Y
Y

[root@localhost /root]# umount /mnt/mysql/

二、為什么要這樣做呢?

在一些情形下,這樣做能讓工作更加輕松。MySQL 和文件系統都能叫做數據庫,但是有
著絕然不同的概念和優缺點。在文件系統里,對象能很快而且很容易找到,即使改變名
字也能很快找到。每一個初學者大概都應該學會move/copy/rename/delete這樣的操作。
但是SQL 不一樣,
他通過應用程序來操縱存儲在文件系統上的數據。而MySQL 文件系統把SQL 做到了用戶
級。用戶能用他們知道的方式來操作數據庫。

-任何一個新產品需要通過網絡存取數據的話,必須支持一些協議以及可能的其他辦法通
過網絡存取文件系統。MySQL 表就可以通過這樣的方式來存取,即使MySQL 沒有移植到
對應的平臺。

-備份和版本控制,普通的文件系統通過任何備份軟件就可以實現。數據可以通過diff 
來比較并且用cvs 來控制版本。

-更短的編程時間,有時候人們需要保存簡單的數據,像當前日期或者站點名字,這些數
據很少改變,普通的方法需要使用:

連接服務器-> 選擇數據庫 -> 執行命令-> 存儲結果

而使用 MySQL 文件系統后,只需要一句話:(PHP實現)

include(¨/mountpoint/database/table/field¨);

或者,換一種方式表達:

include(¨/mnt/mysql/sitedata/topic/todaytopic¨);


這樣就很容易理解,也占用了較少的空間。還可以通過SAMBA 來共享 /mnt/mysql,達到
直接修改SQL 數據庫
的目的。能直接寫文本到數據庫,或者使用拷貝/粘貼功能把圖片放入數據庫,這要比用
Perl 或者PHP 寫幾百行程序省力多了。


三、性能如何?

在發表這篇文章的時候,這個文件系統還處于原型開發階段,因此,速度還不是很理想。
如果到了正式發布的時候,一些數據庫功能會比使用 SQL 要快。 當然,很多還是沒法和
SQL 相比,無論是性能上還是功能上,很多復雜的查詢依然需要通過SQL 語句來完成。但
是,這樣節省了很多開發和培訓的時間,所以在效率上來說也是一種節省。

四、支持的表類型:
目前這個文件系統支持所有的表類型:MyISAM,DBD,HEAP,ISAM。

五、其他的特色:

在第一步開發中實現的還只是只讀,很快會有能讀寫的版本出來。目前的計劃是把數據庫
對象映射成文件和目錄對象。讓我們來看看例子:


--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


六、寫權限?

在開發的第二階段,會有措施執行SQL 語句。現在的思路是:

采用目錄:
/mountpoint/database/.command/

然后執行命令,把SQL 語句作為目錄建立。
或者建立目錄把SQL 語句作為文件放入這個目錄。

兩個方案都有優點,第一個方案可以重新使用SQL 語句,但是這樣的目錄名實在不敢令
人茍同。第二個方案采用信號量文件,語句執行完畢就刪除這個文件,沒有任務使用時,
目錄也被刪除。對于那些慢速的查詢響應,可以選擇timeout 的時間。

七、權限管理
在權限管理方面,可以使用Unix 的權限管理方式,這樣的方案看來是最好的。

關鍵字:MySQL、數據庫、服務器

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站