35k строк / с медленно или быстро для EdgeDB? - PullRequest
7 голосов
/ 05 февраля 2020

Я тестирую 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 (не заполнено).

Я загрузил 35 тыс. строк, всего JSON размер данных 18 МБ.

Я тестирую пропускную способность чтения с помощью этой функции:

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 строк. Это 30 000 строк / с или <20 МБ / с. </p>

Это медленно? Это быстро?

Чтобы быть справедливым, я недавно обнаружил, что производительность AWS DynamoDB достигает максимальной скорости 1 МБ / с при такой настройке (сообщение в блоге Amazon) , поэтому EdgeDB выигрывает десять фолд. В то же время я вспоминаю, как работал сервер MySQL / InnoDB и думал о производительности в миллионах или строках в десятилетие go. То есть EdgeDB кажется медленным, может быть, в тридцать раз?

1 Ответ

3 голосов
/ 05 февраля 2020

Я воспроизвел тест с несколькими изменениями: 1) Я только измерил фактическое время выполнения запроса (исключая время соединения); 2) Сервер EdgeDB работал непосредственно на хосте Linux, а не на Docker.

Мой результат:

35038 записей в 0,286 с: 122314 записей / с

Для сравнения я загрузил тот же набор данных прямо в Postgres и запустил аналогичный запрос с помощью psycopg2. Результат был почти идентичен:

35038 записей за 0,285 с: 122986 записей / с

Это неудивительно, поскольку после того, как запрос скомпилирован в SQL, накладные расходы ввода-вывода EdgeDB по сравнению с необработанным Postgres ничтожно мал. Кроме того, чтобы лучше провести стресс-тестирование сервера, вам нужно несколько одновременных клиентов, как мы сделали в наших тестах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...