35k rows/s 对于 EdgeDB 来说是慢还是快?

Is 35k rows/s slow or fast for EdgeDB?

我正在本地测试 EdgeDB,我的主机是一台不错的 macbook pro,数据库运行在 docker:

version: "3.7"

services:
  edgedb-server:
    image: edgedb/edgedb
    ports:
      - "5656:5656"
      - "8888:8888"
    volumes:
      - type: bind
        source: /Users/dima.tisnek/edgedb-data
        target: /var/lib/edgedb/data
        consistency: delegated

我创建了一个 table,其中包含 ~20 列,10 str、3 bool、2 int16、3 datetime(大多数人);和 2 MULTI str(未填充)。

我已经加载了 35k 行,总 JSON 数据大小为 18MB。

我正在使用此函数测试读取吞吐量:

async def main():
    c = await edgedb.async_connect("edgedb://edgedb@localhost")
    d = await c.fetchall("""
        SELECT User {
            domain,
            username,
            # 16 more columns
        };
    """)
    logging.warning("got %s records", len(d))

我得到 ~1.1s 35k 行。那是 30k rows/s 或 <20MB/s。

这很慢吗?这么快吗?

公平地说,我最近发现生产 AWS dynamodb 在这种设置中最高可达 1MB/s (amazon blog post),因此 EdgeDB 胜出十倍。同时,我有点回想起 运行 一台 MySQL/InnoDB 服务器,并考虑了十年前以百万或 rows/s 为单位的性能。所以 EdgeDB 似乎慢了 30 倍?

我重现了基准测试并做了一些改动:1) 我只测量了实际的查询运行时间(不包括连接时间); 2) EdgeDB 服务器 运行 直接位于 Linux 主机上,而不是 Docker.

我的结果:

35038 条记录在 0.286 秒内:122314 records/s

为了比较,我将相同的数据集直接加载到 Postgres 中,并 运行 使用 psycopg2 进行类似的查询。结果几乎相同:

35038 条记录在 0.285 秒内:122986 records/s

这并不奇怪,因为一旦查询被编译为 SQL,EdgeDB 相对于原始 Postgres 的 I/O 开销可以忽略不计。此外,为了更好地对服务器进行压力测试,您需要多个并发客户端,正如我们在 benchmarks.

中所做的那样