2010年12月16日

MySQL 5.5 GA!

MySQL 5.5GA了,
Semi-synchronous Replication 可以解決不少Mastre/Slave的replication不同步問題。
另外還有 Replication Heartbeat, Automatic Relay Log Recovery...

develop發表於 樂多09:04回應(1)引用(0)MySQL │標籤:mysql,replication

2010年12月15日

淺談 NoSQL - Mongo DB

MongoDB算是近來頗為熱門的一款Document-oriented Database.
No-SQL陣營中有許多類型的DB,為不同需求而設計.
Document-oriented DB 類的概念大概是 : 一筆資料以不固定大小,不限制欄位多寡 儲存於表格內. 每個欄位尚可切分成更多子欄位.
想像把整個JSON,Array,Hash丟進DB. 就是那樣.
而相同性質的尚有 CouchDB, Jackrabbit, Redis, FleetDB…等約數十款.
看更多關於Document-Oriented DB

MongoDB會在近期熱門起來的原因有許多,其中幾個原因是像FourSquare在美國火紅.
而他所使用的技術自然也被大家熱烈討論.
SourceForge,Disqus,Bit.ly…. 等 亦同樣使用Mongo. Heroku 也支援MongoDB.
老實講小編也是透過Heroku,以及FourSquare才知道MongoDB.
詳細有哪些公司使用MongoDB可以看我.
這麼多公司使用MongoDB,而這些公司大多其實與MongoDB年齡相距不遠.
CouchDB (2005)早在MongoDB (2009)之前就存在市場.
何以這些年輕公司選用與他們年齡差距不大的Mongo.
而不使用老牌CouchDB ?
除了MongoDB與這些公司的關係良好. 再來就是技術上的考量了.
從MongoDB的發展速度和行銷力道都可以看出這個在Document Oriented DB領域的後起之秀.
CouchDB要小心了.

閒聊了很多,先來看看Mongo到底可以做些什麼.
Mongo主要提供的特點(訴求)包含 :
Document-Oriented : JSON格式儲存.
Full Index : 概念與MySQL的Index類似. 和CouchDB則不太相同. 詳請點連結
Replication & High Availability : 佈署快速而且性能高
Querying : 強大並彈性的Query方式. (真的很方便好用. 比起Sql的Join來Join去… )
MapReduce : 簡單講就是比MySQL的 Group BY更好用的工具. 下面有介紹.
GridFS : 下面會有更多介紹.

MongoDB的架構

根據官方所提供的圖示以及這裡的說明 : Mongo架構圖
主要分成三個部份 :
- 資料儲存的Mongod
- 與使用者互動的Mongos (可與Mongod共存)
- 設定檔 Mongod Config (可與Mongod共存)

基本上一抓下來的Mongo跑起來,上面三者就都存在了.
要將之分開需要做一點設定. 依照架構而言. 資料儲存的若需要做Shard.
則需要至少4台實體機器. 一組兩台. 圖中藍色Mongod(Shard)便是一組.
不過架構圖內是三台為一組. 實際上是能用兩台實體,配一台VM組成三台做一個Shard的.
而每次要增加一組Shard則需要同樣的機器數及配置.
換言之如果以三台實體機器做一組Shard. 那麼第一次需要六台. 下一次添購機器也是以3台為基數.
實作流程可參考 點我

關於GridFS

而GridFS則是另一個今次要簡略介紹的主題.
原則上Mongo的儲存方式是以Bson為主. 然而Bson預設的大小為4MB.
官方文件說了一堆

The GridFS spec provides a mechanism for transparently dividing a large file among multiple documents. This allows us to efficiently store large objects, and in the case of especially large files, such as videos, permits range operations

簡單講, 當儲存的東西大於4MB. 請丟到GridFS.
當然,我們也可以使用其他選擇(工具),然後只將紀錄留存這裡. 比如使用GFS(如果抓得到 :p ),或滔寶最近開源的TFS, 或 OpenSource的HDFS.
官方文件在該頁就說了 “你不需要瞭解如何運作,快去看API就可以直接使用”. 但好奇的小編還是讀了一下.
GridFS基本原理使用每個資料的meta為索引抓取檔案,這份meta會儲存在files的Collections裡.
並將每個檔案分割為約256k大小的chunks,再將不等數目的chunks儲存成一至數個chuncks的Collection裡.
而每個chunks都有會有prefix. 預設為 fs.files 及 fs.chunks
我們也可以修改成自已的prefix, 比如 video.files 及 video.chunks
我們甚至可以定義files的資料欄位內容. 基本必要的資料欄位如下 :

 {     
      "_id" : <unspecified>,            // 一定要是唯一不重複的 ID
      "length" : data_number,           // 檔案大小 (bytes)
      "chunkSize" : data_number,        // 每個chunks大小 (k)
     "uploadDate" : data_date,         // 建立日期,以第一個chunk建立的時間為基準.
     "md5" : data_string               // 回傳運行 'filmd5' 的結果.
}     

而使用者也可以定義其他資料 :

{       
      "filename" : data_string,         // 檔案名稱
      "contentType" : data_string,      // mine_type
       "aliases" : data_array of data_string,  // optional array of alias strings
       "metadata" : data_object,         // 任何其他你想加入的   
}   

而所有的chunks必需確保為單一不重覆的.
我們可以從console下輸入下列命令做確認 :

db.fs.chunks.ensureIndex({files_id:1, n:1}, {unique: true});   

至此, 已可約略窺見GridFS的實作方法.

關於MapReduce

什麼是MapReduce? 請參考我 Mongo實作MapReduce的方法類似Hadoop.
透過設定 outType 我們可以對新進來的資料作操作.
自從1.7.3之後有三種方式可供選擇 :

normal - 預設. 新資料蓋舊資料.    
merge - 合併. 新舊共存. 衝突部份新資料會蓋掉舊資料.   
reduce - 運行reduce. 將新和舊資料都丟給reduce處理後取得結果.   


map/reduce本身是透過mongo內建指令呼叫. 當有輸出時,會產生暫時的Collection並在處理完成或明確的被中斷時 清除.

我們可以透過mongo shell去下指令 :

db.collection.mapReduce(mapfunction,reducefunction[,options]); 

並定義 :

function map(void) -> void function reduce(key, value_array) -> value 

如果我們只需要對每次的請求只運行一次而非持續不斷的操作.
請將reduce 換成 finalize. Ex :

function finalize(key, value) -> final_value   

Map Reduce的部份比較複雜. 可以參考下列文件 :
MongoDB Aggregation III: Map-Reduce Basics
Aggregation
Map/reduce, geospatial indexing, and other cool features

Mongo與Ruby

說了那麼多都還沒談及Ruby / Rails的部份.
如果只想用Ruby與MongoDB連接,那是一件輕鬆簡單的事.
****
gem update —system; gem install mongo; gem install bson_ext;
然後在程式內 :

 require 'rubygems'  # not necessary for Ruby 1.9    
 require 'mongo'    
 db = Mongo::Connection.new("localhost", 27017).db("MyTestDB")    
 coll = db.collection("myTestCollection")   

即可.
官方完整教學在此

Mongo與Rails

如果使用Rails, 也喜歡ORM.
那麼MongoID是個不錯的選擇. 這裡可以看官方更多的推薦列表
安裝mongoid並啟動是很快速的一件事.
****
gem install mongoid —pre; gem install bson_ext;
並將下列貼至Gemfile :

 gem "mongoid", "2.0.0.beta.20"    
 gem "bson_ext", "1.1.2"   

在console輸入 :

rails generate mongoid:config   

並到config/application.rb將

require 'rails/all'   

替換為

require "action_controller/railtie"   
require "action_mailer/railtie"   
require "active_resource/railtie"   

並在config/initializers/mongoid.rb 新增 :

Mongoid.add_language("*")   

至此. 已可以準備啟動mongod並啟動server.

MongoDB的官方文件非常完整. 而且對Ruby(及非常多其他語言)也頗為友善.
多數本章內容官網都有了.. 只能把此篇當中文版簡介.
莫怪乎它的成長速度如此快. :)


2010年12月7日

樂多開發部被Apple攻陷了.

很高興我們又回來了. 這陣子樂多有了些大更動. 

其中一個更動就是前陣子開發部有位新同事加入.
想當然爾,Eric絕對不會放棄對新人下手的機會......
在Eric的威逼利誘下,這位同事A終於也加入了Mac 一族.
並且接二連三的敗下Mac各類配件. 同事A直呼這是個不歸路, 他跳進火坑了.
但是過沒幾天就又看到他出了一堆連我們這些玩Mac的人都不一定知道的怪傢私. 
不過他也準備了些東西和我們分享.

他本身是個Linux & Windows使用者. 對於Windows依賴不那麼大. 使用Mac上手得還算快速.
幾個他認為必裝,並且都要我們每個人的電腦裡出現這些軟體. (被強迫購買軟體,哪有人這麼惡質....)

1. Textmatehttp://macromates.com/
   據說同事就是因為Textmate才跳來Mac. 雖然剛開始他一直喊還是Gedit好用.
   後來聽說是他花了一整個下午好好研究Textmate. 然後就開始愛上TextMate了.
   TextMate是一套文字編輯軟體. 有許多漂亮的顏色配置,字型,以及好用的工具.
   強烈推薦 同事A專文介紹的 : TextMate全攻略.

2. Codahttp://www.panic.com/coda/
   寫PHP嗎? 那一定不能錯過的跨平台PHP編輯器. 快速,乾淨,簡潔,方便.
   同事A說最棒的就是他有內建SSH遠端連線. 不像Textmate需要倚靠其他軟體.

3. Cinchhttp://www.macupdate.com/app/mac/33161/cinch
   雖然Windows風評不佳. 但還是有幾個可取之處. 羨慕Win7 Aero功能嗎?

   什麼是Aero功能? 就是只要將視窗拉到畫面最上方就能將視窗最大化.
   拉到最左邊或最右邊,視窗就會佔滿半個螢幕. 這樣在同時編輯幾份文件時是非常方便的.



4. Dropbox : http://www.dropbox.com
   這個軟體真的是紅到不行,辦公室裡每個人都用他.. 
   有人拿他來備份,有人拿他來抓東西,有人拿他來即時傳檔.
   還沒用過? 快去申請.

5. AppZap : http://www.appzapper.com
   移除軟體麻煩? 直接把軟體拖進AppZap就幫你都砍光光.
   連License也砍. 軟體可以無限循環試用.. XD

6. DropZone : http://aptonic.com/features.php
   DropZone根本就把所有有可能的繁瑣行為都幫你處理了.
   想要上傳檔案到Flicker? 上傳檔案到FTP? 安裝檔案?
   還是想要快速開啟軟體,但又不想佔用你的Dock?
   統統丟到DropZone就都幫你處理好了.

7. Adiumhttp://adium.im
   使用MSN,即時通訊,Facebook,IRC,Twiiter,AIM,QQ,GTALK? 這個軟體一手包.
   而且還有一堆外掛以及一堆漂亮的主題.

   Mac預設的terminal不夠好用? 改用他吧.

9. ExpanDrivehttp://www.expandrive.com
   想連遠端? 將遠端磁碟Mount成本地資料夾? MacFuse難用?  CyberDuck不能直接編輯?  用ExpanDrive吧. 

2008年07月26日

cache server故障

今天發生圖片cache server故障,造成很多圖片顯示不正確,
說明如下:
1.所有使用者圖片並未遺失,僅顯示錯誤,且圖片皆有數份備份。
2.請清除IE或其他瀏覽器的暫存檔案(cache),再重新整理網頁,就可看到正確的圖片。
詳細處理方式,會再正式公告!
3.新伺服器已經進機房安裝完畢,將在近日內上線。

造成不便,非常抱歉!

樂多開發部 敬上



develop發表於 樂多22:14引用(4)系統公告

2007年10月16日

系統公告 - 內頁邊欄顯示

系統公告 - 內頁邊欄顯示

「Blog內頁插入欄位功能」已經正式上線!即日起,Blog內頁中(文章頁、分類頁、月份彙整頁)已經設置了側邊欄位,你可以從「內頁插入欄位」這邊管理內頁的欄位,也可以從「Blog基本管理」中,選擇要不要設置內頁的欄位。

選擇是否使用內頁邊欄,操作選項如圖所示:

fields.jpg

develop發表於 樂多16:38回應(4)引用(0)系統公告

2007年10月11日

系統公告

系統公告:

上週, 由於部分使用者將影音類及圖形類型之檔案置放於樂多日誌所提供之空間,
但以外連方式,由外網進行讀取連結,造成巨大流量導致頻寬擁塞,
影響樂多日誌廣大使用者的瀏覽效率,為保護大多數會員之權益,
故先暫停影音類及圖形類型檔案之外連措施,以確保頻寬品質.

目前頻寬已進行昇級動作,已暫時全部開放所有檔案之外連機制,
但仍需視頻寬狀況,再作相關調整. 若外連機制開放後,仍影響連線瀏覽品質,
我們將再作必要的外連限制措施,以確保整體頻寬之品質.

再次感謝各位會員的支持,謝謝

樂多開發部敬上

develop發表於 樂多17:29回應(3)引用(0)系統公告

2007年04月19日

目前系統狀況

請參閱新系統公告
目前帳號未成功升級的皆會陸續完成,
若有使用上之問題,請以電話或Email與客服聯絡
Email: service@roodo.com

另有部份受影響功能如下:
1.xmlrpc api 狀態:無法使用 (預計今天修復)
2.Nokia lifeblog 狀態:無法使用 (預計今天修復)
不便之處敬請見諒!
updated:
1.今天(4/19)上午11:35~11:49 由於內部一主機陣亡,造成系統顯示舊版blog網頁,
已於11:50切換回新版上線。
2.回應編輯功能已修復
3.4/21 HTML編輯器不正常插入圖片、Youtube影片等狀況已修復
4.xmlrpc & lifeblog 延後恢復,目前全力讓基本資料轉移完成。

樂多開發部 敬上

develop發表於 樂多11:22回應(6)引用(1)系統公告

2007年02月15日

系統升級公告

近日系統升級部份說明如下:

1.新資料庫伺服器上線,可承受更高流量負載。
2.改寫垃圾回應、引用過濾系統,已於今日(2/15 12:00)上線,目前已過濾掉約2千篇垃圾(4小時)。

樂多開發部 敬上


develop發表於 樂多15:51回應(6)引用(0)系統公告

2007年02月12日

因應主機升級,停機公告

親愛的樂多用戶您好:

由於我們將於2007/2/13日15:00 ~ 20:00 進行主機升級作業,
因此需進行暫時停機動作。

作業時間預計為2007/2/13下午15點起至晚上20點止,
屆時樂多的所有服務將暫停運作,不便之處,敬請見諒!

感謝大家對於樂多的持續支持! 謝謝!

樂多所有成員 敬上



develop發表於 樂多17:04回應(1)引用(0)系統公告

2007年02月9日

2007/2/9 中午網站斷線原因?

2007/2/9 中午1:30分左右由於ISP業者之switch 調整設定參數有誤,
導致對外網路中斷,目前已與ISP協調並要求立即改善並予以修正,
目前所有服務已恢復正常,造成各位網友的不便,
在此致上十二萬分的歉意。
也感謝各位網友對於樂多的持續支持!

若有其他問題請洽客服信箱:service@roodo.com

樂多開發部 敬上
2007/2/9 

develop發表於 樂多14:39回應(9)引用(1)系統記錄