2009年4月24日星期五

Oracle 會如何處理 MySQL ?



Oracle買下了SUN, 連帶的也擁有了MySQL這個具有廣大市場的資料庫產品, 原本是各據山頭的產品, 現在兩個產品如何在這種氣氛下變成親家呢? 會不會背後帶著刀一起吃晚餐呢?

Oracle的市場大多在大型企業跟公家單位, 而MySQL主打中小企業跟網路資料庫, 雖然有所區隔但是又有部分的重疊

MySQL前CEO,Marten Mickos認為Oracle不會虧待MySQL, 而這篇"甲骨文會讓MySQL跨入企業資料庫領域嗎", 也認為MySQL不會成為Oracle的入門階, 這篇"MySQL會消失嗎", 也認為Oracle不會讓MySQL消失

基本上MySQL有固定的市場, Oracle不會笨到往門外推, 但是也不可能讓MySQL威脅到Oracle的既有市場, 況且Oracle無法決定MySQL的市場大小, 但是MySQL會不會成為Oracle的入門階, 是值得商確的

既然不是只有Oracle可以支援MySQL, 但是Oracle可以讓MySQL移植到Oracle更方便, Oracle肯定會讓原本是MySQL的客戶, 但是有可能轉移使用Oracle的客戶, 能夠無痛進行轉移

也就是原本買不起Oracle而使用MySQL的客戶, 根本不是Oracle的目標, Oracle要鎖定的是因為開放性而使用MySQL的客戶(也就是較有錢的啦), Oracle會說服他們逐漸轉移成Oracle

並且Oracle除了資料庫外還有許多企業解決方案, 相信會變成可以跟MySQL包裝, 如此便可以擴大原本打不進的市場

因此Oracle不會殺雞取卵, 只會從雞身上拔毛, 但是應該也不會讓這隻雞變成老鷹, 來威脅本身的利益

標籤: , , ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2009年4月21日星期二

Oracle買下SUN

oracle

Microsoft在搜尋領域已經被Google跟Yahoo打得潰不成軍, 根據Compete的報告, MSN/Live 2009年的市場佔有率已經只有個位數(Mar-2009 6.3%, Mar-2009 with club live 8.7%), 現在連企業解決方案又被資料庫對手Oracle買下SUN後, 可以說已經進入紅色警戒...

昨天(2009/4/20)Oracle甲骨文以74億美元買下SUN昇陽, 以Oracle的資料庫加上SUN的JAVA、Solaris、及硬體設備, Oracle已經具備了作業系統、軟硬體, 儼然是企業一次購足的方案提供者了, 原本要買下SUN的IBM可以說鑄下大錯, 讓Oracle的甲骨文執行長Larry Ellison更是如虎添翼

在Oracle與SUN於今年夏天完成併購後, 整個資訊界將陸續會出現洗牌的局面

IBM與Microsoft的企業解決方案市場勢必繼續萎縮, Microsoft是否會乾脆專心search market?還是被企業解決方案市場萎縮的影響而更下滑?

Oracle憑藉JAVA及Solaris的餘威, 是否會往其他領域跨進? Oracle本身的大型資料庫加上MySQL的中小企業方案, Microsoft是否擋得住Larry Ellison的蹂躪? 都是整個技術趨勢觀察的重點, SUN的Middle Ware是市場的一塊大餅, 也是許多大型架構的核心, Oracle勢必會步步進逼其他領域

甲骨文的Ellison之前並不看好昇陽收購案, 在2003年Ellison曾表示「收購昇陽並不是個好主意」, 在當年的股東大會上Ellison說「甲骨文不應該跨入硬體產業,因此我們不可能去收購任何硬體公司」, 可是現在卻快速出手讓其他同業措手不及, 真不愧是Ellison!

p.s.
參考資料 : http://www.ithome.com.tw/itadm/article.php?c=54583

這篇新聞認為:

"...低毛利,以及如何處理與硬體合作夥伴之間的關係,會是甲骨文將面對的問題"

"但是從壞的一面看,卻可能侵蝕甲骨文毛利,甚至影響與硬體業者之間的合作關係。據華爾街日報估計,目前甲骨文毛利約在46%,完成與昇陽的合併之後,可能因此而減到只有35%"

"以往甲骨文與惠普(HP)、戴爾(Dell)等業者屬合作的關係,但一夕之間變成伺服器硬體大廠(昇陽目前全球排名第四)的甲骨文未來也將因此轉變為競爭對手。無怪乎有人認為,微軟可能成為這宗合併案的最大受益者:因為惠普與戴爾等硬體業者恐將轉向與微軟建立更強的合作關係。"

這裡的問題牽涉到

(1)SUN的硬體事業部門是否會降低Oracle的毛利?
(2)Oracle原本與HP/DELL的合作關係是否會因SUN的硬體事業部門而生變?

我想會有這個疑慮的人, 大概沒有看過Larry Ellison的傳記, Larry Ellison基本上是可怕的生意人, 不太可能會被SUN的硬體事業部門所拖垮, Microsoft也絕對吃不到任何好處, 很有可能把SUN的硬體事業部門切割分享給HP或DELL

繼續看看發展了!

標籤: , ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2008年6月25日星期三

Google資料中心的秘密



Google提供全球大量的服務,幾乎已經快橫跨整個資訊科技的服務,但是Google資料中心的內部運作一直都是秘而不宣,許多人可能都碰過Google的服務出狀況,但是這些狀況總能在可容忍的範圍內解決,你可能發現你的Gmail的容量一直在改變,是什麼架構讓空間像捏橡皮糖一樣越捏越大?前陣子Google伙伴Jeff Dean在Google I/O會議中稍微揭開了公司基礎設施的神秘面紗。

Google的神秘面紗包括了: (1)軟體 (2)硬體 (3)叢集平行處理機置

Google軟體的三個核心要素:GFS(Google檔案系統)、BigTable和MapReduce演算法。而硬體卻是一般的伺服器、處理器、硬碟、記憶體等等。另一方面伺服器的叢集能在半秒之內回應700至1,000台伺服器的搜尋請求。

根據Google的說法,GFS是"a scalable distributed file system for large distributed data-intensive applications. It provides fault tolerance while running on inexpensive commodity hardware, and it delivers high aggregate performance to a large number of clients". 就是這個GFS的分散式檔案系統,讓Google服務可以隨時長出空間或是切去毀損的部分,而管理這個GFS的機置就是BigTable。目前有超過200個叢集在執行GFS,其中許多都包含數千台主機。

GFS把一塊儲存的資料(通常是64MB),至少放在三台稱為chunkserver的主機內。

如果chunkserver發生故障,Master Server(主伺服器)便負責把資料備份到一個新的地方。至少在儲存層級,主機故障完全由GFS系統處理。

Google到底擁有多少台伺服器?據Dean表示,每個機櫃存放40台伺服器。而根據某項估計,Google目前在全球有36個資料中心,以每個中心有150個機櫃計算,Google的伺服器至少超過20萬台,並且每天都在增加中...下圖就是Google最早期的server rack,當然目前的硬體比這個肯定更驚人了。



Google之所以成為Google,部分原因是他們推翻了電腦界的傳統作法。當所有的超大型資料中心都使用主流伺服器和軟體,Google的資料中心絕大部分是靠本身的技術構建而成。Google把命運操縱在自己手中,共同創辦人Larry Page鼓勵員工"別太相信有什麼不可能的事情"。

要維持如此大規模的運作,也許可以說全世界是卯起來操Google的架構,Google必須對每一台機器抱有一種隨時可犧牲的態度。伺服器製造商喜歡主打他們的高階主機承受故障或當機的能力,但Google寧願把錢投資在容錯軟體上。他們認為擁有兩倍數量但較不可靠的硬體,勝過一半數量但較可靠的硬體。你必須在軟體的層級提供可靠度,如果你有1萬台主機在運作,每天一定會有一些東西掛掉。這個跟我們一般的認知確實有蠻大的差異,我們通常都希望有數量雖少,但功能穩定的機器,而不願意有一大籮筐兩光的機器。

每個新叢集上線的第一年,通常會發生1,000次個別主機的故障,數千次硬碟故障...

一次電力輸送問題,導致500至1,000台主機失效約6小時...

20次機櫃損壞,每次造成40至80台主機下線...

5次機櫃搖晃,導致半數的網路封包在傳送過程中遺失...

整個叢集至少一次重新上線,在兩天之內的任何時間,影響5%的主機...

整個叢集還有一半的機率會過熱,在5分鐘之內讓幾乎所有伺服器當機,並且花上1到2天的時間恢復...

雖然Google用一般硬體組件來組裝其伺服器,但卻不用傳統的封裝,他們要求Intel提供特製的主機板。Google目前在每40台伺服器的機櫃外,包覆一層外殼,而不是每台伺服器有個別的外殼。

Google在2004年開始設計的BigTable,用BigTable為所有資料提供若干結構,目前用在超過70個Google計畫,包括Google Maps、Google Earth、Blogger、Google Print、Orkut和核心搜尋索引。最大的BigTable實用範例管理橫跨數千台主機、約6 PT(petabytes)的資料。

Google在2003寫出第一版的MapReduce,讓該公司有辦法實際發揮那些資料的用處。舉例來說,MapReduce能找出某個特定字彙在Google的搜尋索引中出現的次數、列出所有特定字彙出現的網頁,和連結到某個特定網站的所有網站。

利用MapReduce,Google能用相對迅速的時間,建立一個包含"digital"、"network"和"society"三個字的所有網頁索引。"Dean說:「你必須能夠依序地橫跨數千台主機作業,才能在一個合理的時間內完成這項工作。」

MapReduce軟體在Google內部的應用日漸增加,2004年8月,該軟體執行2.9萬項工作,到2007年9月,已經暴增到220萬項。在這段期間,完成一項工作的平均時間也從634秒降至395秒,而MapReduce的工作產出則從193 terabytes上升到約1.4萬terabytes。Dean說,Google在任何一天都要執行約10萬項MapReduce工作,每一項工作佔用400台伺服器,且需要5到10分鐘完成。

MapReduce就像GFS,是特別設計用來迴避伺服器問題的。Dean表示:「當某台主機故障,主伺服器知道那台機器正在執行什麼工作,將命令其他主機接手那項map工作。你可能影響到100個map工作,但會有100台主機接手那些工作。」

MapReduce的可靠度一度遭到嚴厲的試煉,當時一個1,800台伺服器的叢集正進行維護作業,工作人員一次拔下80台主機的插頭,同時另外1,720台主機必須接下停頓的工作。Dean說:「速度變得有點慢,但工作全部完成。」而在一次2004年的簡報中,一個1,800台叢集的系統,承受了1,600台伺服器同時故障。

所以,Google資料中心的運作似乎如魚得水,一切順利。但該公司還不滿足,列出了一長串待改進的事項。大多數公司都試圖找出如何平順地將工作在伺服器之間轉移,但Google已經超越了那項挑戰,他們要能夠自由、平順,且自動地,將工作在各個資料中心間轉移。

Dean說:「我們下一代的基礎設施要是一個能夠橫跨大區塊主機轉移,而非單一機器的系統。」目前,某些大型的檔案系統具有不同的名稱,如GFS/Oregon和GFS/Atlanta,但他們都是彼此的拷貝。他表示:「我們要一個單一的名稱集。」

Google種種獨創的系統替他們開創了天下,也建立了其他競爭者很難跨過的門檻,但是隨著越來越複雜的環境,Google自己需要解決的問題,肯定挑戰會越來越大。

標籤: , , , , , ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2008年1月8日星期二

如何使用MS SQL的Stored Procedure與Trigger

上篇大致說明了MySQL的Stored Procedure與Trigger, 現在來談談Microsoft的SQL server (以SQL 2000為例, 2003/2005則大同小異)

雖然都是database的stored procedure與trigger,但是語法卻不同,另人頗為頭痛

Microsoft SQL的stored procedure主要以Transaction SQL語法 (T-SQL),除了procedure語法差異外, SQL語法本身也略有不同 ...


MS SQL使用 SELECT TOP 20 * FROM MY_TABLE

MySQL使用 SELECT * FROM MY_TABLE LIMIT 0,20

以上都是挑選資料中的前20筆資料

MS SQL使用LCASE,UCASE,INSTR,MID等函數來處理字串, 但MySQL與Oracle則使用LOWER, UPPER, LOCATE, SUBSTRING ... (MySQL string function reference, MySQL 5.0 reference)

Microsft走的路線以T-SQL及VB語法的方式, 因此只要T-SQL/VB熟悉, SQL server就易如反掌了 ... 因此筆者都以ANSI-SQL, T-SQL, VB, PHP這些概念將MySQL, Oracle, MS SQL一次通通學習起來

(1)Stored Procedure

建立SQL Server的stored procedure首先打開SQL Server Enterprise Manager, 選取預存程序, 按下滑鼠右鑑 ->新增預存程序 (畫面如下)



我們來建立一個簡單的例子:

CREATE PROCEDURE TEST_ADD
@emp_no varchar(10)

AS

SET NOCOUNT ON

BEGIN TRAN
INSERT testtable (emp_no) VALUES (@emp_no);
COMMIT TRAN
GO

以上紅色的字是依需要修改

有了這個stored procedure後就可以執行
EXEC TEST_ADD('0000000001')

SET NOCOUNT ON主要是希望不需回覆筆數
也就是"停止在部份結果集中傳回顯示Transact-SQL 陳述式或預存程序所影響之資料列數的訊息"

但是如果你希望執行本機stored procedure去操作遠端機器database

就必須改成

CREATE PROCEDURE TEST_ADD
@emp_no varchar(10)

AS

SET NOCOUNT ON
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
SET XACT_ABORT ON

BEGIN TRAN
INSERT LinkedServerName.master.dbo.testtable (emp_no) VALUES (@emp_no);
COMMIT TRAN
GO

並且不能在SQL Server Enterprise Manager下去新增stored Procedured
而要在Query Analyzer (前文提過)

以下是使用到Linked Server必須宣告的:

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
SET XACT_ABORT ON

(2)Trigger

建立SQL Server的Trigger首先打開SQL Server Enterprise Manager, 選取要建立trigger的table, 按下滑鼠右鑑 ->所有工作 -> 管理觸發程序 (畫面如下)



然後鍵入

CREATE TRIGGER trigger_name ON tableName
FOR INSERT

AS

SET NOCOUNT ON
DECLARE @newSeq_id VARCHAR(10)
SELECT @newSeq_id = (SELECT seq_id FROM Inserted)
UPDATE TableName2 set counter=counter+1 where seq_id = @newSeq_id

以上就是做: 當表格有任何資料插入, 則去另一表格對應欄位去累加

如果如同上面說的, 要運作到遠端的Linked Server, 除了要建立linked server外, 程序要改成:

CREATE TRIGGER trigger_name ON tableName
FOR INSERT

AS


SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
SET NOCOUNT ON
SET XACT_ABORT ON

DECLARE @newSeq_id VARCHAR(10)
SELECT @newSeq_id = (SELECT seq_id FROM Inserted)
UPDATE LinkedServerName.master.dbo.TableName2 set counter=counter+1 where seq_id = @newSeq_id

以上只是大略敘述使用方式, 至於UPDATE/INSERT/DELETE以及更深的T-SQL就要自己再研究啦 ...


標籤: ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

如何使用MySQL的Stored Procedure與Trigger

MySQL在5.0版後增強了資料庫stored procedure(5.0)與trigger(5.0.2)的功能, 根據MySQL自己的定義:

A stored procedure is a procedure (like a subprogram in a regular computing language) that is stored (in the database).

Correctly speaking, MySQL supports "routines" and there are two kinds of routines: stored procedures or functions.

也就是MySQL支援routines: stored procedure與functions, 而針對table的INSERT/UPDATE/DELETE動作,更加入了trigger


這幾個更新功能讓MySQL更具備大型資料庫的架勢, 以下就來談談如何測試這幾個功能:

(1)Stored Procedure

使用MySQL的stored procedure有幾個方式:

dos command/phpmyadmin/EMS的MySQL Manager

首先以DOS command進入MySQL



接著可以打入 show procedure status; 來看看有無既存的stored procedures



現在我們進入使用test這個database (MySQL預設已經有的資料庫)

use test;
show tables;
desc tbl;

看到了tbl這個表格的結構 ...



現在我們建一個stored procedure

先使用宣告 delimiter 來告訴MySQL結束字元是 //

然後打入以下

Create procedure mytest1()
update tbl set f3=concat(f1,f2);



這樣去呼叫mytest1後, 就把f1,f2兩個字串串起來存到f3了 !

再來建立一個傳變數的stored procedure



(2)Trigger

首先看看表格結構: tbl與tbl2



再來建立trigger, 並看看效果
當有資料插入tbl時, 把f1欄位也插入到tbl2的f1欄位



看看我們剛建入的trigger




因此只要對於SQL有認識, 使用stored procedure與trigger應該不成問題...
但是頭痛的是...MySQL與MS SQL的語法又略有差異, 因此下次也來談談MS SQL, 以及為何要使用stored procedure及trigger ... 待續了

標籤: ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2007年12月20日星期四

物件導向關聯式資料庫

關聯式資料庫管理系統( RDBMS, Relational Database Management System, 如mySQL, MSSQL等)是大家比較熟悉的資料庫系統,以database-table-field-record等概念來集合成資料,以field間的relation來建立table互相的關聯。但是這樣的形態有一個與實際世界的gap,也就是物件的class特性,因此而出現了物件導向的資料庫系統(OODBMS, Object-Oriented Database System, 如Caché)。

RDBMS與OODBMS的拉鋸戰,總是RDBMS勝出,最主要是因為有ER-Model及易懂的SQL等完整而簡易的工具來操作,因此雖然與實際世界有gap,但比較容易學習。

OODBMS是啥?看看以下的展示:
http://www.maddash.net/videos/intersystems/cache_demo/

也可以由這裡去找OODB的資源:
http://odbms.org/

另外的一個理論就是Object-Relational Database,使用RDBMS來建立OO的概念,這種作法就牽涉到Object-Relational Mapping,將物件與關聯式資料庫間做對映。

以上RDBMS、OODBMS、ORDBMS三種技術,到底有哪些優缺點呢?下次再談 ...

標籤: , ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院

2007年11月29日星期四

SQL Server Stored Procedure (預存程序) linked server bug

當使用SQL Server 2000建立stored procedure來跨server執行時,會發生許多讓人莫名其妙的問題,也許SQL 2003/2005有修正吧,但畢竟尚有許多人使用SQL 2000,因此把這些心得提供大家參考。

關於stored procedure語法就不再多廢話,因此只說明如何透過stored procedure來跨server。



首先需建立linked server(連結伺服器),方式有三種:

(1)打開Enterprise manager,在左邊Tree選單找到連結伺服器去新增。
(2)使用Query Analyzer,執行sp_addlinkedserver。
(3)使用程式(如VC/VB/ASP等),去執行sp_addlinkedserver,當不需要時再做sp_dropserver。

第三種方式當然最麻煩,因為還要寫一堆code,但是如果在run-time才能決定去連結哪個server的話,就得用第三種方式,不過這種情況應該不多見。

第二種方式就是在Query Analyzer的SQL查詢視窗輸入:
EXEC sp_addlinkedserver 'serverName'

如果你的狀況還需要其他設定,sp_addlinkedserver詳細語法如: http://technet.microsoft.com/zh-tw/library/ms190479.aspx

執行了sp_addlinkedserver後,重新整理後會在"連結伺服器"出現外部的SQL server(沒有重新整理的話看不到喔),這個方式的效果跟第一種方式其實一模一樣,只是第一種方式使用視窗式比較方便輸入設定。

OK,建立完成連結伺服器後,再來就看看怎麼去做連線了。

連線的方式也有三種:

(1)在Enterprise Manager使用查詢方式
如:
SELECT * FROM linkedServer...tableName (不指定db)
SELECT * FROM linkedServer.master.dbo.tableName (指定db)

(2)在Query Analyzer使用查詢方式
方式同上

(3)建立stored procedure去做
要建立stored procedure有兩個方式:在Enterprise manager用新增stored procedure方式、用Query Analyzer方式去建立。

如果你在Enterprise manager用新增stored procedure方式去使用linked server,永遠都會出現: 錯誤 7405 異質資料查詢需要設定ANSI_NULLS與ANSI_WARNINGS,但是當你在stored procedure設定

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

錯誤一樣出現 ... 真是被搞得無所適從

這個時候Query Analyzer就很重要啦,打開Query Analyzer後,在SQL window下輸入如:

CREATE PROCEDURE sp_yourSpName AS
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
select * from linkedserverName.master.dbo.tableName
GO

(當然以上select語句只是例子,請依需求修改)
神奇的是以上一模一樣的stored procedure內容卻無法在Enterprise manager去新增,錯誤7405永遠過不了 ...

使用Query Analyzer建好stored procedure後,就可以在Query Analyzer的SQL window去執行測試看看:

EXEC sp_yourSpName

(當然如果你的sp_yourSpName如果需要輸入引數,依你的需求去下EXEC指令)

就如此這般,使用了Query Analyzer可以pass掉ANSI_NULLS, ANSI_WARNINGS的錯誤啦,真是被Microsoft搞慘了,把這些資料公諸於世,讓大家不必再花冤枉時間,也算功德一件吧!

標籤: ,

繼續閱讀:台灣搜尋引擎優化與行銷研究院