發表文章

數值轉大寫

兩年前有陣子上Leetcode試玩了一下。 其中有一題 Integer to Roman , 沒想到兩年多了還是維持在最快(3ms, 再快真的不容易) 程式碼如下: class Solution { public String intToRoman ( int num ) { int [ ] nums = new int [ ] { 1000 , 900 , 500 , 400 , 100 , 90 , 50 , 40 , 10 , 9 , 5 , 4 } ; String [ ] rns = new String [ ] { "M" , "CM" , "D" , "CD" , "C" , "XC" , "L" , "XL" , "X" , "IX" , "V" , "IV" } ; StringBuilder sb = new StringBuilder ( ) ; int pos = 0 ; while ( num > 3 && pos < rns. length ) { int d = num / nums [ pos ] ; int r = num % nums [ pos ] ; if ( d > 0 ) { for ( int i = 0 ; i < d ; i ++ ) { sb. append ( rns [ pos ] ) ; } } else { pos ++; } num = r ; } while...

Postgresql HA

圖片
關於Postgresql HA,建議閱讀 這篇文章 ,摘要如下: Standby databases 主要資料庫的備分,有著與主要資料庫相同的資料,以備意外發生。 以複製方式分類 Physical standbys :硬碟區塊複製 Logical standbys :變動資料串流複製 以transaction同步分類: 異步 :可能會掉資料 同步 :不可能掉資料,master會等待standby複製完成通知 以用途分類 Warm standbys :standby機不提供連線 Hot standbys :standby機提供唯讀查詢連線 叢集 多個主機視為一體,叢集規模可調整,任一節點掛點不影響作業,依資料共用可分類如下: Shared-storage :所有節點共享資料 Shared-nothing :每個節點有自已的儲存,所以不一定會資料相同 然後是我比較關注的免費產品介紹: Ruberep 異步、多master與多平台解決方案,適用於Postgresql與MySQL,奠基於trigger,不支援DDL、User與Grants Pgpool II 是個中介軟體。主要功能如下: Connection pool Replication Load balancing Automatic failover Parallel queries Limiting Exceeding Connections Bucardo 描述功能看起來很強大,但缺點也不少,暫不考慮 PostgresXL 只能用一個awesome形容,PostgressXL屬於企業集架構的大型叢集,前身是 Postgres-XC ,功能強大, 效能卓越 ,但因為採用shared nothing、分散式表格儲存(也就是多筆資料會分別儲存到不同節點,所以她的查詢是採平行處理,速度快,但也就是節點要比較多),成本相對也不便宜。 這裡有人做了個 Lab 可以參考。 另外Postgres官方也列出了各種HA,Load Balance與複製方式的 比較表 : 看起來pgpool-II是個不錯的選擇,以下是個合適的架構 pgpoo-II有多種 ...