9

我在本地测试 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

我创建了一个大约 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))

我得到 35k 行的约 1.1 秒。那是 30k 行/秒或 <20MB/秒。

这慢吗?这速度快吗?

公平地说,我最近发现生产 AWS dynamodb 在这种设置(亚马逊博客文章)中以 1MB/s 的速度达到顶峰,因此 EdgeDB 赢得了十倍。同时,我还记得运行 MySQL/InnoDB 服务器并考虑十年前数百万或行/sa 的性能。所以 EdgeDB 似乎慢了 30 倍?

4

1 回答 1

7

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

我的结果:

0.286s内35038条记录:122314条/s

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

0.285s内35038条记录:122986条/s

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

于 2020-02-05T19:40:41.197 回答