2012-11-23 63 views
1

我一直在閱讀有關Clojure一段時間,我正在考慮它作爲Node.js(我用於另一個項目)的替代品。最有希望的圖書館似乎是Aleph/Lamina,遺憾的是它沒有像Node那麼多的例子。我的問題是:使用Aleph/Lamina異步訪問MongoDB

  1. 我如何處理與異步操作,例如讀取,從MongoDB的文檔,做一些計算,保存新文檔,並在響應發送它的一個鏈請求?我無法從Lamina wiki頁面的例子中編寫它。這聽起來像是一個很常見的用例,我很驚訝沒有發現任何代碼顯示它。如果你能給我看一些示例代碼,那將是非常棒的。

  2. 此設置是否適合重負載服務器(例如,每秒幾萬個請求)?我無法爲每個新請求創建一個線程,所以我需要類似於Node方法的東西。

  3. 有沒有使用這些的中型或大型公司的例子?

  4. 有沒有更好的Clojure替代Node(除了Aleph/Lamina)?也許Clojurescript目標節點?我的客戶端不是用Javascript編寫的,因此在我的情況下,在客戶端和服務器端使用相同的語言對我來說不是一個優勢。

謝謝!

回答

1

幾個要點:

  1. 你需要看看Aleph這在椎板渠道抽象建立HTTP抽象。
  2. 讀取和寫入文檔到MongoDB可以是異步的,但圖書館應該提供這個。在Node.js中,MongoDB庫必須是異步的,否則它會搞砸Node編程模型,因爲Clojure的情況並非如此,因此Clojure MongoDB庫很可能提供了非異步函數。
  3. 異步操作只對IO有幫助,例如讀/寫mongodb,發回響應等。生成計算是CPU綁定操作,與異步模型無關。
  4. Vert.x是Java世界Node.js。 Clojure支持在路線圖上。我更喜歡Aleph,因爲你可以根據需要在異步和非異步世界中玩。
+0

謝謝,@Ankur。如何編寫一個包裝來製作[CongoMongo](http://github.com/aboekhoff/congomongo)或Monger異步?或者包裝[Java Mongo Async驅動程序](http://www.allanbank.com/mongodb-async-driver/)會更好嗎? – aeuhuea