【问题标题】:Is it possible to make asynchronous stored procedure calls to VoltDB using the Python client是否可以使用 Python 客户端对 VoltDB 进行异步存储过程调用
【发布时间】:2018-11-19 18:59:41
【问题描述】:

是否可以使用 Python 客户端对 VoltDB 中的存储过程(自定义 Java 存储过程中的插入)进行异步调用?

它似乎不受支持,但有没有办法不等待响应,或者我必须转移到 Java 客户端以获得异步支持?

【问题讨论】:

    标签: python asynchronous voltdb


    【解决方案1】:

    VoltDB python 客户端不支持异步调用。可能可以从多线程 python 应用程序进行调用,但我们从未对此进行过测试,所以我不想带你进入未知领域。

    java、C++ 和 Go 客户端支持异步调用。

    如果您主要尝试进行快速插入,则可以利用 csvloader,并且可以从 python 应用程序中执行 csvloader,但这可能不是您想要做的。

    披露:我在 VoltDB 工作。

    【讨论】:

    • 感谢您的回复。到目前为止,我已经尝试过具有 50-100 个线程的多线程 python 应用程序,它似乎可以工作,但我还没有完成测试!我们希望最大限度地减少插入的延迟,如果批量工作,csv 加载器会增加延迟吗?看起来需要转移到其他客户之一。
    • 对于同一个请求,无论使用哪个客户端,延迟都应该相同。但是异步请求允许您一次发送许多请求,因此吞吐量不是延迟的函数。发出同步请求的多线程客户端也可以实现高吞吐量,但可能需要很多线程才能达到与发送异步请求的单线程客户端相同的水平。
    • CSVLoader 通常会增加延迟,因为它会将更大的批量插入请求发送到队列中,并且这些请求比单个插入需要更长的处理时间。您可以选择使用 -p 参数从 CSVLoader 调用过程,这通常会稍微降低吞吐量,但对延迟的影响较小。
    【解决方案2】:

    我在构建一个同样是 VoltDB 客户端的 Tornado 进程时遇到了同样的问题。事实证明,将 VoltProcedure.call() 拆分为两个函数非常容易,第二个函数在 Tornado 的 ioloop 检测到套接字上的响应时异步调用。我还修复了 writeDate() 中的一个错误。看这里:https://github.com/osullivj/voltdb-client-python

    【讨论】:

      猜你喜欢
      • 2020-02-18
      • 2013-10-28
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2010-09-06
      • 2019-07-24
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多