errorrishe: (Default)
errorrishe ([personal profile] errorrishe) wrote2016-09-19 10:52 am

рабоче-странное

на работе временами у меня случается проблема
у нас слегка дофига таблиц в базе данных ( ну так больше 5K ). А я последнее время занимаюсь нашим bpm и часто приходиться вникать что и как и откуда выковырять - и не только для себя но и для консультантов
хочеться штуковину которая могла бы мне помочь вот таким образом
- набрал имя поля - увидел все места в которых он используется как foreign key, возможно даже более сложные связи - типа вот это можно получить от сюда использовав такие два ключа
- показать историю изменения схемы и увидеть в каком бранче что происходит
- просто супер быстро искать по именам полей и других сущностей с поддержкой всяких wild cards
Подъебка в том что использовать оркакл как источник данных - плохая идея. Тк хочется понимать git контекст тоже
Хорошая новость - все метаданные есть красиво описанные в db-agnostic формате (бггг xml конечно же)
Вопрос собственно - из чего это стоит пробовать лепить... Есть желание для этого не использовать java ( ибо заебало)
быстро искать по тексту можно lucen' ом но тут все усложняется прикольными данными и желанием понимать реляционную структуру в процессе поиска. Короче я пока еще не понял как к этому подступиться.

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

[identity profile] qvb.livejournal.com 2016-09-19 12:12 am (UTC)(link)
У нас есть такая штука, причем она еще и работает с тэгами, показывает lineage, юзеры ставят свои рейтинги и много всякого еще, но эта система closed source и сделана "для себя". Может мы со временем сделаем на ее основе коммерческий сервис, но это в неопределенном будущем.

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

[identity profile] errorrishe.livejournal.com 2016-09-19 12:48 am (UTC)(link)
да объем работы тоже пугает
думаю что то на коленке попробовать соорудить, посмотрю как пойдет

тут самое интересное как это организовать в плане структур данных. Если будут силы попробую что то по прототипировать днями

[identity profile] qvb.livejournal.com 2016-09-19 01:08 am (UTC)(link)
Со структурами данных как раз все просто - запихиваем все эти метаданные в SQL и начинаем строить нужный функционал. Обьем этих данных крайне невелик, и можно делать почти что угодно не беспокоясь особо о производительности.

Люсин тоже можно сбоку приспособить для свободного поиска, но это нужно только если объёмы данных достаточно большие.

У нас на такой системе сидят тысячи юзеров, и данных там сотни тысяч датасетов, и все работает ОК.

[identity profile] errorrishe.livejournal.com 2016-09-19 01:23 am (UTC)(link)
да, данных не то чтобы сильно много
полная одна дата модель что то типа 30 мегабайт, комитов на нее не то чтобы сильно дохера
были мысли что может вообще это хозяйство в памяти держать - даже с сиквелом не связываться. но то такое, засунуть в inoDB тоже проблемой не будет. Даже не уверен что парсилку надо многопоточной делать, ну что такое даже гигабайт другой с ssd прочитать ..

[identity profile] qvb.livejournal.com 2016-09-19 01:29 am (UTC)(link)
SQL просто удобен развитым функционалом - широкие возможности для весьма замысловатых queries, а такие обьемы данных он все равно будет в памяти держать. Смысла нет изобретать что-то свое когда стандартная база все прекрасно сделает.
Тем более что всяких тулзов и UI controls для сиквела - чуть более чем дофига. Плюс репликация и прочие радости продакшена.

[identity profile] errorrishe.livejournal.com 2016-09-19 02:08 am (UTC)(link)
да умом понимаю что база как хранилище будет норм, но жаба просит извращений
но она уступит если станет понятно что иначе ни как )

[identity profile] qvb.livejournal.com 2016-09-19 02:16 am (UTC)(link)
Ну если тянет на подвиги - то мешать благородному порыву не следует :-)

Хотя можно напомнить что 80% проблем в софтверном деле начинаются с идеи "а давайте мы что-то этакое запилим вместо стандартных средств" :-)

[identity profile] errorrishe.livejournal.com 2016-09-19 02:39 am (UTC)(link)
почти уболтал на то что бы все в тупую залить в базу
заебенить одну денормализированную таблицу с кучей индексов по всем и вертеть как хочу.

[identity profile] qvb.livejournal.com 2016-09-19 02:45 am (UTC)(link)
Я бы где-то так и делал. Денормализованная таблица с индексами и все. Поверх можно легко прицепить OData API, и можно ваять требуемый UI на ангулар или подобном.

[identity profile] errorrishe.livejournal.com 2016-09-19 03:14 am (UTC)(link)
о посмотрю на этот OData API, спасибо
заодно будет новый ангулар или реакт палочкой потыкать

[identity profile] zeit-raffer.livejournal.com 2016-09-19 03:29 pm (UTC)(link)

А чем лучше денормализованная таблица по сравнению с той же sql information schema? Чтобы джойнов не считать, а только фильтровать?

[identity profile] errorrishe.livejournal.com 2016-09-19 05:57 pm (UTC)(link)
Ага, во многих случаях это сильно быстрее. Правильно выбрал индексы и тогда это хорошо работает( можно жить без единого full scan)

[identity profile] bvlb.livejournal.com 2016-09-19 04:46 pm (UTC)(link)
Если сделать дамп схемы в текстовом виде, то многие вещи можно просто грепом делать, и быстро.

[identity profile] bvlb.livejournal.com 2016-09-19 04:51 pm (UTC)(link)
Если искать более сложные вещи, я бы тупо распарсил это в граф (у вас он слабо связный) и на питоне сам искал по нему что надо. с 5К узлами любой поиск будет мгновенен тупо перебором.

[identity profile] errorrishe.livejournal.com 2016-09-19 10:44 pm (UTC)(link)
ну вот это примерно в сторону моей первичной идеи
есть правда осложнения- имеются сотни версий этого графа ( модель то меняеться и местами точиться под клиентов. В среднем оно сливается в мастер но именно что в среднем, интересно понимать и разные версии )