2

Cassandra Python ドライバーの問題は、返される「将来の」オブジェクトが副作用によってコールバックを追加することです。Futureつまり、 Javascript または Scalaの a が構成可能であるのと同じ意味で、「未来」は構成可能ではありません。構成不可能な未来を構成可能な未来に変換するために使用できるパターンがあるかどうか疑問に思っています(できればメモリリークなしで)。

   my_query_object.insert(1, 2, 3, 'Fred Flinstone')
     .insert(1, 2, 3, 'Barney Rubble')
     .insert(5000, 2, 3, 'George Jetson')
     .insert(5000, 2, 3, 'Jane his wife')

Datastax の Cassandra Python ドライバーのパフォーマンスセクションを見ると、常に連鎖可能な一連の挿入クエリを作成している例が分かります。つまり、このパターンのもう少し複雑なバージョンです。

def insert_next(previous_result=sentinel):
    if previous_result is not sentinel:
        if isinstance(previous_result, BaseException):
            log.error("Error on insert: %r", previous_result)

    future = session.execute_async(query)
    # NOTE: this callback also handles errors
    future.add_callbacks(insert_next, insert_next)

これはおもちゃの例としてうまく機能します。1 つのクエリが完了すると、別の同等のクエリが再度実行されます。このスキームにより、コールバックを「チェーン」しようとしないバージョンでは約 2k 書き込み/秒が制限されるのに対し、7k 書き込み/秒を達成できます。

私は、その正確なメカニズムを取り戻すことができる何らかのメカニズムを作成することに頭を悩ませようとしましたが、役に立ちませんでした. 誰かがそれのようなものを思いつきますか?

4

1 に答える 1