cassandra中的多个异步查询

时间:2014-12-07 06:04:31

标签: python cassandra cql cassandra-2.0 cql3

我有一个龙卷风网络应用程序,用于跟踪一些数据(它使用cassandra存储和cql进行查询)。它做了两件事:

  1. 在一个列族中添加记录。
  2. 在少数列系列中增加批量中的一些计数器。
  3. 在下面的示例中,如果查看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*)
    

1 个答案:

答案 0 :(得分:0)

您可以阅读有关性能和不同模式here的一些讨论。在这种情况下,您的方法似乎合理。我想补充一点,使用准备好的语句是个好主意,你可以准备并在会话的整个过程中保持这些语句。

  

这会产生生产问题[...] [?]

这取决于许多因素,包括您的环境,部署足迹等。您可以做的最好的事情是基准测试