2011-11-21 47 views
5

我有以下情況。對數據庫有很多查詢(通常寫評論,閱讀配置文件等),而且,我認爲讀取會比寫入更多。我想很有可能將數據庫擴展到多個服務器。所以,我喜歡nosql :) 據我所知,通過閱讀博客和StackOverflow的問題的答案(例如this one)在這種情況下,最好的選擇是使用卡桑德拉。Cassandra或MongoDB具有良好的擴展性和大量的查詢

所以,問題是 - 卡桑德拉更適合我的目的嗎?爲什麼?

第二個問題將是關於Tornado的異步客戶端庫 - 你知道這個的一些實現嗎?正如你在上面鏈接的wiki頁面上看到的那樣,只有mongodb和couchdb纔有異步客戶端。而這個事實也阻止了我。

也許我現在可以使用MongoDB(原因是異步庫esists,也許第一次它會比幾個服務器上的Cassandra更快但沒有異步),並且在一段時間後將mongo中的數據轉換爲cassandra。你怎麼看待這件事?

+1

AFAIK沒有在Tornados IOLoop內部運行的量身定做的(異步)Cassandra庫。 (ps閱讀Bens關於線程的帖子:https://github.com/facebook/tornado/wiki/Threading-and-concurrency) – Schildmeijer

+0

Thx爲鏈接!您如何看待 - 將使用Cassandra而不使用異步比使用異步模塊的MongoDB快。或者差別可能會很小 - 我將有時間編寫自己的異步實現。也許我可以簡單地運行數據庫交互的特殊線程,它將與Tornado的線程進行通信。 – dizpers

+0

Tornado支持扭曲,這意味着您可以使用Async Cassandra支持的異步telephus扭曲庫。 – koblas

回答

3

一半的答案 - 因爲它不是關於適合性。 Tornado 2.1支持扭曲爲異步模式,這意味着您可以使用telephus Cassandra庫(twisted + Cassandra)來獲得異步Cassandra訪問權限。

import tornado.platform.twisted 
    from telephus.pool import CassandraClusterPool 
    from twisted.internet import reactor 

    tornado.platform.twisted.install() 

    from twisted.internet import reactor 

    pool = CassandraClusterPool([HOST], keyspace='XXXX', reactor=reactor) 

    pool.startService() 

    reactor.run()  # this calls tornado.ioloop.IOLoop.instance().start() 

這就是說,我使用的MongoDB和mongoengine(非異步)在此刻和卡桑德拉+ telephus工作項目的一些個人項目。我正在靈活地進行數據模型與固定數據模型和性能之間的權衡。

相關問題