🔥

Тред (Михаил Рахманов)


Еще одна часть моей работы - развитие нашей (ну и не только нашей) БД (github.com/textileio/go-t…). Тут будет ряд общих технических подробностей, но раз я уже пишу о своей работе, хотелось бы дать больше контекста.

Наше приложение условно можно разделить на объекты и большинство объектов (страниц) представляет собой тред (сущность БД), где у каждого девайса есть свой лог (single writer log), в который только этот девайс может добавлять записи.

Поверх него есть еще одна надстройка (уже не в самой БД) - связь записей между друг другом, которая может идти через несколько логов, таким образом, чтобы всегда можно было однозначно установить текущий стейт (en.wikipedia.org/wiki/Conflict-…).

Тут хотел заметить, что синк данных между девайсами идет напрямую, минуя bitswap - протокол IPFS. Это сделано для скорости, потому что запрашивать данные через bitswap достаточно долго. Эта логика как раз и содержится в библиотеке go-threads.

Основная сложность при улучшении синка - с одной стороны, обеспечить адекватную скорость и компактность данных, а с другой - не нарушить eventual consistency.

В частности, одна из проблем, которую нам предстоит решить - добавить возможность хранить не все записи в логах на девайсе, а только часть, которая нужна. Тем самым, пирам нужно будет грузить меньше и синк будет быстрее.

К чему я все это рассказываю - разработка под p2p существенно отличается от привычной клиент-сервер архитектуры. Особенно в начале это сильно ломает мозг, но потом привыкаешь и становится интересно)

Михаил РахмановМихаил Рахманов