Posted on June 26, 2003 in Genetic Algorithms by pestNo Comments »

今天在看 PostgreSQL çš„æ–‡ä»¶æ™‚ï¼Œç™¼ç¾æœ‰å€‹ç« ç¯€åœ¨è¬›é‹ç”¨åŸºå› æ¼”算法(Genetic Algorithms) 來最佳化資料庫的查詢方法(Query Plan),就來介紹一下 PostgreSQL 是如何應用的。

所謂的 Query Plan(查詢方法),是指資料庫管ç†ç¨‹å¼å¦‚何由ç¾å­˜çš„ Table 中,åšå‡ºä½¿ç”¨è€…想è¦çš„資料。Query Plan中最難以處ç†çš„æ˜¯ Join 這個動作。Join 這個動作,簡而言之就是把兩個相關的 Table åˆæˆä¸€å¼µå¤§çš„ Table;例如我們有一個 Table 記錄 "人å-å±…ä½åŸŽå¸‚",å¦ä¸€å€‹"人å-喜好"ï¼Œä»Šå¤©å¦‚æžœæˆ‘å€‘è¦æ‰¾å‡º"ä½å°åŒ—ã€åˆå–œæ­¡å¯« Blog"的人,就å¯ä»¥åˆ©ç”¨ Join 這個指令,以人åç•¶ä½œç´¢å¼•å€¼ï¼Œåˆæˆä¸€å¼µåŒæ™‚具有我們所需è¦è³‡æ–™çš„ Table。

Join 有很多種方法å¯ä»¥åšåˆ°ï¼Œæœ€å·®çš„ç‹€æ³å°±æ˜¯æŠŠæ‰€æœ‰çš„å¯èƒ½æ€§éƒ½åˆ—出來,å†åˆªæŽ‰ä¸æ­£ç¢ºçš„。舉例來說,ä½å€ Table 有一åƒç­†ï¼Œå–œå¥½è³‡æ–™ä¹Ÿæœ‰ä¸€åƒç­†ï¼Œé‚£éº¼å°±å…ˆç”¢ç”Ÿä¸€ç™¾è¬ç­†çš„表格,å†ä¸€ä¸€åˆªåŽ»ï¼›ç›¸å°çš„,如果我們知é“人å都沒有é‡è¦†ã€å±…ä½åŸŽå¸‚表格中,åŒä¸€å€‹äººä¹Ÿåªæœƒæœ‰ä¸€ç­†è³‡æ–™ã€æ¯å€‹äººä¹Ÿåªæœ‰ä¸€å€‹å–œå¥½ï¼Œé‚£éº¼ç”šè‡³å¯èƒ½å¹¾åƒç­†å°±åšå‡ºä¾†äº†ã€‚

但䏦䏿˜¯æ¯ä¸€å€‹ Query Plan éƒ½æ˜¯å¦‚æ­¤çš„é¡¯è€Œæ˜“è¦‹ï¼Œç•¶éœ€è¦æ¯”å°çš„ Table 越來越多,到底是先 Join 哪一個 Tableã€å…ˆ Join 哪兩個 Join å®Œçš„çµæžœï¼Œæœƒè®Šæˆä¸€å€‹éœ€è¦æŠŠå…¨éƒ¨çš„å¯èƒ½æ€§éƒ½åˆ—出來,æ‰çŸ¥é“哪個最好的å•題,我們稱這種解法å«åš"窮盡æœ"(Exhaustiive Search)ï¼Œæ„æ€å°±æ˜¯å¾—把所有的組åˆéƒ½æ‰¾å‡ºä¾†æ‰è¡Œã€‚

更慘的是 Query Plan 的數é‡åˆéš¨è‘— Table çš„å¢žåŠ è€Œå¤§å¹…å¢žåŠ ï¼Œç•¶éœ€è¦ Join çš„ Table 由兩個變三個ã€å››å€‹ç”šè‡³åˆ°å幾個時, Query Plan 的總é‡å°±åƒ 1*2*3*4 這樣呈指數æˆé•·ï¼Œåˆ°æœ€å¾Œè¦æ‰¾å‡ºæ‰€æœ‰çš„å¯èƒ½è§£ç­”本身所花的時間,æžä¸å¥½éƒ½æ¯”資料庫查詢時間來得長了。

在德國的 University of Mining and Technology 自動控制學院設計了一個電力控制系統,用 PostgreSQL 來當作決策系統的資料庫,但是因為決策系統需è¦é‹ç”¨å¤§é‡çš„ Join 來進行推ç†çš„é‹ç®—,為了兼顧效率,他們把基因演算法引入資料庫的設計之中,用來快速產生有效率的 Query Plan。

關於基因演算法的基本概念在此略éŽï¼Œè«‹åƒè€ƒæœ¬ç«™ç›¸é—œæ–‡ç« ã€‚

Query Plan 最佳化的作法和著åçš„ Traveling Salesman Problem(TSP) å•題很類似,先將å¯èƒ½çš„è§£æ³•è®Šæˆæ•¸å­—的字串,例如 4-1-3-2 就表示先讓 Table 4 å’Œ Table 1 åš Join,å†å’Œ Table 3ã€2 åš Join。

æ¼”åŒ–æ™‚æŽ¡ç”¨ç©©æ…‹æ¼”åŒ–ï¼Œä¹Ÿå°±æ˜¯æ¯æ¬¡åªæŠŠè¡¨ç¾æœ€å·®çš„一個 Plan 淘汰掉;而å­ä»£çš„產生則是é‹ç”¨ "edge recombination crossover[註二]",而çªè®Šçš„æ©Ÿåˆ¶åœ¨é€™è£¡ä¸¦ä¸ä½¿ç”¨ã€‚

é‹ç”¨åŸºå› æ¼”算法,資料庫å¯ä»¥åœ¨åˆç†çš„æ™‚間中找出有效的 Query Plan來進行 Join 的動作,然而除了找出最好的 Query Plan 之外,電腦的的Computation Time也是一個很é‡è¦çš„因素,ä¸åŒçš„åƒæ•¸å°æ–¼ç³»çµ±ä¹Ÿæœƒæœ‰ä¸åŒçš„影響。

從這個例å­å¯ä»¥çœ‹åˆ°åŸºå› æ¼”算法所é‹ç”¨çš„å ´åˆï¼Œé‚„是脫離ä¸é–‹"在åˆç†çš„æ™‚é–“"ã€"複雜度高的狀æ³ä¸‹"ã€"找到åˆç†å¯æŽ¥å—的解法"的特色。

註一:PostgreSQL 是一個 GPL 的資料庫,最早是由 Berkeley 所發展的,如今和 MySQL åŒç‚ºç¶²è·¯ä¸Šæœ€å—歡迎的 GPL 資料庫軟體,官方網站在 http://www.postgresql.org。

註二:關於 edge recombination crossover 的說明,請åƒè€ƒé€™è£¡ã€‚

åƒè€ƒè³‡æ–™ï¼š
Genetic Query Optimization

相關閱讀:
上å¸çš„éˆè—¥â”€åŸºå› æ¼”算法(一)
上å¸çš„éˆè—¥â”€åŸºå› æ¼”算法(二)

Posted on June 26, 2003 in Memo by pestNo Comments »

在å¦ä¸€å€‹blog寫文章時,都會有一種脫力的感覺。ä¸çŸ¥é“æ˜¯ä¸æ˜¯å¯«æ–‡ç« å¤ªç”¨åŠ›çš„é—œä¿‚ï¼Œå¤§æ¦‚æ˜¯è¦ºå¾—æœ‰è®€è€…å£“åŠ›å°±æœƒå¾ˆå¤§å§…