为什么 dask read sql table 有时会变慢?

Why does dask read sql table sometimes slow down?

通过FastAPI查询数据时,有时查询速度会提高一倍以上

这是Dataframe查询代码的一部分。

    import dask.dataframe as dd
 
    connection_url = URL.create(
        "mssql+pyodbc",
        username="aabcc",
        password="12345",
        host="127.0.0.1",
        port=2712,
        database="test",
        query={
            "driver": "ODBC Driver 17 for SQL Server",
            "Trusted_Connection": "yes",
        },
    )

    def get_data():
        df = dd.read_sql_table(table='troya',
                           uri=connection_url, index_col='no')
        df = df.compute()
        
        return df

这是 FastAPI 部分代码的一部分。

    @bp.get("/test/{row}")
    def test_get(request: Request, row):
        df = get_data()
        ...

如果你能告诉我为什么会出现这个问题,我将不胜感激。

dask 的核心优势之一是能够在多个工作人员之间分配和协调工作量。当使用 dask 加载并立即计算时,这种优势就消失了,因此在上面的代码片段中,以下两行有点反模式:

    df = dd.read_sql_table(table='troya',
                       uri=connection_url, index_col='no')
    df = df.compute()

工作是分布式的,但随后必须从工作人员转移到单个客户端节点。解决方案取决于您的用例,如果可以以 parallel/distributed 的方式继续工作,那么 dask 可能仍然很方便,但如果工作流程必须是顺序的,那么 pandas/ sqlalchemy 可能是更合适的选择。