Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2012年9月5日 星期三
JDBC 的 Auto-Commit
1、Transactions
2、does Connection commit on close()?
3、JDBC Transaction Example
4、MySQL: InnoDB or MyISAM?
有個小任務是幫忙檢查為什麼在測試時,用我們自己的資料庫連線的 API 要開啟 TRANSACTION 模式
但就算設定了 auto-commit = false 還是會自動 commit
懷疑可能的原因....
1、我們的 API 用的是 executeUpdate() 去執行 INSERT、UPDATE 和 DELETE?(網路上的範例比較多都是呼叫 execute())
2、使用了 TOMCAT 的 JDBC connection pool?
2012年8月29日 星期三
在 MySQL 中做全文檢索
因此查了一些資料,目前是打算用 MySQL 的 FULL TEXT SEARCH 的功能。
要使用 MySQL 的全文檢索,資料表型態必須是 MyISAM,同時要做全文檢索的欄位型態要是 FULLTEXT
然後對該欄位建立 FULLTEXT 類型的索引。(可參考官方文件 [1] 的說明)
使用時可以使用 MATCH (...) AGAINST (...) 敘述來進行全文檢索。
MATCH (...) 裡面指定的是要做全文檢索的欄位名稱,AGAINST (...) 裡面則是指定要搜尋的關鍵句。
它回應的會是一個數字,表示的是欄位內容跟關鍵句的相似度,如果完全不相似就會回傳 0。
2012年8月28日 星期二
2012年8月1日 星期三
Can't specify target table for update in FROM clause
1、Mysql error 1093 - Can't specify target table for update in FROM clause
2、PHP/MYSQL using an array in WHERE clause
原本我想要在資料表裡面把符合某個條件的值撈出來,然後把他們從資料庫裡刪掉
於是下了類似這樣的 SQL Statement:
DELETE FROM table WHERE id IN (SELECT * FROM table WHERE time < 11111111);其實這段 SQL Statement 很明顯根本不用用到 SELECT...XD
只是...反正這只是個範例就是了,不要太在意!XD
2012年4月19日 星期四
MySQL 效能調教相關知識
1、關於 MySQL的記憶體使用量計算
轉貼文章內提到的資訊:
MySQL 記憶體需求量的計算
min_memory_needed = global_buffers + (thread_buffers * max_connections)
(1) global_buffers 包含:
key_buffer
innodb_buffer_pool
innodb_log_buffer
innodb_additional_mem_pool
net_buffer
(2) thread_buffers 包含:
sort_buffer
myisam_sort_buffer
read_buffer
join_buffer
read_rnd_buffer
2012年3月21日 星期三
提昇資料庫效率的方法:Partition
原本要找的是 AUTO_INCREMENT 爆掉的問題該怎麼處理
意外找到這個可以提昇資料庫效率的方法~
詳細說明可以直接看下列的參考資料
參考資料:
1、通過分區(Partition)提升MySQL性能(一)
2、通過分區(Partition)提升MySQL性能(二)
3、mysql 的 partition 與 auto_increment
在 [1] 的效能測試中,建了兩個資料表,一個使用 Partition、一個沒使用
然後用隨機產生的資料填入 800 萬筆資料,測試找出時間是 1995 年間的所有資料
在沒有做 Partition 的資料表中花了 38 秒,有做 Partition 的則只花了 3 秒多~
當資料有顯著的分區效果時,做 Partition 可以降低搜尋資料的時間~
不過後來又找到 [3],同時使用 AUTO_INCREMENT 跟 Partition 時 MySQL 可能會有問題....
目前暫定的作法是使用 Partition、放棄 AUTO_INCREMENT
用其他 INDEX 來盡可能達到類似 AUTO_INCREMENT 的 PRIMARY KEY 效果~