2014-12-07 38 views
0

我有一個龍捲風web應用程序,用於跟蹤一些數據(它使用cassandra存儲和cql進行查詢)。它有兩件事:cassandra中的多個異步查詢

  1. 在一列中添加一條記錄。
  2. 在少數列系列中增加一批計數器。

在下面的例子中,如果您查看Storage類的track方法,它會執行兩個異步查詢,第一個異步查詢會執行成功或錯誤回調。在我的開發環境中,我看到兩個異步查詢都正確執行。這是否會產生問題(從第一天起,我將每秒獲得5000次以上的點擊率,因爲我將把它整合到已有的應用程序中)。我曾用Apache Benchmark測試過併發請求,但沒有看到任何問題。我只是想確定。還有更好的方式來處理這種情況,並會有任何性能影響?下面

例子:

class SomeClass(tornado.web.RequestHandler): 
    def collect_data(self): 
     return {} # has some data 

    def on_success(self): 
     # has logic here 
     self.finish() 

    def on_error(self): 
     # has logic here 
     self.finish() 

    @tornado.web.asynchronous 
    def get(self): 
     # some code here 
     Storage.track(self.collect_data(), self.onsuccess, self.onerror) 

class Storage(object): 
    @classmethod 
    def connect(cls): 
     cluster = Cluster() 
     cls._session = cluster.connect() 

    @classmethod 
    def track(cls, data, success_callback, error_callback): 
     if not hasattr(cls, '_session'): 
      cls.connect() 
     cls._session.execute_async(*insert query*).add_callbacks(success_callback, error_callback) 
     cls._session.execute_async(*some batch queries to increase counters*) 

回答

0

您可以瞭解有關性能和不同的圖案here一些討論。在這種情況下,你的方法似乎是合理的我想補充一點,使用準備好的語句是一個好主意,您可以在會話的整個生命週期中準備並保留這些語句。

這會不會對生產問題[...] [?]

這取決於很多東西,包括你的環境,部署尺寸,等你能做的最好的事情是基準