Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 February 21

ТК

Тимофей Кондратьев... in NodeUA - JavaScript and Node.js in Ukraine
В графовых мне нравится, что там язык запросов оптимизирован под графы. Грубо говоря, зачем городить что-то на sql, если можно стрелочками указать связи, даже создавать записи на лету. Очень удобно.

И по скорости выполнения сложных запросов графовые базы обходят реляционные, если для такого же запроса требуется много join.

В глубь устройства баз данных я ещё не залезал, многих терминов даже не понял, поэтому не могу судить. Пока как начинающий оцениваю потенциал, возможные юзкейсы и удобство технологии.
источник

YY

Yuriy Yarosh in NodeUA - JavaScript and Node.js in Ukraine
Тимофей Кондратьев
В графовых мне нравится, что там язык запросов оптимизирован под графы. Грубо говоря, зачем городить что-то на sql, если можно стрелочками указать связи, даже создавать записи на лету. Очень удобно.

И по скорости выполнения сложных запросов графовые базы обходят реляционные, если для такого же запроса требуется много join.

В глубь устройства баз данных я ещё не залезал, многих терминов даже не понял, поэтому не могу судить. Пока как начинающий оцениваю потенциал, возможные юзкейсы и удобство технологии.
> если для такого же запроса требуется много join
Стоит изучить вопрос Managed Denormalization.
Надо понять как быстро будет расти ваше графовое хранилище и на сколько оно будет быстро устаревать… и что вы потом сделаете со стоимостью Compaction’a, Repair’ов и вообще дальнейшей эксплуатации… Если у вас реляционка в основе - вы хотя бы можете отталкиваться от полностью нормализованной модели и загружать её в графовую БД в каком-то денормализованном виде по требованию, только для активных пользователей.

> сложных запросов графовые базы обходят реляционные
Зависит сугубо от навыков проектирования - у подавляющего большинства разработчиков их просто нет, дальше ORM’a никто не залазит.

> Пока как начинающий оцениваю потенциал
Это Ок.
Гляньте JanusGraph и Gremlin, будет какое-то понимание более-менее серьёзных решений.

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

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Yuriy Yarosh
Ну 2020 год провёл за дизайном БД, в том числе и графовых, и работал с большими сетапами графовых БД… поверх кассандры.

1) Графовые БД под капотом чаще всего используют колоночные хранилища на LSM-tree с SSTable и наследуют всю ту же боль что и при работе с Cassandra и прочим
2) C любой современной как реляционной так и нереляционной БД можно сделать графовую - реализовав соответствующие интерфейсы под OpenJanus (https://janusgraph.org/) и удостоверищись в возможности вменяемого индексирования и решения проблемы DataLocality.
3) Обычно Janus оборачивают вокруг BigTable и в принципе это может работать… и даже может быть вполне актуально для некоторых, очень редких, случаев. А для всех остальных 98% - надо просто научиться в рекурсивный SQL SELECT. Но тут есть момент что даже монга становится SQL БД с помощью Apache Calcite… и да, это реляционная БД, о чём мало кто вообще догадывается (оффтопик короч - пригорело).
4) Не так страшна графовая БД как проблема Data Locality в больших масштабах - даже Intel’овским SSD’шкам не хватает IOPS’ов что бы правильно менеджить слияние и разделение страниц в журнале при Compaction’e. LSM-tree там для этого тоже специальный… т.к. надо учитывать adjacent vertices при дампе журнала для Data Locality.
5) По этому в дизайне хранилищ для графовых БД есть определённый, дополнительный Compaction Overhead, и стратегии очень сильно отличаются от того что есть в ScyllaDB и в Cassandra… ну и накладные расходы на любую запись растут экспоненциально с глубиной вашего графа \o/

tldr; графовые БД могут быть только AP и только с большим IO Amplification на запись, если основаны на колоночных БД иди соответствующих структурах данных (LSM-tree).
Если это графовые БД поверх реляционных БД - ведут себя точно так же как любой рекурсивный SELECT.

p.s. Arango построена на RocksDB (колоночный LSM-tree) и каких либо вменяемых стратегий для Compaction’a там нет, про repair не знаю - но вроде пока вообще не завезли.
Ну или еще один вариант: вынимать все данные из реляционной БД в оперативку в графовую структуру и самому строить индексы и писать обход. Если данные не содержат полей переменной длины (а это почти всегда так, все данные переменной длины можно хранить в таблицах рядом), то все записи имеют одинаковую длину и их очень удобно разместить в шаренной памяти (memory mapped files) и доступаться из разных потоков или процессов. Еще проще, когда графы редко меняются, потому, что собирать мусор в такой структуре - это отдельная боль. А если граф перестраивается 1 раз в день или раз в несколько часов, то можно не собирать мусор, а просто готовить его в отдельном сервисе и подгружать целиком иногда. В общем, тут нет готовых решений и для каждого случая и его особенностей нужно собирать что-то уникальное. Пока так.
источник

ТК

Тимофей Кондратьев... in NodeUA - JavaScript and Node.js in Ukraine
Спасибо) будет о чем подумать!
источник

DH

Dima Haponov in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Ну или еще один вариант: вынимать все данные из реляционной БД в оперативку в графовую структуру и самому строить индексы и писать обход. Если данные не содержат полей переменной длины (а это почти всегда так, все данные переменной длины можно хранить в таблицах рядом), то все записи имеют одинаковую длину и их очень удобно разместить в шаренной памяти (memory mapped files) и доступаться из разных потоков или процессов. Еще проще, когда графы редко меняются, потому, что собирать мусор в такой структуре - это отдельная боль. А если граф перестраивается 1 раз в день или раз в несколько часов, то можно не собирать мусор, а просто готовить его в отдельном сервисе и подгружать целиком иногда. В общем, тут нет готовых решений и для каждого случая и его особенностей нужно собирать что-то уникальное. Пока так.
Ясно. Очень интересно.
источник

DH

Dima Haponov in NodeUA - JavaScript and Node.js in Ukraine
А с точки зрения безопасности хранения данных тут все ок с таким подходом ?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Dima Haponov
А с точки зрения безопасности хранения данных тут все ок с таким подходом ?
Будет настолько безопасно, насколько сделаете, это же не стандартный подход
источник

DH

Dima Haponov in NodeUA - JavaScript and Node.js in Ukraine
Ну да, понял!
источник
2021 February 22

ЯП

Ярослав Пицуха... in NodeUA - JavaScript and Node.js in Ukraine
Народ что думаете про стек TypeScript + Express + InversifyJS, вроде неплохая конкуренция тому же NestJS. Может кто работает с этим стеком, какие нибудь может дополнительные модули хорошие знаете к этому стеку ?
источник

PM

Pavel M in NodeUA - JavaScript and Node.js in Ukraine
Ярослав Пицуха
Народ что думаете про стек TypeScript + Express + InversifyJS, вроде неплохая конкуренция тому же NestJS. Может кто работает с этим стеком, какие нибудь может дополнительные модули хорошие знаете к этому стеку ?
jest, amqplib
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Ярослав Пицуха
Народ что думаете про стек TypeScript + Express + InversifyJS, вроде неплохая конкуренция тому же NestJS. Может кто работает с этим стеком, какие нибудь может дополнительные модули хорошие знаете к этому стеку ?
YouTube
Node.js Middleware – никогда больше! [ru] / Тимур Шемсединов
Видео с онлайн-конференции JavaScript fwdays'20 autumn, которая прошла 22 сентября 2020 года.

Описание доклада:
Почему приложение работает нестабильно, происходит утечка памяти и процесс часто вылетает? Почему вам сложно найти ошибку и нужно долго делать откладку? Почему правки занимают все больше и больше времени, а модули трудно свести вместе? Вы уже догадывались, что с мидлварами что-то не так, но не знаете как без них? Решение есть!

Страница доклада и презентации:
https://fwdays.com/event/javascript-fwdays-2020/review/nodejs-middleware

Больше докладов и видео по теме конференции:
https://fwdays.com/event/javascript-fwdays-2020

Fwdays более 10 лет занимается организацией масштабных конференций для разработчиков таких направлений: JavaScript, .Net, Python, Data Science, PHP, QA, Highload, Architecture, DevOps, Databases.

Больше информации про актуальные события:
https://fwdays.com/events

Подписывайтесь, чтобы первыми узнавать про старт продаж билетов по самой выгодной цене:
Facebook: https://www.fa…
источник

S

Stanislav in NodeUA - JavaScript and Node.js in Ukraine
Но в asp.net тоже же есть мидлвары, там они тоже антипаттерн и плохие?
источник

PS

Pavel Shakhov (pongo... in NodeUA - JavaScript and Node.js in Ukraine
Ярослав Пицуха
Народ что думаете про стек TypeScript + Express + InversifyJS, вроде неплохая конкуренция тому же NestJS. Может кто работает с этим стеком, какие нибудь может дополнительные модули хорошие знаете к этому стеку ?
плюс неста не в тайпскрипте, а в том, что это фреймворк, решающий типовые проблемы и дающий архитектуру.

а экспресс -- это просто библиотека, в которой тебе нужно самому все писать и самому придумывать архитектуру.
источник

YZ

Yaroslav Zhymkov in NodeUA - JavaScript and Node.js in Ukraine
Интересно, что у себя сделали бефоре хуки, мидлвары почти не юзаем. Хм. Интересно, находить похожие мнения
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
Stanislav
Но в asp.net тоже же есть мидлвары, там они тоже антипаттерн и плохие?
Все гонение на мидлвары в контексте этого чата сводится к гонению сугубо на мидлвары экспресса
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Stanislav
Но в asp.net тоже же есть мидлвары, там они тоже антипаттерн и плохие?
В redux есть мидлвары, но это все совершенно разные вещи.
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Дмитрий
Все гонение на мидлвары в контексте этого чата сводится к гонению сугубо на мидлвары экспресса
Не только, connect и koa на том же принципе и еще 100 менее известных нодовских фрейма
источник

DH

Dima Haponov in NodeUA - JavaScript and Node.js in Ukraine
Я только 10 знаю
источник

S

Stanislav in NodeUA - JavaScript and Node.js in Ukraine
Дмитрий
Все гонение на мидлвары в контексте этого чата сводится к гонению сугубо на мидлвары экспресса
Я понял, спасибо.
источник

ЕВ

Евгений Войтенко... in NodeUA - JavaScript and Node.js in Ukraine
Ярослав Пицуха
Народ что думаете про стек TypeScript + Express + InversifyJS, вроде неплохая конкуренция тому же NestJS. Может кто работает с этим стеком, какие нибудь может дополнительные модули хорошие знаете к этому стеку ?
у меня так. у инверсифай  огромный минус - отсутствие нормальной документации. Методы не расписаны. Встречал багу, а описание бага в каком то обсуждении на 20ой строчке, что это особенность метода restore. Хотя в самой доке о restore ни слова. В отличии от неста приходится все делать самому. Я делаю по аналогии с нестом.
источник