Пропустить к содержанию
NoeticEcho
Все проекты

Открытый код

TypedbEx

Драйвер TypeDB 3.x для Elixir, в двух пакетах, HTTP и gRPC, которые разбирают ответы в одни и те же структуры. Мы написали его, потому что не нашли готового.

Автор: Редакция @editors

TypedbEx — это два драйвера для TypeDB 3.12 и новее на Elixir в одном репозитории, под Apache-2.0. typedb работает через HTTP API, версия 0.11.0. typedb_grpc работает через gRPC, версия 0.5.0. Оба разбирают ответы в одни и те же структуры и возвращают одну и ту же ошибку, так что смена транспорта меняет модуль, который вызывает приложение, а не код, который читает ответы.

TypeDB Ltd. не выпускает драйвера для Elixir, а он нужен Reminisce и нашей базе знаний. Эти драйверы делает сообщество, они не официальные.

Их два, потому что ни один не выигрывает во всём. На одной машине с TypeDB 3.12.1, драйвер и сервер на loopback:

  • 20 000 ответов за одно чтение: 1004 мс по HTTP, 248 мс по gRPC.
  • 1000 записей в одной транзакции: 861 мс по HTTP, 622 мс по gRPC.
  • 200 независимых точечных чтений: 213 мс по HTTP, 249 мс по gRPC.

Последняя строка — это то, чем занято приложение, обслуживающее запросы, и gRPC её проигрывает: в его протоколе нет одноразового запроса. Зато typedb_grpc отдаёт потоком 50 000 ответов, не удерживая память, выполняет чтения конвейером внутри транзакции, а ещё выгружает и загружает базу целиком, чего HTTP API не умеет вовсе. Его выгрузки восстанавливаются через консоль самой TypeDB, а выгрузки консоли — через драйвер.

CI гоняет один общий набор тестов поведения на сервере, который говорит на обоих протоколах. В AUDIT.md лежат восемь аудитов кода вместе с находками. Ещё в репозитории есть плагин для Claude, который учит TypeQL 3 и этим двум пакетам. Это только документация: ни сервера, ни хуков, ничего исполняемого.

Чего он не делает

HTTP-драйвер получает каждый ответ целиком, по умолчанию не больше 10 000 строк. TypeDB.stream/4 обходит это постранично, ценой запроса на страницу, и это не потоковая передача.

Соединение смотрит на один сервер. Нет ни переключения при отказе, ни маршрутизации на реплики чтения, ни переподключения к другому узлу. Для версии 1.0 это решено сознательно, а до 1.0 ни один пакет ещё не дошёл.

Конвейер работает только для чтения. TypeDB обрывает поток ответов записи, когда начинается следующая запись.