MongoDB 上市後,帶你認識這款非同一般的文檔資料庫
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。本文地址:https://linux.cn/article-9006-1.html2017-10-28 20:18 收藏: 1 10 月 20 日,位於紐約的 MongoDB 在納斯達克上市,當日收於 32.07 美元,比 24 美元的 IPO 價格高出 34%。MongoDB 首席財務官 Michael Gordon 放言:MongoDB 在資料庫系統這個市場大有機會取代 IBM 和 Oracle!如此的霸氣,底氣哪裡來?大資料和雲端運算的風被Google吹起來的時候,被Google收購的網路廣告公司 DoubleClick 的原 CEO 和 CTO 們覺得自己應該蹭上時代的列車,再次創業,然後 10gen 公司就這樣在紐約誕生了。它的創始人分別是 DoubleClick 的創始人兼 CTO 德懷特 · 梅裡曼Dwight Merriman、CEO 凱文 · 瑞安Kevin Ryan,以及工程師埃利特 · 霍洛威茲Eliot Horowitz。公司成立之初,創始人的想法和 MongoDB 這個產品毫無關係:他們想做一個雲端運算的服務,並用開源的東西來搭建。然而很遺憾,這幾位二次創業的人在開源社區找了一圈,也沒有看到一個讓人滿意的東西。於是,懷著構建偉大雲端運算服務的夢想,他們決定先把這個事情停一停,先搭一個自己滿意的資料庫出來。這個資料庫就是後來赫赫有名的 MongoDB。MongoDB 的名字需要解釋一下。國內很多人覺得是“芒果資料庫”,其實不是的。在英文裡,“芒果”是 Mango,而 Mongo 是 humongous 的中間部分,在英文裡是“巨大無比”的意思。所以 MongoDB 可以翻譯成“巨大無比的資料庫”,更優雅的叫法是“海量資料庫”。這幾位創始人的夢想就是建立一個和過去關聯式資料庫完全不一樣的資料庫,使之具有這樣一些特點:海量資料庫、資料庫的模型極其靈活、適合程式員使用。大概懷著偉大理想的人都會做出偉大的產品。MongoDB 註定是獨特的,在曆史上會留下濃重一筆的產品。當 MongoDB 開發出來的時候,創始人們給它的定義是:這是一個面向集合的、模式自由的文檔型資料庫。聽到這裡,你可能覺得有點暈了,那就先普及一下資料庫的基本常識吧。在過去的 30 多年裡,整個工業界的資料庫被所謂的關聯式資料庫所主導。一個不太嚴謹的說法是:關聯式資料庫的基本存放裝置單元是表。而一張表則是有行有列的資料集合,而列的定義有嚴格的類型。所以關聯式資料庫是一個嚴格定義的資料模型,每張表裡的每條記錄都是一個樣的。查詢關聯式資料庫的標準語言叫作 SQL。SQL 這個東西自從 IBM 發明出來以後,已經有 30 多年的曆史了,人們愛它的有,恨它的也有。但是通常來說,程式員不太喜歡這個東西,因為它的基本理念和程式員編程的想法不一致。後來所謂的 NoSQL 風,指的就是那些不用 SQL 作為查詢語言的資料存放區系統,而文檔資料庫 MongoDB 正是 NoSQL 的代表。和關聯式資料庫相反,MongoDB 的資料模型很不一樣。 簡單來說,MongoDB 面向的是集合而不是表,所有的資料存放區都以集合為單位,而每個集合裡麵包含的東西則稱為文檔,一個集合可以包含無數個文檔。每個文檔,我們可以大致認為是個 JSON 資料模型。文檔內建中繼資料。也就是說,MongoDB 裡面每個集合的每個文檔並不要求資料嚴格一致,而是可能千差萬別。MongoDB 還有一個特色,它的查詢使用的不是 SQL,而是程式語言和 API。 這樣一來,MongoDB 對程式員就是一個非常友善的選擇。當然,對於原本非常熟悉 SQL 的 DBA 和資料分析人員,這就顯得不太友好了。MongoDB 這個資料模型其實是非常腦洞大開的。在資料庫領域的幾十年發展裡,很多人都試過各種各樣挑戰關聯式資料庫的模型,但是鮮有成功的。即使成功了,也往往讓人感覺雷聲大雨點小,並不會對關聯式資料庫的根本造成實質性的影響。然而 MongoDB 這個東西一出現,對有經驗的資料庫從業人員和使用者來說,第一個感覺就是這個東西是來搞事情的。在開發 MongoDB 的過程中,隨著開發的深入,10gen 的人越來越覺得原來那個雲端運算平台是個虛無縹緲的東西。而這個他們一手締造的文檔資料庫,可能是一個驚天動地的大殺器!雖然這些人其實不是資料庫領域科班出身的,但他們對於資料庫領域某些弊端的深刻理解,的確是一般人望塵莫及的。於是他們決定徹底忘記那個雲端運算平台,集中精力開發這個被命名為“巨大無比的資料庫”的產品。在漫長的開發過後,2009 年 2 月 10gen 正式開源了 MongoDB 的第一個版本。這對於 10gen 來說是一個非常重要的裡程碑。然而我們必須要說,這個產品儘管看起來很新穎很有意思,但並不是一個很成熟的產品。它有無數多的東西沒實現,有無數多的坑等著人們去踩。但是這些都已經不重要了,踩著 NoSQL 的東風,MongoDB 開始飛起來了。10gen 是一家特別注重宣傳的公司,它在早期就對如何花錢做宣傳非常有一套。 他們的做法是在全球各地資助成立很多的使用者組,並組織每年一次的 MongoDB 大會。MongoDB 還開起了 Mongo 大學。他們知道自己產品的使用者都是開發人員,因此只要開發人員說好,尤其是各個地區那些在圈內有名的技術大牛說好,那麼不管這個產品實際上好不好,完善不完善,炒起來的感覺起碼很好。先把大家都綁上 Mongo 的船,再慢慢地修理這艘船也是一種做法。 俗話說“吃人的嘴短,拿人的手軟”,那些在 10gen 支援下成長起來的使用者組,那些 10gen 給報銷機票和旅館來做宣講的大牛們,互利互惠地就藉著 NoSQL 的東風把 MongoDB 給“吹”起來了。10gen 的 CTO 在某次採訪中就說,他覺得與其花費那麼多錢去做各種各樣的廣告,不如把錢花在資助使用者組,資助 MongoDB 的會議上。讓大家感覺到 MongoDB 產品好,公司對社區的支援力度大,是 10gen 花廣告費的最佳途徑。踏上 MongoDB “賊船”的公司很多,比如說賣車的 Edmunds、美國版的“五八同城” Craigslist,以及老牌網路企業——思科。但是這些都比不上當年非常優秀的社交初創公司獨角獸 FourSquare 使用 MongoDB 的影響來的大。當然這家公司現在是過氣了,但在社交網路最為火爆的時候,FourSquare 可是非常著名的。在 MongoDB 剛出來的時候,FourSquare 整個地“搬家”去用 MongoDB,這曾是一件非常大的事情。這件事情當然被 10gen 公司大書特書地進行宣傳。而 MongoDB 在獨角獸裡面被廣泛使用這一事實,讓 MongDB 是新時代的資料庫、MongoDB 適合開發 APP,以及 MongoDB 適合創業公司使用等等的觀點,都瞬間被“吹”了起來。到 2012 年的時候,作為 10gen 公司創始人之一的梅裡曼,其與人聯合運營的科技部落格 Business Insider 把 MongoDB 作為僅次於 HTML 的新時代最重要的技能宣傳給大家。一時間彷彿只要 MongoDB 掌握好了,就能夠有一碗飯吃。而很多線上教育網站也專門開起課來,給那些急於從其他職業轉戰 IT 的人普及 MongoDB 的用法。我們必須說,這種宣傳非常成功。大概是因為 MongoDB 的創業者在這之前已經成功創業一次,要知道 DoubleClick 在網路廣告領域非常成功,而且被成功賣給了Google,所以這些人搞創業公司的套路,一點都不像那些毫無經驗的初創公司創始人。他們非常懂得如何做才能夠最大限度地吸引眼球,最大程度地把自己的產品鋪出去。至於盈利與否,在初創階段,並不是他們最需要關心的問題。無論從何種角度去看,這個做法都很成功。除了在商業宣傳上很成功,10gen 發布 MongoDB 以後,在產品的開發和維護上也採取了和其他公司很不一樣的策略。 這個策略對於 MongoDB 的流行同樣功不可沒。簡單一點來說,10gen 公司決定集中精力做最重要的幾件事情:吸引客戶上 MongoDB 的船;讓 MongoDB 更好用;對常用的程式設計語言,提供各種各樣的庫和介面的支援;整個支援人員團隊非常地友善,而且盡職盡責。10gen 公司重點去做的這些事情,有很多值得我們深思的地方。如果要簡單概括的話,就是 10gen 公司希望所有使用 MongoDB 的使用者都覺得這個產品非常非常地好用。如果萬一真的出了問題,也有很好的支援人員來及時地解決問題。這種使用者體驗,絕對是開源社區中其他產品所不能達到的高度。 舉個簡單的例子,要想自己去部署 Hadoop 的一個計算叢集,那絕對是一件老難老難的事情了。如果這個東西容易部署,也就不會誕生一批以賣“更好用的 Hadoop”為生的公司了。再舉個例子,Hive 的部署也同樣不好用。如果我們從企業級應用上來看,Oracle 就是一個非常典型的難用的產品。一個企業如果想要把 Oracle 用好了,請有經驗的 DBA 是基本條件,很多時候都需要諮詢公司來協助設計解決方案。這種項目的落地絕非簡簡單單就能行的。而 SQL Server 作為一個後起之秀,在資料庫市場獲得成功的一個重要原因,並非效能有多好,而是“很好用”。當然,SQL Server 只是和 Oracle 比起來好用得多。但是 MongoDB 就不一樣了,10gen 公司的目標就是讓 MongoDB 非常非常地好用。而且從這一點上說,他們做得非常成功。整個社區裡無數的使用者組在提供支援,10gen 自己的客服絕對是使用者至上,有問必答,而且非常禮貌及時。整個 10gen 的開發重點,也是讓使用者更好上手。所有的因素加起來,MongoDB 對於創業公司來說就變得很有意思了:這個產品很好上手,支援也很多,而且還免費。創業公司拿著這個輪子,可以迅速實現自己的商務邏輯,而不需要再去學習怎麼搭東西。我想正是這個原因,突然之間就著 NoSQL 的春風,MongoDB 就開始流行起來了。然而,接下來事情的發展,多少有些脫離美好的一面。MongoDB 從產品的角度來說,其實就是個半成品。MongoDB 實在有太多的東西沒有做了,尤其是那些基本的東西,包括資料是不是會丟、結果是不是錯的、並發做得好不好、支不支援交易處理,以及當規模上來的時候,能不能夠通過加機器來解決問題。這些看起來本應是一個資料庫產品非常重要的、基本的東西,MongoDB 做得卻很差。一般來說,當一個人開始用 MongoDB 的時候,並不會遇到這樣的問題,當然主要還是規模不夠大,不至於觸發瓶頸和問題。當 APP 或者網站的規模上去之後,同時工作的人多了,問題就會越來越常見,越來越令人無法忍受。而 10gen 的 CEO 在宣傳時,又往往以極其誇大的方式,告訴大家 MongoDB 就是未來,MongoDB 就是一切。 這樣的結果就是:很多人用 MongoDB 去取代關聯式資料庫。然而漸漸地,這些人發現這種取代並沒有帶來真正的好處,除了一開始開發省了點力氣外,後面要維護的成本越來越高。而 10gen 這種側重於提高使用者初始體驗,外加一切都是 MongoDB 的宣傳方式,終於導致了負面作用。 有經驗的程式員開始跳出來,在各種論壇裡公開宣稱千萬別上 MongoDB 的“賊船”,因為雖然開船的時候容易,接下來要付出的代價也很大,一旦規模上來,各種丟資料的問題就都出來了。10gen 的 CTO 經常親自上陣去和這些程式員們 PK。他接受採訪的時候說,MongoDB 是個新產品嘛,新產品總是會有這樣那樣的問題,請給我們一些時間。他在論壇上和這些程式員交流,通常來說跳不出這樣一些套路,就是:這個問題我們在下一版裡會修好的;這個問題我從來沒有遇到過,估計是假的吧;這個問題你給我們開 BUG 啊;這個問題我不相信是真的,肯定是你們程式寫錯了。不管你信不信,這種回複,加上 10gen 的公關能力,確實在很多時候給 MongoDB 贏得了修複問題的時間。但是這樣的一種方式也讓使用者的接受度在降低。2009 到 2012 的三年裡,MongoDB 被接受的比例一直處于飛升狀態,而 2012 年開始這個曲線就越來越平。大家到底要不要用 MongoDB,已經不再是“無腦”上的問題,而是要反覆斟酌之後再做決定的事情。儘管 10gen 的 CEO 一直高調宣布 MongoDB 無所不能,大家趕緊上,實際上後面的幾年裡,很多人反而是漸漸地離開了 MongoDB。大家意識到,MongoDB 作為一個一開始上手很快的東西,可能只適合一個 V1 產品。產品上一點規模之後,背後的資料存放區系統還是要換的。當然,任何公司都有盈利的壓力。MongoDB 作為一個開源、免費的產品,10gen 公司不可能免費賺吆喝,它燒在社區建設上的錢也不是小數目。10gen 推出盈利產品的第一步,是推出了對 MongoDB 的商業付費支援人員。商業付費支援是很多公司常用的方式。比如說 Hadoop 平台公司的 Hortonworks,其收入就基本上依賴於其提供的商業付費支援人員。MongoDB 從這裡開始賺第一筆錢,並且其支援人員以“態度好”而著稱。僅僅靠商業支援人員並不能為公司帶來足夠的收入,10gen 的另外一個創收途徑是推出商業版的 MongoDB。 和開源的 MongoDB 比起來,商業版的自然要帶更多的功能。這些功能最主要的是一個加密的儲存引擎——資料以企業級密碼強度加密後再儲存,以及額外的安全相關的功能,比如說 LDAP 和 Kerberos 的支援,等等。這方面倒是體現了企業級應用市場和開源小創業公司之間的差異:企業級應用市場對加密和安全相關的內容要重視得多,沒有這些功能大企業是不會使用這些產品的。在很長時間裡,MongoDB 的企業版都是 10gen 公司最主要的收入來源。此外,10gen 也提供雲上的託管服務,給那些不願意自己管理資料庫的人提供服務。MongoDB 的業務模式和賺錢模式都還是很清晰的,但是一個巨大的問題在突顯:MongoDB 作為一個資料庫,始終都不是一個成熟的產品,並因此給很多採用 MongoDB 的企業帶來了一些出乎意料的東西。2013 年的時候,10gen 公司覺得自己的名字已經不太符合現在的品牌效應了,於是正式更名為 MongoDB 公司,將產品名和公司名匹配起來。儘管 MongoDB 的發展經曆了很多曲折,它的產品在功能上、效能上有很多問題,乃至受到了某些程式員的公開抵制;儘管 MongoDB 的接受度自 2012 年以來開始大幅度降低,它在企業市場上卻依然保持著一個非常可觀的佔有率。今天,我詳細講了 10gen 在 MongoDB 的開發、推廣、發展和營收上的策略。MongoDB 側重於易用性和對社區的支援,對其他方面則有些忽視了。那麼,倘若你在運營一家做工具類產品的初創公司,在技術發展上又會採取什麼樣的策略呢?轉載自:InfoQ https://mp.weixin.qq.com/s/rMTTHbmsmKOfi3haeUiTYQ作者: 徐飛本文為轉載,如需再次轉載,請查看來源站點 “InfoQ” 的要求。如果我們的工作有侵犯到您的權益,請及時聯絡我們。 文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽 :D 344 次點擊