Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cassandra中的多个异步查询_Python_Cassandra_Cql_Cassandra 2.0_Cql3 - Fatal编程技术网

Python cassandra中的多个异步查询

Python cassandra中的多个异步查询,python,cassandra,cql,cassandra-2.0,cql3,Python,Cassandra,Cql,Cassandra 2.0,Cql3,我有一个tornado web应用程序,用于跟踪一些数据,它使用cassandra存储和cql进行查询。它做两件事: 在一个列族中添加记录。 在少数列族中增加批处理中的某些计数器。 在下面的示例中,如果您查看存储类的track方法,它将执行两个异步查询,第一个异步查询执行成功或错误回调。在我的开发环境中,我看到两个异步查询都正确执行。这将有生产问题,我将得到超过5000点击率从第一天每秒,因为我将集成到一个已经存在的应用程序。我用Apache基准测试了并发请求,没有发现任何问题。我只是想确定一下

我有一个tornado web应用程序,用于跟踪一些数据,它使用cassandra存储和cql进行查询。它做两件事:

在一个列族中添加记录。 在少数列族中增加批处理中的某些计数器。 在下面的示例中,如果您查看存储类的track方法,它将执行两个异步查询,第一个异步查询执行成功或错误回调。在我的开发环境中,我看到两个异步查询都正确执行。这将有生产问题,我将得到超过5000点击率从第一天每秒,因为我将集成到一个已经存在的应用程序。我用Apache基准测试了并发请求,没有发现任何问题。我只是想确定一下。还有没有更好的方法来处理这样的场景,是否会影响性能

示例如下:

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*)

您可以阅读一些关于性能和不同模式的讨论。在这种情况下,你的方法似乎是合理的。我想补充一点,使用事先准备好的声明是一个好主意,您将在会议期间准备并保存这些声明

这是否会在生产上产生问题[…][?]

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