導航:首頁 > 操作系統 > couchdbonandroid

couchdbonandroid

發布時間:2022-05-17 15:17:04

❶ 怎麼創建應用並部署代碼


要建立一個大數據系統,我們需要從數據流的源頭跟蹤到最後有價值的輸出,並在現有的Hadoop和大數據生態圈內根據實際需求挑選並整合各部分合適的組件來構建一個能夠支撐多種查詢和分析功能的系統平台。這其中既包括了對數據存儲的選擇,也涵蓋了數據線上和線下處理分離等方面的思考和權衡。此外,沒有任何一個引入大數據解決方案的商業應用在生產環境上承擔的起安全隱患。

1
計算框架篇
大數據的價值

只有在能指導人們做出有價值的決定時,數據才能體現其自身的價值。因此,大數據技術要服務於實際的用途,才是有意義的。一般來說,大數據可以從以下三個方面指導人們做出有價值的決定:

報表生成(比如根據用戶歷史點擊行為的跟蹤和綜合分析、 應用程序活躍程度和用戶粘性計算等);

診斷分析(例如分析為何用戶粘性下降、根據日誌分析系統為何性能下降、垃圾郵件以及病毒的特徵檢測等);

決策(例如個性化新聞閱讀或歌曲推薦、預測增加哪些功能能增加用戶粘性、幫助廣告主進行廣告精準投放、設定垃圾郵件和病毒攔截策略等)。

圖 1

進一步來看,大數據技術從以下三個方面解決了傳統技術難以達成的目標(如圖1):

在歷史數據上的低延遲(...「
要建立一個大數據系統,我們需要從數據流的源頭跟蹤到最後有價值的輸出,並在現有的Hadoop和大數據生態圈內根據實際需求挑選並整合各部分合適的組件來構建一個能夠支撐多種查詢和分析功能的系統平台。這其中既包括了對數據存儲的選擇,也涵蓋了數據線上和線下處理分離等方面的思考和權衡。此外,沒有任何一個引入大數據解決方案的商業應用在生產環境上承擔的起安全隱患。

1
計算框架篇
大數據的價值

只有在能指導人們做出有價值的決定時,數據才能體現其自身的價值。因此,大數據技術要服務於實際的用途,才是有意義的。一般來說,大數據可以從以下三個方面指導人們做出有價值的決定:

報表生成(比如根據用戶歷史點擊行為的跟蹤和綜合分析、 應用程序活躍程度和用戶粘性計算等);

診斷分析(例如分析為何用戶粘性下降、根據日誌分析系統為何性能下降、垃圾郵件以及病毒的特徵檢測等);

決策(例如個性化新聞閱讀或歌曲推薦、預測增加哪些功能能增加用戶粘性、幫助廣告主進行廣告精準投放、設定垃圾郵件和病毒攔截策略等)。

圖 1

進一步來看,大數據技術從以下三個方面解決了傳統技術難以達成的目標(如圖1):

在歷史數據上的低延遲(互動式)查詢,目標是加快決策過程和時間, 例如分析一個站點為何變緩慢並嘗試修復它;

在實時數據上的低延遲查詢,目的是幫助用戶和應用程序在實時數據上做出決策, 例如實時檢測並阻攔病毒蠕蟲(一個病毒蠕蟲可以在1.3秒內攻擊1百萬台主機);

更加精細高級的數據處理演算法,這可以幫助用戶做出「更好」的決策, 例如圖數據處理、異常點檢測、趨勢分析及其他機器學習演算法。

蛋糕模式

從將數據轉換成價值的角度來說,在Hadoop生態圈十年蓬勃成長的過程中,YARN和Spark這二者可以算得上是里程碑事件。Yarn的出現使得集群資源管理和數據處理流水線分離,大大革新並推動了大數據應用層面各種框架的發展(SQL on Hadoop框架, 流數據,圖數據,機器學習)。

它使得用戶不再受到MapRece開發模式的約束,而是可以創建種類更為豐富的分布式應用程序,並讓各類應用程序運行在統一的架構上,消除了為其他框架維護獨有資源的開銷。就好比一個多層蛋糕,下面兩層是HDFS和Yarn, 而MapRece就只是蛋糕上層的一根蠟燭而已,在蛋糕上還能插各式各樣的蠟燭。

在這一架構體系中,總體數據處理分析作業分三塊(圖2),在HBase上做互動式查詢(Apache Phoenix, Cloudera Impala等), 在歷史數據集上編寫MapRece程序抑或利用Hive等做批處理業務, 另外對於實時流數據分析Apache Storm則會是一種標准選擇方案。

雖然Yarn的出現極大地豐富了Hadoop生態圈的應用場景,但仍存有兩個顯而易見的挑戰:一是在一個平台上需要維護三個開發堆棧;二是在不同框架內很難共享數據,比如很難在一個框架內對流數據做互動式查詢。這也意味著我們需要一個更為統一和支持更好抽象的計算框架的出現。

圖 2

一統江湖

Spark的出現使得批處理任務,互動式查詢,實時流數據處理被整合到一個統一的框架內(圖3),同時Spark和現有的開源生態系統也能夠很好地兼容(Hadoop, HDFS, Yarn, Hive, Flume)。 通過啟用內存分布數據集,優化迭代工作負載, 用戶能夠更簡單地操作數據,並在此基礎上開發更為精細的演算法,如機器學習和圖演算法等。

有三個最主要的原因促使Spark目前成為了時下最火的大數據開源社區(擁有超過來自200多個公司的800多個contributors):

Spark可以擴展部署到超過8000節點並處理PB級別的數據,同時也提供了很多不錯的工具供應用開發者進行管理和部署;

Spark提供了一個互動式shell供開發者可以用Scala或者Python即時性試驗不同的功能;

Spark提供了很多內置函數使得開發者能夠比較容易地寫出低耦合的並且能夠並發執行的代碼,這樣開發人員就更能集中精力地為用戶提供更多的業務功能而不是花費時間在優化並行化代碼之上。

當然Spark也和當年的MapRece一樣不是萬靈葯,比如對實時性要求很高的流數據處理上Apache Storm還是被作為主流選擇, 因為Spark Streaming實際上是microbatch(將一個流數據按時間片切成batch,每個batch提交一個job)而不是事件觸發實時系統,所以雖然支持者們認為microbatch在系統延時性上貢獻並不多,但在生產環境中和Apache Storm相比還不是特別能滿足對低延時要求很高的應用場景。

比如在實踐過程中, 如果統計每條消息的平均處理時間,很容易達到毫秒級別,但一旦統計類似service assurance(確保某條消息在毫秒基本能被處理完成)的指標, 系統的瓶頸有時還是不能避免。

但同時我們不能不注意到,在許多用例當中,與流數據的交互以及和靜態數據集的結合是很有必要的, 例如我們需要在靜態數據集上進行分類器的模型計算,並在已有分類器模型的基礎上,對實時進入系統的流數據進行交互計算來判定類別。

由於Spark的系統設計對各類工作(批處理、流處理以及互動式工作)進行了一個共有抽象,並且生態圈內延伸出了許多豐富的庫(MLlib機器學習庫、SQL語言API、GraphX), 使得用戶可以在每一批流數據上進行靈活的Spark相關操作,在開發上提供了許多便利。

Spark的成熟使得Hadoop生態圈在短短一年之間發生了翻天覆地的變化, Cloudera和Hortonworks紛紛加入了Spark陣營,而Hadoop項目群中除了Yarn之外已經沒有項目是必須的了(雖然Mesos已在一些場合替代了Yarn), 因為就連HDFS,Spark都可以不依賴。但很多時候我們仍然需要像Impala這樣的依賴分布式文件系統的MPP解決方案並利用Hive管理文件到表的映射,因此Hadoop傳統生態圈依然有很強的生命力。

另外在這里簡要對比一下互動式分析任務中各類SQL on Hadoop框架,因為這也是我們在實際項目實施中經常遇到的問題。我們主要將注意力集中在Spark SQL, Impala和Hive on Tez上, 其中Spark SQL是三者之中歷史最短的,論文發表在15年的SIGMOD會議上, 原文對比了數據倉庫上不同類型的查詢在Shark(Spark最早對SQL介面提供的支持)、Spark SQL和Impala上的性能比較。

也就是說, 雖然Spark SQL在Shark的基礎上利用Catalyst optimizer在代碼生成上做了很多優化,但總體性能還是比不上Impala, 尤其是當做join操作的時候, Impala可以利用「predicate pushdown」更早對表進行選擇操作從而提高性能。

不過Spark SQL的Catalyst optimizer一直在持續優化中,相信未來會有更多更好的進展。Cloudera的Benchmark評測中Impala一直比其他SQL on Hadoop框架性能更加優越,但同時Hortonworks評測則指出雖然單個數據倉庫查詢Impala可以在很短的時間內完成,但是一旦並發多個查詢Hive on Tez的優勢就展示出來。另外Hive on Tez在SQL表達能力也要比Impala更強(主要是因為Impala的嵌套存儲模型導致的), 因此根據不同的場景選取不同的解決方案是很有必要的。

圖 3

各領風騷抑或代有才人出?

近一年比較吸引人眼球的Apache Flink(與Spark一樣已有5年歷史,前身已經是柏林理工大學一個研究性項目,被其擁躉推崇為繼MapRece, Yarn,Spark之後第四代大數據分析處理框架)。 與Spark相反,Flink是一個真正的實時流數據處理系統,它將批處理看作是流數據的特例,同Spark一樣它也在嘗試建立一個統一的平台運行批量,流數據,互動式作業以及機器學習,圖演算法等應用。

Flink有一些設計思路是明顯區別於Spark的,一個典型的例子是內存管理,Flink從一開始就堅持自己精確的控制內存使用並且直接操作二進制數據,而Spark一直到1.5版本都還是試用java的內存管理來做數據緩存,這也導致了Spark很容易遭受OOM以及JVM GC帶來的性能損失。

但是從另外一個角度來說, Spark中的RDD在運行時被存成java objects的設計模式也大大降低了用戶編程設計門檻, 同時隨著Tungsten項目的引入,Spark現在也逐漸轉向自身的內存管理, 具體表現為Spark生態圈內從傳統的圍繞RDD(分布式java對象集合)為核心的開發逐漸轉向以DataFrame(分布式行對象集合)為核心。

總的來說,這兩個生態圈目前都在互相學習,Flink的設計基因更為超前一些,但Spark社區活躍度大很多,發展到目前毫無疑問是更為成熟的選擇,比如對數據源的支持(HBase, Cassandra, Parquet, JSON, ORC)更為豐富以及更為統一簡潔的計算表示。另一方面,Apache Flink作為一個由歐洲大陸發起的項目,目前已經擁有來自北美、歐洲以及亞洲的許多貢獻者,這是否能夠一改歐洲在開源世界中一貫的被動角色,我們將在未來拭目以待。

2
NoSQL資料庫篇
NoSQL資料庫在主流選擇上依舊集中在MongoDB, HBase和Cassandra這三者之間。在所有的NoSQL選擇中,用C 編寫的MongoDB幾乎應該是開發者最快也最易部署的選擇。MongoDB是一個面向文檔的資料庫,每個文檔/記錄/數據(包括爬取的網頁數據及其他大型對象如視頻等)是以一種BSON(Binary JSON)的二進制數據格式存儲, 這使得MongoDB並不需要事先定義任何模式, 也就是模式自由(可以把完全不同結構的記錄放在同一個資料庫里)。

MongoDB對於完全索引的支持在應用上是很方便的,同時也具備一般NoSQL分布式資料庫中可擴展,支持復制和故障恢復等功能。 MongoDB一般應用於高度伸縮性的緩存及大尺寸的JSON數據存儲業務中,但不能執行「JOIN」操作,而且數據佔用空間也比較大,最被用戶詬病的就是由於MongoDB提供的是資料庫級鎖粒度導致在一些情況下建索引操作會引發整個資料庫阻塞。一般來說,MongoDB完全可以滿足一些快速迭代的中小型項目的需求。

下面來主要談談Cassandra和HBase之間的比較選擇。Cassandra和HBase有著截然不同的基因血統。HBase和其底層依賴的系統架構源自於著名的Google FileSystem(發表於2003年)和Google BigTable設計(發表於2006年), 其克服了HDFS注重吞吐量卻犧牲I/O的缺點,提供了一個存儲中間層使得用戶或者應用程序可以隨機讀寫數據。

具體來說,HBase的更新和刪除操作實際上是先發生在內存MemStore中, 當MemStore滿了以後會Flush到StoreFile, 之後當StoreFile文件數量增長到一定閾值後會觸發Compact合並操作,因此HBase的更新操作其實是不斷追加的操作,而最終所有更新和刪除數據的持久化操作都是在之後Compact過程中進行的。

這使得應用程序在向內存MemStore寫入數據後,所做的修改馬上就能得到反映,用戶讀到的數據絕不會是陳舊的數據,保證了I/O高性能和數據完全一致性; 另一方面來說, HBase基於Hadoop生態系統的基因就已經決定了他自身的高度可擴展性、容錯性。

在數據模型上,Cassandra和HBase類似實現了一個key-value提供面向列式存儲服務,其系統設計參考了 Amazon Dynamo (發表於2007年) 分布式哈希(DHT)的P2P結構(實際上大部分Cassandra的初始工作都是由兩位從Amazon的Dynamo組跳槽到Facebook的工程師完成),同樣具有很高的可擴展性和容錯性等特點。

除此之外, 相對HBase的主從結構,Cassandra去中心化的P2P結構能夠更簡單地部署和維護,比如增加一台機器只需告知Cassandra系統新節點在哪,剩下的交給系統完成就行了。同時,Cassandra對多數據中心的支持也更好,如果需要在多個數據中心進行數據遷移Cassandra會是一個更優的選擇。

Eric Brewer教授提出的經典CAP理論認為任何基於網路的數據共享系統,最多隻能滿足數據一致性、可用性、分區容忍性三要素中的兩個要素。實際分布式系統的設計過程往往都是在一致性與可用性上進行取捨,相比於HBase數據完全一致性的系統設計,Cassandra選擇了在優先考慮數據可用性的基礎上讓用戶自己根據應用程序需求決定系統一致性級別。

比如:用戶可以配置QUONUM參數來決定系統需要幾個節點返回數據才能向客戶端做出響應,ONE指只要有一個節點返回數據就可以對客戶端做出響應,ALL指等於數據復制份數的所有節點都返回結果才能向客戶端做出響應,對於數據一致性要求不是特別高的可以選擇ONE,它是最快的一種方式。

從基因和發展歷史上來說,HBase更適合用做數據倉庫和大規模數據處理與分析(比如對網頁數據建立索引), 而Cassandra則更適合用作實時事務和互動式查詢服務。Cassandra在國外市場佔有比例和發展要遠比國內紅火, 在不少權威測評網站上排名都已經超過了HBase。目前Apache Cassandra的商業化版本主要由軟體公司DataStax進行開發和銷售推廣。另外還有一些NoSQL分布式資料庫如Riak, CouchDB也都在各自支持的廠商推動下取得了不錯的發展。

雖然我們也考慮到了HBase在實際應用中的不便之處比如對二級索引的支持程度不夠(只支持通過單個行鍵訪問,通過行鍵的范圍查詢,全表掃描),不過在明略的大數據基礎平台上,目前整合的是依然是HBase。

理由也很簡單,HBase出身就與Hadoop的生態系統緊密集成,其能夠很容易與其他SQL on Hadoop框架(Cloudera Impala, Apache Phoenix, or Hive on Tez)進行整合,而不需要重新部署一套分布式資料庫系統,而且可以很方便地將同樣的數據內容在同一個生態系統中根據不同框架需要來變換存儲格式(比如存儲成Hive表或者Parquet格式)。

我們在很多項目中都有需要用到多種SQL on Hadoop框架,來應對不同應用場景的情況,也體會到了在同一生態系統下部署多種框架的簡便性。 但同時我們也遇到了一些問題, 因為HBase項目本身與HDFS和Zookeeper系統分別是由不同開源團隊進行維護的,所以在系統整合時我們需要先對HBase所依賴的其他模塊進行設置再對HBase進行配置,在一定程度上降低了系統維護的友好性。

目前我們也已經在考慮將Cassandra應用到一些新的客戶項目中,因為很多企業級的應用都需要將線上線下資料庫進行分離,HBase更適合存儲離線處理的結果和數據倉庫,而更適合用作實時事務和並發交互性能更好的Cassandra作為線上服務資料庫會是一種很好的選擇。

3
大數據安全篇
隨著越來越多各式各樣的數據被存儲在大數據系統中,任何對企業級數據的破壞都是災難性的,從侵犯隱私到監管違規,甚至會造成公司品牌的破壞並最終影響到股東收益。給大數據系統提供全面且有效的安全解決方案的需求已經十分迫切:

大數據系統存儲著許多重要且敏感的數據,這些數據是企業長久以來的財富

與大數據系統互動的外部系統是動態變化的,這會給系統引入新的安全隱患

在一個企業的內部,不同Business Units會用不同的方式與大數據系統進行交互,比如線上的系統會實時給集群推送數據、數據科學家團隊則需要分析存儲在數據倉庫內的歷史數據、運維團隊則會需要對大數據系統擁有管理許可權。

因此為了保護公司業務、客戶、財務和名譽免於被侵害,大數據系統運維團隊必須將系統安全高度提高到和其他遺留系統一樣的級別。同時大數據系統並不意味著引入大的安全隱患,通過精細完整的設計,仍然能夠把一些傳統的系統安全解決方案對接到最新的大數據集群系統中。

一般來說,一個完整的企業級安全框架包括五個部分:

Administration: 大數據集群系統的集中式管理,設定全局一致的安全策略

Authentication: 對用戶和系統的認證

Authorization:授權個人用戶和組對數據的訪問許可權

Audit:維護數據訪問的日誌記錄

Data Protection:數據脫敏和加密以達到保護數據的目的

系統管理員要能夠提供覆蓋以上五個部分的企業級安全基礎設施,否則任何一環的缺失都可能給整個系統引入安全性風險。

在大數據系統安全集中式管理平台這塊,由Hortonworks推出的開源項目Apache Ranger就可以十分全面地為用戶提供Hadoop生態圈的集中安全策略的管理,並解決授權(Authorization)和審計(Audit)。例如,運維管理員可以輕松地為個人用戶和組對文件、數據等的訪問策略,然後審計對數據源的訪問。

與Ranger提供相似功能的還有Cloudera推出的Apache Sentry項目,相比較而言Ranger的功能會更全面一些。

而在認證(Authentication)方面, 一種普遍採用的解決方案是將基於Kerberos的認證方案對接到企業內部的LDAP環境中, Kerberos也是唯一為Hadoop全面實施的驗證技術。

另外值得一提的是Apache Knox Gateway項目,與Ranger提高集群內部組件以及用戶互相訪問的安全不同,Knox提供的是Hadoop集群與外界的唯一交互介面,也就是說所有與集群交互的REST API都通過Knox處理。這樣,Knox就給大數據系統提供了一個很好的基於邊緣的安全(perimeter-based security)。

基於以上提到的五個安全指標和Hadoop生態圈安全相關的開源項目, 已經足已證明基於Hadoop的大數據平台我們是能夠構建一個集中、一致、全面且有效的安全解決方案。
我市再ITjob管網上面找的

❷ 如何安裝ACRA一個Android應用Crash跟蹤系統

創建伺服器
伺服器端是客戶端的一個先決條件。 因此,讓我們從伺服器端開始。
ACRA是精心設計的,是相當受歡迎的(ACRA是針對客戶端應用的,服務端可以自己搭建)。 它允許開發者開發自己的伺服器系統,我們找到網上有很多種ACRA服務端。我建議選擇–也是最好的—Acralyzer,Acralyzer也是ACRA團隊開發的,Acralyzer工作在Apache CouchDB之上,所以除了CouchDB之外,沒有必要安裝任何額外的軟體。
Acralyzer是一個全功能的後端崩潰跟蹤系統。 從不同設備反饋回的同一堆棧跟蹤報告會被歸類為一個問題。如果你已經修復了某個問題,你可以通過簡單的點擊一下來關閉這個問題。同時它也是實時工作的。 這個系統我找到的唯一一個缺點就是他的界面有點復雜,但是無所謂啦,本來就是為開發者設計的嘛 =P。
安裝很簡單,下面是一個如何在Ubuntu上安裝Acralyzer的完整的指導。
首先從安裝couchdb開始,打開終端,輸入如下命令
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs">apt-get install couchdb</code></code></code>
使用如下指令來驗證是否安裝成功
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs">curl http://127.0.0.1:5984</code></code></code></code>
如果安裝成功,會返回如下信息
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json">{'couchdb':'Welcome','version':'1.2.0'}</code></code></code></code></code>
編輯/etc/couchdb/local.ini 文件來允許我們通過外部IP來訪問CouchDB(默認只能通關127.0.0.1來訪問)。只需要把下面兩行的注釋去掉即可。
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json"><code class="hljs lisp">;port = 5984
2.;bind_address = 127.0.0.1</code></code></code></code></code></code>
然後修改為:
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json"><code class="hljs lisp"><code class="hljs ini">port = 5984
2.bind_address = 0.0.0.0</code></code></code></code></code></code></code>
在這個文件里,你還應該添加一個用戶名/密碼來作為管理員賬戶,找到這一行(一般是在文件末尾):
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json"><code class="hljs lisp"><code class="hljs ini"><codeclass="hljs json">[admins]</code></code></code></code></code></code></code></code>
在它的下一行添加一個 username=password形式的內容。例如:
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json"><code class="hljs lisp"><code class="hljs ini"><codeclass="hljs json"><code class="hljs fix">nuuneoi = 12345</code></code></code></code></code></code></code></code></code>
不用擔心在這里寫明文密碼會不會有問題,一旦CouchDB重啟後,你的密碼會被自動哈希加密,並且是不可讀的
保存文件,通過下面的語句來重啟CouchDB:
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json"><code class="hljs lisp"><code class="hljs ini"><codeclass="hljs json"><code class="hljs fix"><code class="hljs ruby">curl -X POST http://localhost:5984/_restart -H'Content-Type: application/json'
2.</code></code></code></code></code></code></code></code></code></code>
現在,你就可以通過瀏覽器來訪問CouchDB了,網頁服務被稱為Futon—CouchDB的界面後端。通過以下地址來打開瀏覽器:
view sourceprint?
1.<code class="hljs "><code class="hljs "><code class="hljs cs"><code class="hljs cs"><code class="hljs json"><code class="hljs lisp"><code class="hljs ini"><codeclass="hljs json"><code class="hljs fix"><code class="hljs ruby"><code class="hljs cs">http://<YOUR_SERVER_IP>:5984/_utils</code></code></code></code></code></code></code></code></code></code></code>

❸ mac上用brew把node裝好了,卻沒有npm,怎麼辦

這里有一篇很好的 Node.js 介紹文章 great nodejs intro ,它將給你一個非常方便的介紹 Node.js 和 CouchDB,並給出一個實例實現 REST 的服務用於執行書簽的 CRUD 操作,使用 CouchDB 作為資料庫。

本文將介紹在 Mac OS X 下安裝並開始使用 Node.js ,這個過程大概需要 30 分鍾左右的時間,其中我們還將安裝 CouchDB,並實現基於 CouchDB 的 REST API。

本文假設你機器上已經裝有Git,如果還沒有,請參考此文進行安裝。

安裝 node.js 和 npm

最簡單的方法是在 node.js 的官網上通過 the nodejs download section 頁面並選擇 Mac 下的安裝程序,它將在你的機器上安裝 Node.js 和 npm (node package manager).
安裝成功後你就可以使用 node 和 npm 命令了。

安裝 CouchDB

因為本文需要使用 CouchDB 來存儲對象,因此還需要安裝 CouchDB.

安裝 CouchDB 稍微麻煩一些,因為我們需要下載源碼然後編譯I,在此之前需要先安裝 Homebrew ,請執行以下命令:

git clone https://github.com/mxcl/homebrew.git cd homebrew/bin brew install autoconf automake libtool brew install couchdb

重要的提示:CouchDB 之前報出一個問題可能會阻止你安裝,要修復這個問題需要手工編輯 ~/couch/homebrew/Library/Formula/couchdb.rb 文件,編輯內容如下:

復制代碼 代碼如下:require 'formula'

class Couchdb < Formula
url 'http://www.apache.org/dyn/closer.cgi?path=couchdb/source/1.1.1/apache-couchdb-1.1.1.tar.gz'
homepage "http://couchdb.apache.org/"
md5 ''

請注意需要將 url 中的 source 刪除,最終修改結果如下:

復制代碼 代碼如下:require 'formula'

class Couchdb < Formula
url 'http://www.apache.org/dyn/closer.cgi?path=couchdb/1.1.1/apache-couchdb-1.1.1.tar.gz'
homepage "http://couchdb.apache.org/"
md5 ''

如果安裝過程被掛起了,你需要 CTRL-C 終止並執行下面命令重試:

復制代碼 代碼如下:./brew install -v couchdb

更多關於 Mac OS X 上安裝 CouchDB 的信息請閱讀 "Installing CouchDB on OSX".

一旦 CouchDB 編譯完成,我們可以手工執行 ./couchdb 來啟動它,你可以在瀏覽器中打開 http://127.0.0.1:5984/_utils 這個地址以驗證 CouchDB 安裝是否成功。

下載教程

現在所需的軟體都已經安裝完成,我們接下來繼續 Node.js 的介紹實例。

首先我們使用 Git 來獲取實例源碼

git clone https://github.com/indexzero/nodejs-intro.git
創建 CouchDB 資料庫
在開始教程之前我們需要創建一個 CouchDB 資料庫,先確保 CouchDB 已經啟動,然後使用如下命令創建資料庫:

$ curl -X PUT http://127.0.0.1:5984/pinpoint-dev10
{"ok":true}

你可以在瀏覽器中訪問 http://127.0.0.1:5984/_utils 就可以看到新創建的資料庫。

這里還有一個非常棒的 CouchDB 的指南。

開始教程

node js 實例使用模塊化的方式構建,lib 目錄包含很多模塊,而伺服器腳本在 bin 目錄下。

例如,我們要啟動 CouchDB 教程,可以在 bin 目錄下執行下面命令:

./server -t 02couchdb -s

其中 -t 參數允許你指定要執行的 lib 目錄下的模塊,-s 參數用以設置我們剛建立的 pinpoint-dev 資料庫。

sys - util 變化

根據 Node.js 的版本不同,你可能會看到如下的錯誤或者是警告:

復制代碼 代碼如下:$ node -v
v0.7.7-pre

$ ./server -t 02couchdb -s

node.js:247
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: The "sys" mole is now called "util".
at sys.js:1:69
at NativeMole.compile (node.js:572:5)
at Function.require (node.js:540:18)
at Function._load (mole.js:297:25)
at Mole.require (mole.js:357:17)
at require (mole.js:373:17)
at Object. (/home/ubuntu/nodejs-intro/bin/server:3:11)
at Mole._compile (mole.js:444:26)
at Object..js (mole.js:462:10)
at Mole.load (mole.js:351:32)

為了避免這個問題,你需要將所有調用 `require("sys")` 替換成 `require("util")`

Node v0.6.14 不會拋出錯誤信息,但會提示警告:

復制代碼 代碼如下:$ node -v
v0.6.14

$ ./server -t 02couchdb -s
The "sys" mole is now called "util". It should have a similar interface.
Pinpoint demo server listening for 02couchdb on http://127.0.0.1:8000

運行教程

當你運行某個教程時,會提示一些錯誤:

復制代碼 代碼如下:$ ./server 02couchdb
The "sys" mole is now called "util". It should have a similar interface.

node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find mole 'optimist'
at Function._resolveFilename (mole.js:332:11)
at Function._load (mole.js:279:25)
at Mole.require (mole.js:354:17)
at require (mole.js:370:17)
at Object. (/Users/ddewaele/Projects/Node/nodejs-intro/bin/server:5:12)
at Mole._compile (mole.js:441:26)
at Object..js (mole.js:459:10)
at Mole.load (mole.js:348:31)
at Function._load (mole.js:308:12)
at Array.0 (mole.js:479:10)

該教程包含很多依賴,我們需要使用 npm 來下載這些依賴的包。

安裝 node 包

Node packages (dependencies) 可通過 npm 命令來安裝,例如:

$ npm install optimist npm http GET https://registry.npmjs.org/optimist npm http 200 https://registry.npmjs.org/optimist npm http GET https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz npm http GET https://registry.npmjs.org/wordwrap npm http 200 https://registry.npmjs.org/wordwrap npm http GET https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz npm http 200 https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz [email protected] ../node_moles/optimist └── [email protected]

這些包將被安裝到 node_moles 文件夾中:

$ ls -l ../node_moles/ total 0 drwxr-xr-x 10 ddewaele staff 340 Apr 1 18:54 optimist

本文需要安裝如下的 node 包:

npm install winston npm install cradle npm install journey npm install optimist

運行教程

進入 bin 目錄,通過下面命令來運行教程:

$ ./server -t 02couchdb -s The "sys" mole is now called "util". It should have a similar interface. Pinpoint demo server listening for 02couchdb on http://127.0.0.1:8000
然後打開瀏覽器訪問 http://127.0.0.1:8000/bookmarks ,將會看到如下的結果:

復制代碼 代碼如下:{"bookmarks":[]}

這表示服務已經啟動並運行,為了在 CouchDB 中添加點測試數據,我們可以使用 http-console 控制台來訪問 CouchDB 的 REST 服務。

安裝 http-console

有一個非常棒的工具可以幫助你調試服務,該工具名為 http-console ,你可使用 npm 來安裝:

sudo npm install -g http-console
然後就可以在命令行中執行該工具,不幸的是當我們執行該命令時報錯了:

$ http-console node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: require.paths is removed. Use node_moles folders, or the NODE_PATH environment variable instead. at Function. (mole.js:378:11) at Object. (/usr/local/lib/node_moles/http-console/bin/http-console:6:8) at Mole._compile (mole.js:441:26) at Object..js (mole.js:459:10) at Mole.load (mole.js:348:31) at Function._load (mole.js:308:12) at Array.0 (mole.js:479:10) at EventEmitter._tickCallback (node.js:192:40)

很麻煩,我們還需要手工編輯 /usr/local/lib/node_moles/http-console/bin/http-console 文件,然後刪除下面這一行:

復制代碼 代碼如下:require.paths.unshift(path.join(__dirname, '..', 'lib'));

現在 http-console 就可以啟動了,無需任何參數,它將連接到 http://localhost:8080 ,如果你需要指定伺服器和埠,把它作為第一個參數傳遞給 http-console 即可。

請注意我們這里使用了 \json 命令用來設置正確的 content-type:

$ http-console http://127.0.0.1:8000 The "sys" mole is now called "util". It should have a similar interface. > http-console 0.6.1 > Welcome, enter .help if you're lost. > Connecting to 127.0.0.1 on port 8000. http://127.0.0.1:8000/> \json http://127.0.0.1:8000/>
訪問 REST 服務
在 http-console 中,要執行 GET 請求只需要輸入 GET /bookmarks 即可:

http://127.0.0.1:8000/> GET /bookmarks HTTP/1.1 200 OK Date: Sun, 01 Apr 2012 17:23:27 GMT Server: journey/0.4.0 Content-Type: application/json;charset=utf-8 Content-Length: 16 Connection: keep-alive { bookmarks: [] }

你也可以使用 JSON 的片段來執行 POST 請求:

http://127.0.0.1:8000/> POST /bookmarks ... { "url": "http://nodejs.org" } HTTP/1.1 200 OK Date: Thu, 05 Apr 2012 11:45:55 GMT Server: journey/0.4.0 Content-Type: application/json;charset=utf-8 Content-Length: 91 Connection: keep-alive { bookmark: { _id: 'WD-G-1', resource: 'Bookmark', url: 'http://nodejs.org' } }

然後再次執行 GET 請求,你就可以看到新插入的數據了:

http://127.0.0.1:8000/> GET /bookmarks HTTP/1.1 200 OK Date: Sun, 01 Apr 2012 17:23:27 GMT Server: journey/0.4.0 Content-Type: application/json;charset=utf-8 Content-Length: 16 Connection: keep-alive { bookmarks: [ { _rev: '1-', _id: 'WD-G-1', resource: 'Bookmark', url: 'http://nodejs.org' } ] }

閱讀全文

與couchdbonandroid相關的資料

熱點內容
貴州雲伺服器屬於哪個上市公司 瀏覽:58
編程聯動教程 瀏覽:480
小天才app怎麼升級v242 瀏覽:544
簡單手工解壓玩具製作大全 瀏覽:927
免費編程電子書 瀏覽:869
想玩游戲什麼app最合適 瀏覽:560
安卓手機如何用airportspro 瀏覽:449
怎麼清理idea編譯緩存 瀏覽:951
鏡頭app怎麼推廣 瀏覽:437
什麼app隨便看電視劇 瀏覽:307
2021程序員薪酬 瀏覽:708
糖豆廣場怎麼下載app 瀏覽:213
qtvs2019選哪個編譯器 瀏覽:124
壓縮空氣管能焊嗎 瀏覽:284
linux中yum命令 瀏覽:397
在職演算法工程師 瀏覽:706
電碼加密函數方法有幾種 瀏覽:803
後綴是pdf 瀏覽:720
pr導出壓縮 瀏覽:32
命令語氣 瀏覽:245