yopp
а что является источником событий?
Pavel
а что является источником событий?
движение, но устройства бывают разные. данные они отправляют по email, и как раз таки в разных форматах, с только началом, только концом, либо и тем и тем, частоту событий тоже оценить сложно. Для всех возможных вариантов подобрать какое-то общее решение пока не удается. Поддерживать данные в полностью консистентном состоянии не получится
Nick
по емейлу? хех
yopp
могли и смсками
Pavel
;)
Pavel
к сожалению о самих устройствах я ничего не могу сказать, у меня есть только данные
yopp
устройства ваши или третей стороны?
Nick
и всетаки напишите что потом с этими данными делается?
Nick
может и не нужно ничего агрегировать
Pavel
yopp
пиплометры какиенибудь?
yopp
они данные отправляют пачками или когда событие происходит?
Pavel
может и не нужно ничего агрегировать
данные выводятся на графике. если ничего не агрегировать, а н-р просто, если одно из значений отсутствует подставлять его по какому-то правилу самостоятельно(например +-10 сек), но это получатся разные отрезки, если разница между концом и началом на самом деле больше 10 сек. Хотя если учесть в каком виде приходят данные, то возможно я к этому и приду))
yopp
тогда просто сортируйте по дате и при подготовке данных для графика отбрасывайте ненужное внутри отрезка
yopp
либо додумывайте, но это ужасная идея
yopp
лучше на графике показать что есть «дырка»
yopp
т.е. если внутри закрытого отрезка попало что-то лишнее, например два start подряд, то выделять это как-то цветом и в интерфейсе показывать что отрезок с неизвестным качеством
yopp
а вообще, проанализируйте данные
yopp
электронная почта это совсем плохо, потому что она совсем никаких гарантий не даёт, но вероятно есть какое-то практическое окно, в которое данные укладываются
yopp
почтовый сервер тоже не ваш?
Pavel
@dd_bb @yatoba спасибо
yopp
изучите заголовки писем, возможно там есть какие-то отметки которые можно как счётчик использовать
Anonymous
Подскажите, что оптимальней использовать монго или другую базу для хранения вершин древовидного графа one to many, храню каждую вершину как json
Anonymous
Anonymous
Куча селектов
Aleksandr
Как мне кажется проще и быстрей будет на обычном SQL. Две таблички - одну для хранения информации об узлах. А вторую для организации связи между узлами. Задача классическая и вроде бы все подводные камни известны.
Anonymous
Anonymous
Aleksandr
Ну и отталкиваться надо от задачи. Если например нужно будет узлы вставлять внутрь дерева - то это переписывание всего документа (кстати даже при обычном добавлении узла в листам дерева). В SQL - это пара insert и один-два update на "легких" записях.
Anonymous
По-хорошему они только внизу апдейтятся
Anonymous
Anonymous
Задача чисто чтобы он без напряга отрисовывался и апдейтился внизу, чтобы можно было начальную точку менять
Anonymous
Наверное добавить таблицу с индексами и соединить one to many с этой же, но там есть вес у каждого соединяющего вектора типа
Aleksandr
Как именно в sql? Там ведь дочерних может быть и 10 и 20 и 1 и 2)
Ну это уже не для этого чата вопрос. Но в том же PostgreSQL есть такой тип как jsonb - для работы с json. Есть тип "массив". Если у вас идет упрощение, что добавляем записи с низу, то например делаем для узла поле "уровень" - т.е. корень это 0 и дальше оно увеличивается. Дальше в каждом узле храним массив id его дочерних элементов и массив с id-шниками пути от корня до этого элемента.
Aleksandr
В этом случае одним запросом вытаскиваются все элементы у которых в "пути" есть id элемента от которого нужно рисовать дерева. Сортировка по уровню дает возможность начинать с верхних узлов. И по детям можно отрисовывать в виде рекурсии. Или же формировать данные для отрисовки.
Anonymous
Anonymous
Nick
Nick
а граф это дерево или это реально граф с циклами?
Anonymous
Anonymous
С одной вершины начинается
Nick
изучите варианты https://docs.mongodb.com/manual/applications/data-models-tree-structures/
Anonymous
Но эта вершина может быть любой
Nick
критерий только как вы будете выборки делать. как определяется какой из узлов надо доставть?
Nick
даже теоретически это будет проблема, как вы их различать будете?
Nick
как происходит добавлени/удаление узлов?
Nick
имеется ввиду знаете ли вы полный путь или только имя родителя?
Anonymous
имеется ввиду знаете ли вы полный путь или только имя родителя?
Только имя, полный путь можно потом кешировать наверное, но изначально есть полное имя.
Дальше есть некий движок, который парсит информацию вниз для каждой ноды рекурсивно, потом есть задача это сохранить и дополнять время от времени, изменяться ничего не может, добавляться может.
Хранится может в любом формате, но после построения, оно должно хранится и возможно апдейтится, но не строится каждый раз с нуля.
Надеюсь не сумбурно...
Nick
объем?
Anonymous
объем?
Небольшой, можно задать максимум уровней и максимум в ширь, гиганское что-то не нужно, точнее хранить можно но это отрисовывать никому не надо, нужна читабельность.
По-этому уровней штук ну 50 максимум. В ширь тоже 50, но это лютейшие цифры, как правило 10 уровней и где-то 3-10 в ширь.
В принципе они могут быть большими. Но точно не гигабайты данных на 1 граф.
Хранить бы хотелось большой, но выводить с лимитами
Anonymous
В общем, большой, но не огромный на гигабайты
Anonymous
Пару тысяч связей
Nick
и по выборке всегда выбирается все до сонования или только например вытащить потомков на N уровней?
Anonymous
Nick
вопрос именно в выборке, например вы запрашиваете корневой элемент, что ожидается в результате? как отсекаются не нужные данные если из базы получено слишком много
Nick
вообще смотрите в сторону Materialized Path, позволит выбрать все что ниже, и впринципе ограничить количество уровней для выборки
Anonymous
Anonymous
Nick
ничего сложного, m.path реализуется впринципе на любой бд
Nick
и да в общем случае под вашу задачу монга не даст преимуществ, так что используйте что проще
Nick
если сформируются более четкие требования то можете еще глянуть на https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup/
Nick
зачем вам json? почему не просто колонки?
Nick
ваши данные плоские
Nick
данные в узлах
Nick
необязательно
Anonymous
А как тогда? Там же one to many
Nick
id,path,dateTime,v1,v2,v3,v4
Anonymous
Path хм
Nick
выборки по path like '%SOME_NAME%'
Nick
тоже самое будет и в монге