【问题标题】:Multiple async queries in cassandracassandra 中的多个异步查询
【发布时间】:2015-02-05 01:17:20
【问题描述】:

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

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

【问题讨论】:

    标签: python cassandra cql cassandra-2.0 cql3


    【解决方案1】:

    您可以阅读一些关于性能和不同模式的讨论here。在这种情况下,您的方法似乎是合理的。我要补充一点,使用准备好的语句是个好主意,您可以在会话的生命周期内准备并保留这些语句。

    这会对生产有问题吗[...][?]

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

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2014-08-05
      • 1970-01-01
      • 2017-12-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2013-10-14
      相关资源
      最近更新 更多