Литература: - Томас Кайт. Oracle для профессионалов - https://postgrespro.ru/education/books/dbtech - Алан Бьюли. Изучаем SQL. - про MySQL - К. Дж. Дейт. Введение в системы баз данных
Q: Вопросы с лабами и задачками A: Задавай, ответят, но могут и обоссать.
Здесь мы: - Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить. - Разбираемся, почему PostgreSQL - не Oracle - Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс - Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе - Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование - Анализируем, как работает поиск вконтакте - И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно.
Если я для дев окружения хочу дропнуть все релейтед схемы и таблицы в БД, то достаточно каскадно дропнуть схемы? Или нужно заморачиваться удалением таблиц, а потом схем? Данные ценность не имеют.
Как теоретически мог бы работать то что называется модгет? Номер это же первичный ключ И типа когда даёшь новую запись в базу данных, то оно же начиная с него будет работать, а постов до него уже не будет
>>2337919 Способов много. Например, незадолго до гета впилить в код создания поста проверку, где проверять значение счётчика, и если следующее значение будет гетом, то инсертнуть модгет. Либо повесить аналогичный триггер на INSERT в таблицу постов.
>>2337926 > Либо повесить аналогичный триггер на INSERT в таблицу постов. Вроде же как в триггере нельзя делать insert в ту же таблицу на after insert которой он сам и дергается.
>>2337919 >Номер это же первичный ключ Если первичный ключ не написан как дефолтный генератор, то там вполне можно своё значение вставлять. Да и в генератор можно своё значение впихнуть, если сильно надо.
1. Сети, подключенные к ISP, считаются внешними: ISP forward nano /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl -p image
RTR-L Gitw ip route 0.0.0.0 0.0.0.0 4.4.4.1
RTR-R gitw ip route 0.0.0.0 0.0.0.0 5.5.5.1
2. Платформы контроля трафика, установленные на границах регионов, должны выполнять трансляцию трафика, идущего из соответствующих внутренних сетей во внешние сети стенда и в сеть Интернет. RTR-L NAT на внутр. интерфейсе - ip nat inside
на внешн. интерфейсе - ip nat outside
int gi 1 ip nat outside ! int gi 2 ip nat inside ! access-list 1 permit 192.168.100.0 0.0.0.255 ip nat inside source list 1 interface Gi1 overload
RTR-R NAT int gi 1 ip nat outside ! int gi 2 ip nat inside ! access-list 1 permit 172.16.100.0 0.0.0.255 ip nat inside source list 1 interface Gi1 overload
3. Между платформами должен быть установлен защищенный туннель, позволяющий осуществлять связь между регионами с применением внутренних адресов. RTR-L GRE interface Tunne 1 ip address 172.16.1.1 255.255.255.0 tunnel mode gre ip tunnel source 4.4.4.100 tunnel destination 5.5.5.100 exi router eigrp 6500 network 192.168.100.0 0.0.0.255 network 172.16.1.0 0.0.0.255
RTR-R interface Tunne 1 ip address 172.16.1.2 255.255.255.0 tunnel mode gre ip tunnel source 5.5.5.100 tunnel destination 4.4.4.100 exi router eigrp 6500 network 172.16.100.0 0.0.0.255 network 172.16.1.0 0.0.0.255
4. Платформа управления трафиком RTR-L выполняет контроль входящего трафика согласно следующим правилам: RTR-L ACL ip access-list extended Lnew permit tcp any any established permit udp host 4.4.4.100 eq 53 any permit udp host 5.5.5.1 eq 123 any permit tcp any host 4.4.4.100 eq 80 permit tcp any host 4.4.4.100 eq 443 permit tcp any host 4.4.4.100 eq 2222 permit udp host 5.5.5.100 host 4.4.4.100 eq 500 permit esp any any permit icmp any any int gi 1 ip access-group Lnew in
5. Платформа управления трафиком RTR-R выполняет контроль входящего трафика согласно следующим правилам: RTR-R ACL ip access-list extended Rnew permit tcp any any established permit tcp any host 5.5.5.100 eq 80 permit tcp any host 5.5.5.100 eq 443 permit tcp any host 5.5.5.100 eq 2244 permit udp host 4.4.4.100 host 5.5.5.100 eq 500 permit esp any any permit icmp any any int gi 1 ip access-group Rnew in
Мне нужно вытащить из MySQL таблицы те строки, у которых в ячейке name есть числа с точкой. То есть, "Вася 07" или "Коля.8Никифоров" НЕ войдут в выборку, а "Дима 6.16" - войдёт. Само число в строке может быть где угодно.
Можно ли это сделать чисто на скул-запросе? Пока что у меня только мысль вытаскивать всё как есть, и уже на бэке писать php-скрипт на регулярках, чтобы убрать лишнее.
Чё тред мертвый? В общем есть SQL проект в Visual Studio под платформу "SQL server 2014", он используется для генерации скрипта через publish. Этот скрипт добавляет в базу данных кучу таблиц и данных, но он подходит для mssql, а как сделать так, чтобы он подходил для sqlite? Пишу приложение и хочу отойти от зависимости от сервера базы данных, при этом с минимальными изменениями.
>>2343315 > срубить хайпа на импортозамещении Опоздали, уже все решили переходить с оракла на постгрес, и никого не остановят новости о плохо обкатанной в проде поделке, даже если она действительно такая идеальная и безальтернативная. Никто не хочет быть бета-тестером.
>>2343146 >Комментарии анонов будут? НИНУЖНО. Ничего изнутри Яндекса не нужно обычному анону. Ничего.
Практическое обоснование : Стоунбрейкер уже давно написал VoltDB, но не может на ней заработать. Люди просто покупают самый большой IBM PC-совместимый ПК и крутят на нем свои СУБД. Тупо выгоднее, проще, надежнее.
>>2343315 На петухабре же статейка. https://habr.com/ru/company/yandex/blog/660271/ Ну и так по новостным раскидали, правд я прочитал только сейчас. > Подозрительно тихо выложили в период, когда можно срубить хайпа на импортозамещении. Стесняются быть русским мб? Хз вообще. Технология-то вообще норм, то что нужно.
>>2343333 > Никто не хочет быть бета-тестером. Судя по заверениям у них есть свои тесты, скоро мб Jepson сделают. И ДБ используется в своих проектах, если они не пиздят. Т.е. как минимум она полностью рабочая и в продакшене работает.
Если там они не напердолили тысячи бесполезного функционала, то я точно заюзаю на ближайшем проекте. Хотя FoundationDB мне больше нравится, она проще, но там самому придётся кучу говна писать, YDB будет быстрее поднять, наверное, особенно если там встроенная inmemory есть.
>>2343371 > НИНУЖНО. Ну как это нинужно. Вот мне нужны кластерная хуйня с большой потанцевальной нагрузкой. Какие варианты вообще есть? Кроме FoundationDB, офк. > VoltDB Это же жаба. И там есть ограничения функционала, YDB вроде полностью попенсорс (но это не точно).
>>2342284 >а как сделать так, чтобы он подходил для sqlite? Открывешь референс по кейвордам для mssql и смотришь, какие из них реализация SQL стандарта, а какие - инхаус костыль. Составляешь таблицу из кейвордов по категорям реализация/костыль, смотришь как реализованные кейворды реализованы в sqlite и пытаешь переписать запросики. А потом идёт лютая ёбля с переписыванием инхаус костылей на костыли скулайта. >Пишу приложение и хочу отойти от зависимости от сервера базы данных, при этом с минимальными изменениями. Маняфантазии манагеров. Поезд волшебной универсальной СУБД ушёл и оставил за собой тонны легаси с диалектами. А рефакторить БД - не бэк/фронт переписывать, тут надо вкладывать усилия, время и деньжищи. Причём в обычную задачу спринта это не оформишь, да и не разбивается толком на подзадачи.
>>2343394 >Ну как это нинужно. Вот мне нужны кластерная хуйня с большой потанцевальной нагрузкой. Какие варианты вообще есть?
Нет, не нужна она тебе, поверь. Кабанчик тебе нужен нормальный. Архитектор там и админ бд. Они тебе расскажут как решить эти задачи.
ВТБ вон на одном сервере mssql спокойно справляется. А твое говно до туда не дорастет Только данные неоперативные нужно подчищать и перегружать в другие субд
>>2343510 >Нет, не нужна она тебе, поверь. Надо, вася, надо. Других вариантов нет. Либо делать как нужно делать, либо сосать. Сосать я не хочу. >Кабанчик тебе нужен нормальный. Архитектор там и админ бд. Они тебе расскажут как решить эти задачи. Вероятнее всего они обоссутся, потому что альтернатив-то YDB и нет особо. Покрайней мере я так и не смог придумать. Хотя в целом можно через FoundationDB, но она сложнее. Либо через порезанные версии с интерпрайсом, ну тут это залупа конская, пошли они нахуй любители денежек. >ВТБ вон на одном сервере mssql спокойно справляется. А твое говно до туда не дорастет Не, я планирую очень много трафона гнать. Прямо очень много. Миллионы/сутки или вроде того. Иногда хайповые нагрузки миллион/час. И аналитику туда ещё ебануть, а чтобы отвал бошки от поддержки не случился - всё на единой БД напердолить.
>>2343643 Пчел, тут только ты нафантазировал что мне нужно, ты в курсе? И продолжаешь влажно фантазировать, про чсв, про задачи, про то что мне нужно, про каких-то кабанчиков. Ты таблетки не выпил, что столько фантазий ебанул в тред?
>>2343656 совершенно точно можно сказать одно - в разрезе нескольких следующих лет ты обязательно где-нибудь ошибешься. просто потому что предвидеть будущее нельзя. Отсюда и мысль, что тебе скорее всего не нужна сырая БД от Яндекса. Ведь как-то наша айтишечка развивалась все эти годы.
Хочешь вложить свое время и не получить ничего - пожалуйцта.
>>2343510 >ВТБ вон на одном сервере mssql спокойно справляется. Это откуда информация? Я там работаю и только лично мне приходится ковыряться в 4 базах, ещё штук про 5 я слышал, а сколько их всего вообще ебу.
>>2344061 > совершенно точно можно сказать одно - в разрезе нескольких следующих лет ты обязательно где-нибудь ошибешься. Да я уже, десятки раз обосрался и ошибся. По этому работаю в нескольких направлениях. > просто потому что предвидеть будущее нельзя. Можно конечно. Причины имеют следствия, именно так составляются новучные теории. Они предсказывают будущее. Другое дело точность теорий. моя теория не очень точная, но предсказать хоть что-то можно всё же > Отсюда и мысль, что тебе скорее всего не нужна сырая БД от Яндекса. Альтернатив практически нет. Вообще нет никаких альтернатив YDB, буквально ноль. Единственная проблема которая там есть - производительность может быть не такой большой как у foundationdb и у самописного говна. > Ведь как-то наша айтишечка развивалась все эти годы. Она как раз и развивалась в направлении таких БД. > Хочешь вложить свое время и не получить ничего - пожалуйцта. Теории, понимаешь? За каждым шагом и мыслью должны лежать теории. Если хочешь что-то получить - нужно иметь теорию, которая проверена на эмпирических данных.
>>2344126 >Альтернатив практически нет еще раз, альтернатива на поверхности:
эксплуатируешь любую традиционную бд на одном большом сервере для OLTP и непротиворечивых данных, таких как остатки на счетах и транзакции и несколько вторичных, в том числе аналитических, для всего остального.
>>2344195 И что делать если нагрузки внезапно скакнут, "пожалуйста пожите, бд йобнулась"? Это несерьезно. Конечно, это всё в рамках манятеорий, но я изначально делаю под огромный траф. Если оно будет работать - оно должно отрабатывать без хуйни и проблем. И выжимать нишу я хочу до последнего юзверя. И счета, и аналитика, и данные будут на отдельных кластерах, чтобы в случае чего мог просто расширением аренды покрыть все проблемы.
YDB (или любое другое подобное решение) позволяет совершить плавный переход от лоутрафа до миллиона rps. Может конечно оно какое-то лажовое, тестов мало, jepsen нету, но. Нету альтернатив. Просто нету. Уже давно ищу и ничего нет.
>>2344207 >И что делать если нагрузки внезапно скакнут, "пожалуйста пожите, бд йобнулась"? Это несерьезно.
Ничего. Поставишь кабанчика перед фактом, что планирование не удалось, но хорошо что вам вообще удалось свою идею реализовать и настолько сильно вырасти.
>YDB позволяет совершить плавный переход
А может и не позволяет. >(или любое другое подобное решение)
Вообще-то, другого такого же нет по определению. В Яндексе все уникальное.
>>2344221 >Ничего. В смысле ничего, пользотели-то уходят. Деньги тоже утекают. Каждая секунда простоя - очень хуево. >Поставишь кабанчика перед фактом, что планирование не удалось, но хорошо что вам вообще удалось свою идею реализовать и настолько сильно вырасти. Это мои проекты, лол, ты что, на кабанчиков работаешь в 2к22 году? Ебать ты. Мелкобуржуа нужно становиться. >А может и не позволяет. Позволяет, это же кластер. >Вообще-то, другого такого же нет по определению. В Яндексе все уникальное. Ну так покажи мне полностью опенсорс кластернуб БД, без интерпрайза и ограничения функционала. Единственная что есть - foundationdb. Всё остальное с ограничениями. Постгрес есть, но там просто реплики и это вообще не то.
>>2344297 >мелкобуржуа >МИЛЛИОНЫ РПС!!!!!!! Чел... ты хотя бы прототип запили для начала на знакомых технологиях, чтобы понять, у тебя будут вообще клиенты или нет...
>>2344784 Ну вообще не если, а когда. Для этого открыл сразу несколько проектов и несколько копий существующих. Когда-то будет, главное сделать превосходство как минимум на уровне софта.
>>2345388 На питухоне всякое делаю, щас вот спарк пытаюсь палкой тыкать, каждый день не получается, но раз в 2-3 дня вполне. Щас читаю кабанчика с оппика.
Аноны, как правильно организовать базу данных? Хочу с заданным интервалом парсить количество вакансий на хх.ру по тому или иному запросу. И хранить это дело в бд. Как лучше хранить? Я ничего не придумал лучше чем id | запрос | количество Норм будет или не очень?
Анончик, дай какую-нибудь наводку, про то как будет работать база при таком сценарии:
Мы пишем в реляционку (постгрес) события. Другой воркер какой-то их вычитывает и удаляет. То есть грубо говоря это очередь. На таблице есть индексы. Запись достаточно интенсивная (сотни/тысячи в минуту), удаление так же.
Что будет проиходить с течением времени? Будет ли как-то деградировать эта система? Я не знаю как именно, но предполагаю, что индексы и таблицы будут фрагментироваться, что может очистка удаленных записей будет создавать какую-то проблему Наверное этот вопрос еще и специфичен для конкретной СУБД. Подскажи, что погуглить на эту тему? И поддается ли этот импакт (если он есть) рассчетам?
Анонасы, нужна помощь по лабе. Не получается заполнить таблицу улова, ругается, что праймари ключи уже есть такие. Так а как они могут быть не такими, если они формируются на основе id_катеров и id_рыбы? Мой говно-код. https://pastebin.com/AYQGYKcM Пик, самое задание. выходы в море тоже нужны правки с датой возвращения, но это главное заполнил таблицу для примера
Подскажите, как правильно написать запрос поиска по трём необязательным элементам? То есть я могу передать имя, но без промежутка дат, или имя и дату С, но не дату ПО. Примерно отобразил, что надо: SELECT * FROM tasks WHERE tasks.Name LIKE ? AND tasks.Date BETWEEN ? AND ?
>>2349861 В функции ты можешь указать значения по умолчанию для дат, какое-нибудь 01.01.1900 и 01.01.9999, в рамках одного запроса я не встречал такой функционал в базах с которыми работал, по-моему так не делается.
Анонасы, нужна помощь понять, где я обосрался. Написал запрос на увеличение вес улова семги. Все работает, обновляет то, что надо. Но вот когда пытаюсь создать представление, он выдает ошибку. В запросе update могу обращаться хоть так WHERE "Улов"."ID_Рыбы" = up10_semga; хоть так WHERE "Улов"."ID_Рыбы" = up10_semga."ID_Рыбы";, все равно ошибки. Говнокод. https://pastebin.com/XbKqCU8T Пики: вид представления и 2 разных ошибки.
>>2350417 НЕ анонас. АНОНАСИЩЕ! Спасибо огромное тебе! А есть ли возможность как то переписать представление, чтобы потом в where к нему обращаться как я это делаю т.е. просто where "Улов"."ID_рыбы" = up10_semga?
>>2350471 Это так не работает, не может значение поля быть равно таблице или вьюхе, оно может быть равно значению поля таблицы или вьюхи которое тебе надо селектнуть подзапросом.
>>2350473 Странно, вроде где то в примерах в интернете видел, что обращались просто к вьюхи без полей. Но может там вью сделана как то по особенному. В любом случае, спасибо большое!
>>2350473 Можешь помочь еще с одной вещью? https://pastebin.com/N3Z8iwVX Пытаюсь заполнить таблицу выходов в море. Поле выходов в море заполняет рандомной датой. Дальше надо заполнить дату возвращения путем рандомом например от 3 дней до 7 в примере у меня, пока просто затычка одна для всех. И вот тут начинается проблема. Пытался разными способами но не получается, постоянно ругается на то, что нельзя складывать timestamp+timestamp, date+date и т.д. Каким образом это организовать? cast не помогал, все равно ругался
>>2350481 >нельзя складывать timestamp+timestamp, date+date Ясен хуй нельзя, как ты сложишь 05.05.2022+05.05.2022? Число прибавляй, timestamp+1 добавляет один день, если надо добавить месяцы то через add_months, загугли.
Кулит, /db/абч. Можете разъяснить следующее: 1) На каких языках взаимодействуют с базами в it среде в реальности. Я не о самом SQL, а неком C# с Entity Framework или Python Psycopg2. Есть ли какие-то фавориты? 2) Встречали ли вы доступное объяснение по работе с бд. Я не о книжках где учат синтаксису, более интересуюсь эксплуатацией самих бд. Как проектируют бд? Рисуют схемку в drawIO, а потом перегоняют в СУБД или создают на каком-то ЯП с помощью фрейм ворка или либы? Оценивают ли работу бд по каким-то показателям? Нормально ли, что в бд могут быть несвязанные таблицы, просто табличка, из которой периодически запрашивают какие-то данные?
Вопросы могут быть странными или тупыми. Я не it-шник поэтому решил спросить тут, ибо большинство инфы это учу SQL за 300 ноаносек.
>>2350977 > На каких языках взаимодействуют с базами в it среде в реальности. Я не о самом SQL, а неком C# с Entity Framework или Python Psycopg2. Взаимодействуют через языко-зависимые библиотеки (их называют драйверами и коннекторами), которые получают от разраба SQL-запросы тупо в виде строк, отправляют их в базу по своему низкоуровневому протоколу на сокетах и получают ответы. Дальше на этом можно писать приложение, либо напрямую используя эти библиотеки, передавая SQL-запросы в строках, либо через ORM, которые волшебным и порой неоптимальным образом генерируют SQL-запросы и передают на вход тем же библиотекам-драйверам. В некоторых ORM изобретают высокоуровненвые языки, похожие на SQL, и запросы надо писать на них, эти языки потом всё равно транслируются в SQL. > Есть ли какие-то фавориты? Те, что просят в большинстве вакансий. В любом случае учишь SQL и к нему пару популярных для конкретного языка библиотек. > Как проектируют бд? Обычно тупо пишут SQL-скрипт с созданием таблиц, ключей. индексов и прочего, продумывая налету нормальные формы, ключи и прочее. Поэтому обычно не надо рисовать никаких графических схем мышкой, Для чего-то нетривиального да, могут сначала набросать схему, а потом всё равно пишут SQL-скрипт. Скрипты сохраняются в исходниках приложения и накатываются в базу последовательно через различные инструменты миграции. > Оценивают ли работу бд по каким-то показателям? Да, админы БД настраивают мониторинг и следят за нагрузками, использованием памяти и подобным. Если замечают, что, например, при запуске пользователями определённых операций резко возрастает нагрузка, они сообщают об этом разрабам, а те пытаются оптимизировать запросы, насколько возможно. > Нормально ли, что в бд могут быть несвязанные таблицы, просто табличка, из которой периодически запрашивают какие-то данные? Нормально, всё зависит от приложения.
>1) На каких языках взаимодействуют с базами в it среде в реальности. Я не о самом SQL, а неком C# с Entity Framework или Python Psycopg2. Есть ли какие-то фавориты?
На каких целесообразно писать. Что есть "реальность" ? Набор фирм в которых ты работал последние 3 года? Нет.
> 2) Встречали ли вы доступное объяснение по работе с бд Дейт. Хз что ты там называешь доступным.
>Нормально ли, что в бд могут быть несвязанные таблицы это НЕ "нормально", в смысле нормальных форм по Дейту и компании. Но этот же самый Дейт неоднократно напоминает, что теория нужна для того чтобы лишь только ориентироваться на нее.
>>2351001 >В некоторых ORM изобретают высокоуровненвые языки, похожие на SQL А зачем на это тратить время разработки, если можно дать напрямую SQL? Ограничить возможно для защиты от дурака? >через различные инструменты миграции. А что за миграция? В моем понимание это перенос данных из исходника в БД, или из БД №1 в БД №2. Это исходя из смысла слова. >>2351002 >Хз что ты там называешь доступным. Другой анон упоминал про ORM. Вот есть где про это посмотреть/прочитать? Вообще хотелось бы посмотреть какой-то курс универский на подобии Хирьянова.
>На каких целесообразно писать. Правильно ли я понимаю? Если компания запускает свой условный проект с использованием БД и управляю ей помимо СУБД выбранным мною языком и ей будет все равно какой это будет язык лишь бы можно было найти толкового программиста?
>>2351092 про ORM фундаментального почитать особо нечего. А поверхностных статей полно. Может быть есть на английском не переведенные книги, но попробуй еще начальные главы из книги "Java Persistence API и Hibernate" (не обязательно становиться грибом-джававиком чтобы понять эти главы)
>Правильно ли я понимаю? Если компания запускает свой условный проект с использованием БД и управляю ей помимо СУБД выбранным мною языком и ей будет все равно какой это будет язык лишь бы можно было найти толкового программиста?
здесь я сдаюсь. Просто непонятно что ты спрашиваешь. Реально какой-то разрыв в понятиях у тебя и у программистов. Выбор и основного языка и СУБД являются важными. Возможно ты имел ввиду такое : позволяет ли ORM в языке абстрагироваться от деталей СУБД настолько, что можно легко сменить СУБД ? ответ - ДА (но нет)
>>2351092 > >В некоторых ORM изобретают высокоуровненвые языки, похожие на SQL > А зачем на это тратить время разработки, если можно дать напрямую SQL? Ограничить возможно для защиты от дурака? Эти языки более переносимы и транслируются в разный SQL для разных БД. Используются они только в сложных случаях, обычно хватает стандартных методов на уровне прикладного языка. > А что за миграция? В моем понимание это перенос данных из исходника в БД, или из БД №1 в БД №2. Это исходя из смысла слова. Миграция схемы БД. Так называют запуск SQL-скрипта, изменяющего схему, ещё так могут называть сам скрипт.
>>2351097 >позволяет ли ORM в языке абстрагироваться от деталей СУБД настолько, что можно легко сменить СУБД ? Обычно впрочем это выливается в требование знания SQL, основного языка ORM и детали реализации самой ORM.
>>2351158 это сложно понять, но простые в использовании инструменты в ряде случаев требуют чтобы ты понимал как все работает под капотом. где-то этого не требуется, но точно не в бекенде
>>2351097 >>Правильно ли я понимаю? Если компания запускает свой условный проект с использованием БД и управляю ей помимо СУБД выбранным мною языком и ей будет все равно какой это будет язык лишь бы можно было найти толкового программиста?
возможно, ты хотел спросить: я является ли ORM настолько доминирующей технологией, что позволяет нанимать просто программиста без знаний конкретного языка и ORM чтобы потом переключаться между языками - и снова ответ ДА (но нет). Опыт работы с ORM конечно пригодится в любой другой библиотеке в любом другом языке. но очень уж много нюансов. Где-то миграции вручную пишут на SQL до сих пор ( да , я вас гошников имею ввиду)
>>2351097 Скажем так, стоит задача разработать БД + прикрутить форму для ввода критериев для дальнейших запросов. Вот я пытаюсь понять, какие критерии помимо нормальных форм применить. На каком языке лучше писать форму - Шарп или Питон. Питон по мне проще, но он медленнее. Но вряд ли в БД будет больше сотни запросов. И вот как это все запилить и потенциально дать доступ другим сотрудникам. Если с формой понятно, то с БД нихуя нет.
Сап, двачик. Есть один бот на питоне подключенный к бд. И есть одна функция, цель которой определять нового пользователя по его айди, записанного в бд. Вот то, что я высрал: https://www.codepile.net/pile/PVLwp0yl
На выходе получаю за щеку. mysql.connector.errors.DatabaseError: 2006 (HY000): MySQL server has gone away
Проблему гуглил. Либо база большая, либо кривые руки и говнокод. База у меня с 3 записями, так что выбор небольшой. Очень надеюсь на вашу помощь дабы понять обосрался я в самом запросе или мне съебать в питон тред на растерзание местному клоуну
>>2352997 Там пусто потому что я разобрался сам и удалил код с поста, а ты можешь пойти нахуй. Чем больше общаюсь с айтишниками, тем больше понимаю, что их большинство составляют затравленные чмошники или агрессивные гниды вроде тебя. За год в pr видел человек 5 нормальных и доброжелательных ребят. Как вы друг друга терпите, пиздец
Не получается создать триггер, который будет защищать от вставки одинаковых записей в таблицу (связывает две таблицы через многие-ко-многим). Что делаю не так? PostgreSQL
Код: CREATE TRIGGER dont_insert_same_values_to_album_song BEFORE INSERT ON album_song WHEN EXISTS( SELECT * FROM album_song, INSERTED WHERE album_song.album_ismn = INSERTED.album_ismn AND album_song.song_ismn = INSERTED.song_ismn ) THEN ROLLBACK PRINT 'Не добавлено: запись уже существует' END;
>>2353217 При замене этого говна >EXISTS( >SELECT * >FROM album_song, INSERTED >WHERE album_song.album_ismn = INSERTED.album_ismn AND album_song.song_ismn = INSERTED.song_ismn >) на 1 (true) так же возникает ошибка в этом месте
Не ебу где скрыт подъёб. Нашёл "минимальную верхнюю границу интервала", но на второй проверке крашится. Есть идеи, анон?
Код: WITH temp AS ( SELECT B_V_ID, MIN(B_DATETIME) time FROM utB GROUP BY B_V_ID ), temp2 AS ( SELECT TOP 1 WITH TIES B_V_ID, utb.B_DATETIME FROM utB JOIN utV uV ON uV.V_ID = utB.B_V_ID WHERE B_DATETIME >= (SELECT MAX(time) FROM temp) ORDER BY utb.B_DATETIME )
SELECT DISTINCT utV.V_NAME FROM temp2 JOIN utV ON temp2.B_V_ID = utv.V_ID
Сап, ананасы. Дрочу фронт, решил что знания в SQL не помешают, поглядел курс на фрикодкэмпе, основы понял. Поставил перед собой задачу сделать форум-борду с бесконечной вложенностью комментариев как на (((реддите))). Уткнулся в проблему как организовать бд:
1) Есть лишь одна таблица: posts: ... id BIGSERIAL PK, is_thread boolean, answer_to REFER posts (id), ...
Такой вариант прост и понятен, треды получаю по is_thread, затем запрошиваю все все ответы на него, затем на каждый ответ запрашиваю еще ответы и так до конца. Но там образом запросов на сервер получается очень дохуя и я понимаю что это блять бред (или нет?).
Мне стоит пересмотреть саму таблицу? Разбить на несколько? Использовать правильный запрос? Как получить рекурсивно все ответы, а с ними и ответы на ответы за запрос, или это не возможно? Помогите, будьте добры, гугл не помог, с меня как всегда.
>>2354994 Вообще не близкая мне задача, может под каждый "корневой" тред создавать патрицию и добавлять в каждый пост внутри ссылку на него? Так хотя бы он не по всей "борде" будет смотреть из-за каждого поста. >>2354964 Разбирать что ты там написал я в рот ебал, без негатива, ответ на пикче, вроде быстро решил, больше пытался с постановкой задачи разобраться, если по моему скрипту вопросы будут - завтра отвечу.
>>2351180 В том и проблема, что ORM добавляют оверхеда к знанию стэка, причём необязательно, что эти знания будут полезны за пределами этой ORM. Самый очевидный пример - множественные инсерты. Банальная операция, если оперируешь SQL выражениями с интерполяцией, но лютый пердолинг в ORM. Не говоря про всякие хитровыебанные джоины/вьюхи/партишоны.
>>2354994 >Поставил перед собой задачу сделать форум-борду с бесконечной вложенностью комментариев как на (((реддите))) Реддит - говно в этом плане. Все сорта вложенных комментариев - рак как в плане организации данных, так и в плане UX.
parent_id int REFERENCES posts
Посты с нулом заместо parent_id - ОП-посты. На реддите один хуй все комментарии привязаны к посту.
Сап, аноны, у меня в постгресе есть таблица с полем id типа serial, как мне получить следующий после данного id? id+1 понятное дело не сработает, т.к. запись с таким id могла быть, например, удалена.
>>2356304 1. Идентификаторы пишутся не в 'одинарных' кавычках, а в "двойных". В 'одинарных' только строковые константы. 2. После join идёт таблица, а не столбец, так же, как таблица после from. Столбцы только в on-части. 3. where должен идти в самом конце после всех джойинов. 4. Вообще, можно сравнение выручки с 0 засунуть в on-часть, как ты сделал с Таблица1.Продукт, а можно и наоборот их все вынести в where, а в on оставить только равенство договоров. В этом случае разницы не будет.
Сап. Подскажите плес. Такая вещь как "уровень изоляции транзакций" назначается на какую сущность при работе с БД? На транзакцию? На соединение? На всю базу?
Объясните тупому или направьте на плюс-минус толковое решение, как ебнуть вычисляемый в одной таблице столбец, который вычисляется по столбцам других таблиц? Или может оно нахуй не надо?
>>2358166 Откуда нам знать, надо тебе или не надо? Это тебе не эксель. Можешь создать вьюху, в которой будешь подсчитывать значение по нужной тебе формуле, но в такую вьюху ты ничего не сможешь инсертнуть. Либо делай как нормальные люди на уровне приложения при получении данных из этой таблицы.
Ну типа, нужно посчитать конечную стоимость по данным из других таблиц (стоимость тура в таблице тура = сумма авиабилета из таблицы авиабилетов + сумма проживания из таблицы отелей).
>>2358194 Мы на хую вертели твои авиабилеты с отелями, родной, если это лаба из универа и всё надо в базе делать - google=>create view. Если ты что-то приличное пытаешься склепать - считай на уровне приложения.
А цифровые подписи для хранения паролей в базах данных используются вообще? Типа хакер такой взломал базу данных, подменил хеш и такой "блин не пускает из-за цифровой подписи" Или тогда это и нормальным применениям помешает
>>2358697 Не используются, какой смысл? Если ты можешь подменить хеш, то можешь и цифровую подпись. Не будут делать так, чтобы одно хранилось в надёжном хранилище, а другое в ненадёжном. Подписывают обычно что-то такое, что выгружается из одной системы и загружается в другую, например, какие-нибудь отчёты.
Анон, как правильно сделать: Студент может учиться одновременно в нескольких группах. Где-то платно, где-то на бюджете как пример. Как связать это? У меня неправильно one to many в payment (пик 1) Моя идея: сделать таблицу Seat - место (пик 2), но выглядит как-то странно, одни ключи. Так делают вообще?
>>2359684 В постгресе есть социальный тип колонки для жсонов, но по хорошему надо нормализовать структуру и написать скрипт для парсинга этой жсон и загрузки в таблицы.
>>2359689 То есть можно скриптом перевести эти нереляционные даннные в связанные таблицы? Просто я не совсем понимаю, как с этими лучше обращаться. Будет ли вообще профит от такой операции или можно так же в json хранить?
>>2359710 Смотря что за данные. Если их немного, либо ты этот жсон просто хранишь и не обрабатываешь, можно оставить жсон. А если много, либо приходится часто обновлять отдельные поля, лучше несколько нормализованных таблиц.
>>2362080 если твой критерий размер - то ни с какого. нет никакой причины использовать партиции, если индексы работают. Думай о партиционировании как дополнительном измерении отсечк и данных в условиях когда оптимимизатор обосрался. Обсирается он довольно редко.
Просто сей странный прием экономит разработчикам время потому что их кабанчик подгоняет. А нормальному ДБА он редко нужен.
>>2362080 если твой критерий размер - то ни с какого. нет никакой причины использовать партиции, если индексы работают. Думай о партиционировании как дополнительном измерении отсечк и данных в условиях когда оптимимизатор обосрался. Обсирается он довольно редко.
Просто сей странный прием экономит разработчикам время потому что их кабанчик подгоняет. А нормальному ДБА он редко нужен.
Подскажите плес, сколько времени какая-то транзакция будет ждать снятия блокировки с данных, наложенных какой-то другой транзакцией? Есть ли какой-то таймер ожидания, и если он выйдет что произойдет? БД MSSQL. Если не ответите, то может пнете куда-то где можно об этом не очень длинно и сложно почитать, или хотя бы длинно и сложно.
>>2362266 >Есть ли какой-то таймер ожидания, и если он выйдет что произойдет? Результат не закомитится, драйвер вернёт ошибку, которую приложение обработает.
Привет программач, пытаюсь разобраться с базами данных. До этого работал с бд по средством либ которые сами создают и поднимают бд по моделям, но возникла потребность создать обычную под уже готовый проект.
Так вот возник вопрос: как поднять бд? Ну вот создал я бд с таблицами скажем в Постгресе, а дальше что? Как блять ее запустить то? Либа просит ей скормить url или uri от бд, значит нужно ее запустить как? и найти адрес где его взять?.
>>2363206 Это называется строка подключения. Это особенность скорее не СУБД, а используемых драйверов/коннектеров, через которые ты из своего языка подключаешься к БД. Например, в джаве JDBC, и строка там такая: jdbc:postgresql://host:port/database
Работал ли кто-то с neo4j в продакшене? Может кто—то поделиться опытом и подводными? Уже второй месяц пишу микросервис на нем. Сперва пользовался оберткой из spring data. Но теперь есть пара запросов на cypher. Но сущности пока всего три. И мне анонсировали еще штук 5. До сих пор не уверен, что neo4j вообще нужен и реляционки бы не хватило, а это не просто эксперименты тимлида. Тимлид и ответственный за сервис мидл как то сами особо не изучают neo4j и даже мои конспекты доки и ответов со стака по ими же написанным мне тасам читают через раз.
>>2364342 Проблема не в нем самом, чел. Проблема в анальниках которые тащат, прямо скажем, сырой местячковый nosql туда где классические реляционки его выносят в одну калитку.
>>2364305 Ну извените, Кликхаус - принципиально другая нишевая вещь и тащить его имеет смысл. Вот зачем нужно рисковать своими данными с YDB, если можно просто купить компьютор побольше - хз.
сап программач, решил сделать небольшой костыль для бд магазина, чтобы отпускать некорректные чеки по ОФД, но запрос отрабатывает только первую строку @ORDERS, не переходит ко второй. СУБД - MSSQL 2008R2, прошу совета у гуру анальных утех
DECLARE @ORDERS TABLE (NUMBER_DOC VARCHAR(50)); DECLARE @ID_INTERNET_ORDER_GLOBAL TABLE (ID INT IDENTITY(0,1) PRIMARY KEY, ID_GLOBAL VARCHAR(100)); DECLARE @ITERATOR INT = 0;
INSERT INTO @ORDERS(NUMBER_DOC) VALUES ('bebebebe.ru/2990303990') ('blablabla.ru/24000053501');
INSERT INTO @ID_INTERNET_ORDER_GLOBAL(ID_GLOBAL) (SELECT ID_INTERNET_ORDER_GLOBAL FROM INTERNET_ORDER WHERE NUMBER_DOC IN (SELECT NUMBER_DOC FROM @ORDERS)) SELECT FROM @ID_INTERNET_ORDER_GLOBAL WHILE @ITERATOR <= (SELECT COUNT() FROM @ID_INTERNET_ORDER_GLOBAL) BEGIN DECLARE @XML XML DECLARE @ID VARCHAR(100) = (SELECT ID_GLOBAL FROM @ID_INTERNET_ORDER_GLOBAL WHERE ID = @ITERATOR) SET @XML = (SELECT('<XML> <items> <item> <ID_INTERNET_ORDER_GLOBAL>'+@ID+'</ID_INTERNET_ORDER_GLOBAL> <CASH_TYPE>CSE</CASH_TYPE> </item> </items> </XML>')) exec dbo.UDP_INTERNET_ORDER_CS_PRINT @XML END
Объясните, что этим долбаебам от меня нужно. Урок называется Null handling, говорят мол используй функцию nullif, но я в корень не понимаю на кой хуй мне сравнивать 2 выражения в этом кейсе, если мне надо заменить значения в которых null на строковую билеберду %говно нот фаунд%?
>>2365197 Бля, там пустая строка была и все равно не понимаю нахуй через коалсенсы и нулифы это говно заменять, когда есть IsEmpty. Че за ублюдок этот кал придумывал.
>>2336742 (OP) Какие подводные хранения HTML строк не полноценный HTML документ, а его фрагменты в mysql колонке с типом XML? Сейчас хранится в виде обычной строки. Не устраивает то, что для того, что бы вытянуть какую-ту часть селектором приходится загружать всю строку на бэкенд, там делать HTML парсинг, после чего отдавать на фронт. Хочу избавится от лишнего звена в виде парсера на бэке, стоит того?
>>2365782 У меня в приложении есть WYSIWYG редактор Quill, который может сохранять только как HTML. Вот то, что пользователь там наредактирует я и сохраняю
>>2364845 И ты для этого дурацкого вопроса решил выбрать именно баз данных тред? Может быть сколько угодно слоев языков друг над другом (транслирующихся один в другой). Пользователь языка (программист) обычно сидит на верхнем или около-верхнем уровне, а иногда и сам создает более высокие. SQL кстати неплохой пример, он сам по себе обычно только прокладка между СУБД и языком общего назначения, который спамит скриптами запросов сервер БД.
>>2365807 Трансформируешь этот хтмл в джейсон и не ебёшь мозг. XML и HTML может визуально похожи, но у них разные правила парсинга, так что ебанёшься от постоянных ошибок БД.
я хочу сделать для знакомой парикмахерше сайт с возможностью сделать к ней запись ( она охуенно стрижет, я хочу так выразить ей респект ) , всё что касается всяких CSS и html я знаю. но нужна будет база данных и какие-то формы записи, очевидно.
что мне для этого понадобится? куда копать? какую базу данных использовать и как ее прикрутить к сайту? какой сейчас актуальный стэк?
а какая субд будет наиболее проще для первого раза? я сделаю нормально, но просто чтобы мне не сломаться о сложность, чтобы не было чрезмерно много информации которую сразу надо в мозг записать
>>2336742 (OP) Сап DB, посоветуйте визуализатор бд, по типу MySQL Workbench. Что интересует 1. Реверс инженеринг существующей бд 2. Отображение визуальной схемы бд (ER Diagram) 3. Отображение связей и их типов между таблицами.
>>2373315 Я скорее всего многое не понимаю, цель следующая. Я создаю связи с разными типами, мне для личного убеждения нужна какая-то отладка, чтобы понимать какая связь реально установлена между таблицами.
Зачем нужны блокировки на уровнях изоляции кроме Serializable?
Ведь по сути одна транзакция ждет коммита другой транзакции просто чтобы выполнить автоматические слияние данных(первая транзакция данные обновила, закоммитила, а вторая обновила после и тоже закоммитила автоматически, и зачем мы ждали, ведь то же самое было бы с другой последовательностью)?
>>2374450 > Зачем нужны блокировки на уровнях изоляции кроме Serializable? Чем выше уровень изоляции - тем медленнее работает БД. Самым высоким уровнем транзакции можно добиться такого, что транзакции будут выполняться тупо последовательно, и тогда вообще не будет смысла в нескольких ядрах и нескольких нодах приложения, всё будет тормозить и ждать очереди. > Ведь по сути одна транзакция ждет коммита другой транзакции просто чтобы выполнить автоматические слияние данных Это только если обе транзакции лезут в одну и ту же таблицу и обращаются к одним и тем же записям, тем более если обе хотят туда что-то записывать, а не просто читают. Таких случаев сравнительно немного, большинство транзакций работает с разными данными, не мешают друг другу. > (первая транзакция данные обновила, закоммитила, а вторая обновила после и тоже закоммитила автоматически, и зачем мы ждали, ведь то же самое было бы с другой последовательностью)? Одна из транзакций не закоммитится, будет ошибка.
Кажется я понял, про что это, если есть первая транзакция, так она после изменения данных должна быть уверена, что никто до конца их не изменит и не закоммитит. Пример из википедии https://en.wikipedia.org/wiki/Record_locking врет в данном случае. Клерк 2 спокойно перезапишет документ Клерка 1. А данные Клерка 1 никто никогда не увидит.
Можно даже начать транзакцию, удалить данные, попытаться обновить их во 2 транзакции, а потом закоммитить первую, ошибки второй не будет, просто вернется UPDATE 0
Допустим я хочу реализовать trie в постгресе. Ничего путного по теме не нашёл, но есть структура ltree, это она? И какой же у неё уёбищный синтаксис, как и у всех расширений постгреса.
>>2336742 (OP) Сап, двач. Нужно хранить много HTML, еще и с изменениями - то есть вот HTML за такую дату, вот - за такую. Какое хранилище мне лучше выбрать? Или посмотреть, как это делает гит с помощью слепков?
>>2378186 >а заебись бы было, не? Можно фото шлюх с интимсити парсить, только хз как это легально монетизировать, да и гораздо более интересные схемы были или есть. Когда тянок на фото разводят, а потом шантажируют .
>>2378512 Should do the following: 1. Poll URL and generate diff from previous version 2. Diff algorithm should be configurable, user should be able to add them as plugins. For starters simple HTML text diff is enough. 3. GUI should be able to show diff to user. Extra points if diff can generate abbreviated version, implementation may be site-specific. 4. GUI should be able to show worldmap, mapping URL to location. Any URL->Location mapping method will do. 5. Program should be able to use URL-specific connection settings, proxy should be enough. Extra points for ovpn/wireguard/whatever 6. Generate pdf with diff per time period. 7. Tech stack - elixir, phoenix (live updates on map with channels), DB - any kind, content storage on S3 (minio). Frontend - your choice.
Дело в том что мне нужно key value бд. Можно и графовую, если таких kv нет. Реплицируемая в многокластерную хуйню (обязательно), шардинговая (не обязательно, но желательно). Полностью опенсорс, без разделения важных фич для интепрайса. Без JVM.
Нашел только FoundationDB. Касандра ещё норм, но oна жава.
>>2378800 Она же на диск не пишет. Мне что, ручками всё делать? Ну ладно если на диск не пишет можно реплик ебануть 10 штук, но она и реплики и кластеры не поддерживает, мне что тогда, ручками реплики делать? Слишком слошна.
Пизда конечно, никаких бд по моему запросу нет по сути. Вот были времена когда майскуль ебанул на сервер и всё, похуй. Отвалился так отвалился, старую базу поднимай.
>>2378833 > berkeleydb Хммм. Репликация есть. А я думал что нет. Хорошо что подсказал, нужно изучить детальнее её. Но конечно там ручками дохуя придётся пердеть. > leveldb У него репликация через JVM, неприятненько.
>>2378836 Это да, если отказаться то просто берёшь касандру нахуй и всё. Но если я откажусь от жвм, то. То. То хуй знает даже. Это же только БД будет на жабе висеть, нахуя она нужна-то, придётся часть логики на жабу переносить. А так дойдёт до того что придётся и вообще всю бизнес-логику на жабу переносить, епты. Неприятно же! Все эти классы ебаные, оопешники блядь.
Алсо, а касандра жозенько пропихивает свой датастакс в опенсорс? Вообще не читал на эту тему. Редис, например, прямо ебёт досуха каждого долбоеба кто решил попользоваться редисом.
>>2378942 Ну я могу довольно просто изменять почти всю бизнес-логику под БД. Не проблема вообще, можно сделать весьма неплохо, если перестроить данные так чтобы оно графы мне считало. Но похуй. У фоундейшена появился хороший калкурент.
https://griddb.net/en/ Griddb епта. Используется и сделано тошИба. Ну типо епта с++, сделана японцами, не геями-кожевниками из эпла. Внушает доверие, а? Как низкорослый карлик доверяю низкорослым карликам из Японии. Сайт хорошо выглядит, красивый маскот. Потратились ребята. Есть клиенты под жабу, питон, ноду. Ноу-ебля эдишн короче. КАКОВО НАХУЙ КОГДА ЕБАЦО НЕНУЖНО?
Всю бд делали 7 человек на гитхабе. Но у одного из них седые волосы.
>>2378970 >Ну типо епта с++, сделана японцами, не геями-кожевниками из эпла. Полехче с таким заявлениями. Gay-related immune deficiency (GRID) (sometimes informally called the gay plague or GRIDS, standing for Gay-related immune deficiency syndrome) was the original name for AIDS
>>2378970 > Griddb епта. > GridDB is a NoSQL database which pursues high-speed and high-scalability and does not have a transaction function for the entire database like a relational database. However, transactions are supported in “container” units. Ой, у них вместо ACID что-то другое непонятное. Эх, японцы. Ну для IoT наверное норм.
>>2378976 Хм, а ведь действительно. Как KV могут быть GRID? Никак, очевидно.
>>2378979 Так-то да, но руки-то чешутся. Если есть JVM, значит нужно писать в JVM. Зачем она просто так стоит? Непорядок.
>>2378980 > Так-то да, но руки-то чешутся. Если есть JVM, значит нужно писать в JVM. Зачем она просто так стоит? Непорядок. А если БД написана на C++, тоже руки чешутся писать бизнес-логику на плюсах?
>>2379044 Нет, бизнес-логику, вроде того же перебора графа, очень часто пишут на плюсах/си. Как и транзакции всякие. Ну и вообще термин "бизнес-логика" для ньюфагов, размытый и нихуя не значит, не используй особо его вне пиздаболии с менеджерами.
>>2379065 У бизнес-логики вполне конкретное значение: описание бизнес-процессов предприятия, соответственно, есть привязка к предметной области. Это явно не те категории, которые должны относиться к разработке СУБД.
>>2379069 > бизнес-процессов Ты ввёл ещё одно определение, которое не имеет смысла и не определено. И ввёл его чтобы объяснить предыдущее определение без смысла. Ебать ты менеджер, хуле ты в этом треде забыл?
Вот рассчёт графа это бизнес-процесс? А ведь он буквально регулярно проводит рассчёты над устройствами, получая и создавая готовые данные, которые попадают в аналитику без модификаций. Просчёт интернет-мошенничества это бизнес-процесс? А это тоже через рассчёт графа происходит. Блджаж, да я с десяток "бизнес-процессов" могут только на одном графе напердеть тебе.
Есть где-то описание апи для работы с постгрей? Для любого языка в целом Точнее, что я хочу: подобие гуишной тулзы сделать для себя. В которой вкладки для постгри есть, редиса, тарантула и прочего что юзаю. Затык на постгре. Для себя хочу управлять включением/выключением бд, время запросов, запросы, само описание таблиц, размеры и т.д. Короче объединить всякие тулзы в одну. Но мне не клиент нужен и не хочу системные pg_ctl вызывать. Можете подсказать?
Однако когда пытаюсь пробежать sudo apt-get install -y mssql-server, то получаю сообщение о том, что серверу понадобится libldap-2.4-2, хотя у меня установлена обновлённая версия libldap-2.5-0. Даунгрейднуться не получается, потому что libldap-2.4-2 в принципе не доступен для скачивания. Есть ли какой-то способ проинструктировать mssql-server обратиться к libldap-2.5-0? Если нет, то каковы мои альтернативы, чтобы таки завершить установку?
>>2379473 Клиенты. Без бизнеслогики, чистые данные. Ты говоришь про слой промежуточных серверов, которые не относятся к высокопроизводительным серверам с отдельными фичами и к серверам с бд. Ну да, там частенько используют высокоуровневые языки. Но не всегда, потому что без плюсов оптимизировать очень слошна.
>>2379648 >Клиенты. Без бизнеслогики, чистые данные. Волшебные клиенты по воздуху передают напрямую содержание памяти на своих машинах? И ты не менее волшебно их просто загружаешь прямо в память? Такую важную деталь, как откуда у них эта информация берётся, можно даже не упоминать. >Ты говоришь про слой промежуточных серверов, которые не относятся к высокопроизводительным серверам с отдельными фичами и к серверам с бд. У тебя от писания на крестах просто началась профессиональная деформация. Ты сидишь в треде, доменные языки которого разделены на два лагеря - человекочитаемый SQL и человекочитаемый JSON, и при этом заливаешь про отсутствие бизнес-логики как термина. Разработчикам постгреса наверно моча в голову ударила реализовывать и допиливать поддержку джейсонов в своём продукте, а разработчики монги просто захотели запилить индексы и джоины. Хотелки бизнеса здесь вообще ни причём.
ананусы сап вкатился я в базы данных начав изучать sqlite можете мне пояснить кое что из азов?
хочу разобраться не тупо смотря гигобайты видосов, а напрмиер создать базы данных сам, и чтобы уже с этой целью добавлять знания недостающие подкините мне хороший туториал который вам помог в свое время?
Разбираюсь в функциях в постгре и вопрос возник. Я могу указать, что нужно возвращать все столбцы не перечисляя их? Т.е. я могу указать RETURNS SETOF "MyTable", но мне нужно вернуть две сджойненные таблицы. Могу указать RETURNS TABLE, но тогда нужно вручную указывать все столбцы, что утомительно и можно забыть поправить функцию, если добавиться столбец.
>>2379827 >Волшебные клиенты по воздуху передают напрямую содержание памяти на своих машинах? И ты не менее волшебно их просто загружаешь прямо в память? Такую важную деталь, как откуда у них эта информация берётся, можно даже не упоминать. Что это за бредятина нахуй? Информация с датчиков. Перестань свои менеджерские маняфантазии о сайтиках применять на всё что угодно. >У тебя от писания на крестах просто началась профессиональная деформация. Ты сидишь в треде, доменные языки которого разделены на два лагеря - человекочитаемый SQL и человекочитаемый JSON, и при этом заливаешь про отсутствие бизнес-логики как термина. SQL это не бизнес логика. Почитай что такое SQL на досуге, манагер.
>>2379957 >Что это за бредятина нахуй? Информация с датчиков. Датчики тоже из воздуха дату собирают? Никаких протоколов и следования стандартам, да? И отправляют гигабайты несжатых данных прямиком из памяти. >Перестань свои менеджерские маняфантазии о сайтиках применять на всё что угодно. Пердолик что-то там о маняфантазиях рассказывает, лол. >SQL это не бизнес логика. Он существует исключительно из-за нужд бизнеса. Пердолики всё хотят запилить бинарного убийцу SQL, да всё никак не могут.
>>2380174 >Датчики тоже из воздуха дату собирают? Никаких протоколов и следования стандартам, да? И отправляют гигабайты несжатых данных прямиком из памяти. Да, просто байты отсылают. По udp/tcp. Если какой-то датчик отсылает вместо чистых бинарных данных какое-то говно в json - его нахуй меняют на нормальный. Ебать ты манагер, ты что, нафантазировал как датчики json отсылают? >Пердолик что-то там о маняфантазиях рассказывает, лол. Ух эти пердолики! Не то что высшая каста, манагеры! >Он существует исключительно из-за нужд бизнеса. Манагер, плиз. Он существует из-за легаси и согласованности данных, которая как раз и являются нуждой бизнеса. Мелкого бизнеса, в основном, сосайтики там всякие твои, мелкие магазины. У крупного биза проблемы с SQL, из-за невозможности горизонтального масштабирования. > Пердолики всё хотят запилить бинарного убийцу SQL, да всё никак не могут. Убийцу SQL сделоли - CRDT. Манагеры уже переучиваются на бетховен и солидити, а ты всё аутируешь в SQL. Хотя могу тебя понять, SQL ламповый, а CRDT только в зайчатках. Вот бы сделали SQL CRDT.
Есть запрос вида select from (select from A ...) as SubA left join B on SubA.a = B.b есть индекс по B.b. Для 25 записей пришедших из SubA дергается 25 раз индекс B.b (пик 1). Все ОК. Но если выношу подзапрос в процедуру и получаю запрос вида select * from myPoc() as ProcA join B on ProcA.a = B.b то на индекс кладется болт и строится хэштблица для всей присоеденяемой таблицы (пик 2), и запрос в 50 раз дольше на небольшой базе. Это не ОК. Есть мысли как разрулить?
>>2380650 В оракле хинт leading или ordered с use_nl юзается, как в других базах хинты работают хз. если вообще правильно понял вопрос, с разработкой процедур не сталкивался
Меня продолжают унижать функции в постгре. Я могу сделать запрос select * from A join B, и оно мне вернет например |id|fieldA|id|fieldB но я не могу вернуть из функции table(id integer, fieldA text, id integer, fieldB text) ибо два столбца с именем id ни-ни, а если переименовать столбец, то это перепердоливать мапперы. Ну что за хуета?
>>2380650 Если кому интересно, то дело в том, что планировщик, при использовании функции не может прикинуть количество возвращаемых из нее строк. Он решает (возможно константное значение заложено), что функция вернет 1к строк и решает, то лучше сделать seq scan на 20к строк, чем 1000 раз долбить индекс, что при таком раскладе вполне разумно. Можно закостылить установив лимит select * from func() limit N В моем случае количесво мне известно, так как оно зависит от размера передаваемого в функцию массива. Но в общем случае видимо придется страдать.
Базач, есть потребность данные из db2 реплицировтаь в postgres. Что можно использовать, помимо экспорта-импорта файлов? db2 fdw не катит - используется несовместимая версия постгри. Помоги, анон. сам нихуя не базист
>>2381426 >>2380650 Оказывается в функция можно указать кол-во строк и стоимость для планировщика и ебать вола. Удивительно, что в бд треде не тех, кто шарит в бд нет
>>2385791 > а что такое хранимки? Хранимые процедуры. Это когда логика программы не в виде какого-то экзешника или скрипта, а прямо в базе данных. > алсо поясните нубу: могу я где-то скачать mysql бесплатно? https://dev.mysql.com/downloads/installer/ > хочу вкатиться в базы данных, лет 10 назад верстал сайты, хочу вкатиться в IT на хуй пошел я , знаю Ну, вкатывайся, чо
>>2385895 Вот умеет СУБД как-то хранить таблицы, вьюхи и индексы в каких-то своих внутренних файлах БД. И так же она хранит в том или ином виде процедуры в виде кусков инструкций, которые сама СУБД умеет интерпретировать и исполнять, как это делают интерпретаторы некоторых языков программирования. Это может быть байт-код, исходники скриптов или что-то ещё, физически, конечно, всё хранится в файлах в бинарном виде. Ты пишешь команду CREATE PROCEDURE, прямо там же её исходник на понятном СУБД языке (к примеру PL/SQL в Oracle или T-SQL в MS SQL Server), она в свою очередь этот исходник парсит и где-то у себя сохраняет. В любой другой момент ты можешь вызвать эту процедуру, и она просто запустится и выполнится. Можно сравнить с макросами в Excel. На таких языках удобно работать со стандартными командами SELECT/INSERT/UPDATE/DELETE, ты просто их пишешь как обычные операторы языка, но в довесок к ним у тебя есть переменные, условия, циклы, вызов других процедур и прочие стандартные возможности языков программирования.
аноны сап подскажите скачал установил open server, пытаюсь в настрйоках включить чтобы появился phpmyadmin , настрйки - модули - mysql, но как только выбираю sql win10 - опен сервер не запускается
у меня 7ка если что. поясните плез как настроить ээто всё
>>2390751 оказалось все просто, у разных версий - разный дефолтный пароль.
алсо - для изучения базы данных а именно MySQL что лучше поставить? просто чистый MySQL с сайта мелкомягких или можно оставить опен сервер? какую самую позднюю версию можно накатить на win7 ? у меня заработал только с 5.6
>>2336742 (OP) В постгресе выбираю часть мыла до @. Возвращается что-то типа 'marie.sue'. Как мне сделать так, чтобы только первая буква конвертировалась в верхний регистр? initcap дает 'Marie.Sue'. Неужели нужно ебаться с конкатенацией?
Всем доброго времени суток аноны повелители БД. Я как заплутавший стьюдент пришел за вашей помощью. В чем суть, я пишу типичный веб сервис на REST архитектуре, у которой есть БД постгрес, и у неё есть несколько таблиц с UNIQUE столбцами. И вот смотрите: 1. я шлю post запрос на запись данных в таблицу
2. в табличку данные записываются и в столбце primary key (просто к примеру если табличка пустая) я получаю 1
3. я шлю следующий post запрос на запись данных в таблицу, но уже с теми же данными что я слал до этого
4. естественно получаю от БД сообщение что данные нельзя записать и что они не уникальные
5. и вот тут начинается магия, я шлю теперь правильный (с новыми данными) post запрос на запись данных в таблицу, туда все записывается, но! в столбце с primary key теперь не 2 а 3
Нахуя он пишет первичный ключ 3 если есть всего лишь 2 строки, причем у одной из них 1, как постгрес перескочил с 2 на 3? Вот хочу понять это я кривой код написал, или постгрес с табличками неправильно сделал. Если первое то не буду вас беспокоить и пойду к разрабам на том языке на котором свою каку накодил.
>>2391845 Спасибо за то что навел в правильном направлении, сейчас покопался и понял что не обязательно делать все значения последовательным, они уникальны и соответствуют требованиям первичного ключа да и хуй с ними.
Суть проблемы: В СУБД (postgresql) есть таблица data. В этой таблице есть столбец address, в котором хранится json. Внутри json, среди значений, встречаются строки вида \u041e\u043f\u044b\u0442\u043d\u0430\u044f.
С извлечением этих строк проблем нет. Запрос типа: select trim('"' from (address::json->'street')::text) as "StreeName" from data; отрабатывает замечательно, но вот есть проблема с перекодированием этой строки в читабельный вид, т.е. чтобы вместо "\u041e\u043f\u044b\u0442\u043d\u0430\u044f" отображалось "Опытная".
Пробовал всякие encode|decode|convert_to|convert_from, но желамеого результата нет - или пустое значение или ошибка типа "неверный синтаксис для типа bytea".
Вопрос: Скажите, пожалуйста, как правильно перекодировать юникод-строки в читабельный вид в постгресе?
>>2392013 Язык - sql. Я не могу понять как нужно обработать значение trim('"' from (address::json->'street')::text) чтобы результатом select-запроса была читабельная запись.
Что-то типа: select МАГИЯ(trim('"' from (address::json->'street')::text)) as "StreeName" from data;
К довольно сочному собесу надо нахватать хотя бы по верхам теории по следующей теме:
DWH: структуры отчетов, источников, хранение данных в DWH - слои, объекты, логика преобразования данных, показатели качества требований, модели и типы хранения данных и т.д.
Аноны, выручайте, посоветуйте ресурсы, по SQL я разъебу их, а по проектированию хранилища надо хотя бы сойти за не полного идиота.
PostgreSQL Как из Столбца 1 и Столбца 2 получить Результат? Каждое значение в С1 повторяется строго два раза. Для каждого уникального С1 нужен результат вычитания соответствующей пары чисел в С2.
Такая тема, мне нужно раз в неделю персистентно писать очень много данных в бд, а потом доставать их по ключу, это что-то вроде горячего кеша. Данные выглядят, как json'чики по 200кб. Я пробовал постгрес, монгу и редис, примерно все одинаково плохо работают с записью объектов такого размера и получается заточены под хранения большого количества маленьких файликов. Редис только ещё и пытается вообще всё в памяти хранить и в итоге по оперативке быстро проседает. Плохо работают - это упираются в CPU базы и в итоге запись длится часы. Я ещё думал, что может монга будет работать быстрее постгреса, так как ему нужно время на нарезку json'а на тосты, но оказывается нихуя, работают примерно одинаково.
Что ещё затестить? Удивлен, что оказывается задача "записать несколько гигов в виде json'ов средне-большого размера настолько неочевидная. Я уже думал, что может распределенную фс поднять и туда писать, прям реально файликами.
А можно как-то в postgres подписать case конструкцией as? Прохожу курс, в нем задание - достать общее количество продаж у продавца, и отдельный столбец - премия. Если продаж больше определенного числа, то там 'да', иначе 'нет'. Вот мне надо, чтобы case выводился как 'Премия'
есть SQL - это язык. а PostgreSQL, MySQL, SQLite - это среда или интерфейс просто?
например в open server база данных релизована с графическим интерфейсом, т.е. можно прямо в таблице менять параметры, значения, названия и тп, без написания запросов для этого.
а по факту ( или наиболее часто ) в работе - это просто комнадная строка и запросы? как это выглядит визуально?
>>2397404 SQL - это язык, у которого есть стандарт, но нет "эталонной" реализации, которую бы юзало большинство. Постгресы и мускулы - это всё СУБД, т.е. движки для создания и управления БД. Для доступа к БД они все предоставляют поддержку SQL, но каждый из них добавляет свои расширения, которых в стандарте SQL нет. Поддержка SQL для разработчиков приложений реализована через специальные библиотеки (драйверы), где ты на уровне обычного языка программирования пишешь SQL-запросы в виде строк, передаёшь их библиотеке, а они передают их СУБД, те их выполняют и возвращают ответы в виде таблиц, для программиста это будет что-то вроде готового массива значений. Также у СУБД обычно есть из коробки простые программы с консольным интерфейсом, где можно писать запросы, а они внутри юзают драйверы и просто выводят результат. Ну и кроме консольных утилит есть сторонние приложения, которые делают то же, что и эти утилиты, но в виде удобного графического интерфейса, где да, как раз открываешь таблицы как эксель и меняешь данные, кликая мышкой, ну и ещё можно писать те же SQL-запросы в специальных полуконсольных-полуграфических режимах. Насчёт Open Server не знаю, хз что это, там либо юзается одно из таких приложений с графическим интерфейсом, либо какая-то своя тулза. При написании приложений пользуются в первую очередь драйверами, консольные и графические утилиты нужны только для того, чтобы иногда заходить и смотреть данные в БД, сами приложения их не юзают, они работают исключительно через драйверы.
Есть одна амуриканская проприетарная программа, которая пишет данные в MS SQL базу данных. Эта база данных уже занимает 30гб. В ней есть одна таблица с миллиардами записей (буквально - данные туда летят чуть ли не каждую минуту, и накапливаются за года)
Так вот, эта закрытая программа работает с этими данными за микросекунды - нажал кнопочку и тут же получил за нужный период по нужному условию (при этом явно не вижу ничего под кеширование)
Ну вот, импортозамещение.. Делаю простенькие селект-запросы... Ничего сложнее простого селект-фром-вере...
Почему мои запросы выводящие ровно теже данные по тем же условиям выполняются за минуты... А в той программе мнговенно?
Меня тут больше для самообразования интересует - хочу разобраться в какую сторону копать чтобы тоже так делать.
>>2397449 Один хуй твоя программа запросы шлёт в базу, а не напрямую из ноосферы данные вытаскивает, они должны на стороне базы в истории храниться, вот откопай их и посмотри в чём прикол, вангую ты просто партиций дохуя смотришь.
>>2397804 спасибо. возьму с собой маску для плавания с трубкой
а что посоветуешь ? как учиться работой с базой данных сейчас? чтобы актульаное и прикладное. я просто посмотрел web, всякие javascript, html css , php, и понял вдруг что мне очень нравится именно базы данных, я сука люблю структуры, порядок, логику, плыву в этой моче и кайфую
допустим хочу себе сделать себе базу данных клиентов, чтобы прямо в бою учиться и дело делать и мне пользу приносило, а не пет проекты дрочить.
>>2397804 Что бля? Я тебя сам на лицо нассу щас. Только долбаёб будет пердолится в консоли, когда миллион сред для разработки. Консоль запускается в крайних случаях, когда нужно создать первого пользователя, проверить проблемный запрос, никто в чёрные целыми днями не смотрит.
>>2398009 Если ты просто вебмакака, то тебе нужен только CRUD. Как аноны выше советовали ставишь докер и работаешь с ним. По структуре и логике это наверное скорее Data Governance, а работа с базами данных это часто говно и кастыли, потому-что заказчик хочет что-то специфическое, и ему поебать что это не соотвествует текущей модели данных. Почитай кабанчика с ОП пика. Пойми, сами по себе бд, в отрыве от конкретного проекта/приложения ценности не имеют.
>>2398918 Тогда пиздуй читать, Кимбела, Аймона, data vault 2.0, анхоры, дата меш. чел хули ты там собрался проектировать, если к бд подключиться не можешь
Я правильно понимаю, тут оно дропает базу, если она не пуста, а потом добавляет в неё запись админа со случайным паролем, которую нельзя перезаписать потому что юзернейм столбец в ней помечен как unique?
>>2399057 Вот бы щас читать хабропарашу, не знаю что они там в своём курятнике кудахчут. Подумай сам, количество данных только растёт, место подешевело, и все хотят аналитику делать, не говоря уже о всяких нейронках и прочеему машинному обучению. Да оперативные бд никуда не делись, но все деньги интересные решение сейчас в аналитических решениях.
Уважаемые, помогите новичку, который sql только на картинке видел и пока не разобрался с синтаксисом. Есть таблица А, в которой есть поля idA, relatedIdB и nameA, есть таблица B, в которой есть idB и nameB. Нужно сделать так, чтобы если nameА и nameB совпали, то в поле relatedIdB записалось idB этого элемента из таблицы B.
>>2336742 (OP) Как принято хранить глубокие древовидные структуры в БД? Херь вроде Монги тут вряд ли подойдет, при большой вложенности она начинает сосать. В РСУБД будет слишком много джойнов. Шо делать?
Хм, че-то я тут потерялся малость, вот что смог сообразить:
1. WHERE x != 1 по идее должно бустануться обычным btree же? Оно работает на равенство и на больше/меньше, а на прямое неравенство? hash должен тащить то чно 2. Тут походу никакой индекс не поможет 3. btree/hash выручат 4. Возможно GIN? Не ебу, не юзал его никогда, btree точно не поможет 5. В идеале составной индекс нужен. Но просто индекс по b тоже ускорит запрос, просто меньше
>>2399010 так блять вот и хочу научиться! зайти могу в базу, посмотрел уже sqlite, mysql, теперь postgre, понял что такое crud, сейчас пытаюсь понять в логику запросов
накидайте актуалочки еще? на каких версиях всяких postgres sqlов работаете? может можете порекомендовать курсы какие-нибудь годные? только не скилбоксы хуексы всякие
>>2399545 Во втором случае можно упороться и создать индекс по выражению x+y. Работать будет, но очень не шибко. К примеру, если в запросе использовать не x+y, y+x, то такой индекс уже не будет использоваться
>>2399545 1) Хороший вопрос. Индекс по x должен помочь 2) Тут индекс не поможет, если хотим ускорить вычисляемое и пишем сразу в таблицу 3) index(a,b) 4) Т.к. вначале тоже подстановка, то полнотекстовый 5) index(a,b) Где я обосрался?
есть уёбищная таблица, например с добавленными данными в виде 5 строк (из N столбцов каждая) , и я решил добавил к ней еще один столбец - например РАЗМЕР СИСЕК
как мне блин у каждой строки заполнить только этот столбец?
>>2401119 В таблицу, где уже есть какие-то данные нельзя добавить NOT NULL столбец без значения по умолчанию. СУБД ведь не знает, какими данными инициализировать ячейки существующих записей, а NULL подставить не может, ведь ты ей запретил через NOT NULL. Либо дописываещь DEFAULT какое_нибудь_значение, либо добавляешь столбец без NOT NULL, устанавливаешь значения через UPDATE и в конце меняешь столбец на NOT NULL через ALTER TABLE уёбищная_таблица MODIFY размер_сисек NOT NULL;
>>2401161 Так обычными апдейтами. UPDATE уёбищная_таблица SET размер_сисиек размер_сисек = 'Неизвестно'; Это обновит значения всех столбцов размер_сисиек. Таблица целиком не перезапишется, перезапишутся только указанные в апдейте ячейки.
>>2401174 не понимаю. вот мне надо чтобы теперь в каждой строке в столбце размера сисек появилось значение. чтоб у жирной мамаши 5, у мамы шака 3 и тд какой командой это прописывается? логику не улавливаю
>>2401181 UPDATE уёбищная_таблица SET размер_сисиек размер_сисек = '5' WHERE milf_id = 4; UPDATE уёбищная_таблица SET размер_сисиек размер_сисек = '3' WHERE milf_id = 3; и т.д.
Хотя если ты юзаешь какую-то гуёвую тулзу для работы с БД, там почти наверняка можно не писать команды вручную и в просмотре таблиц тупо отредактировать, как в экселе.
а вот интересно - если милф там 1 000 000 , и например не нужно \ не хочу заполнять каждую и писать реальный размер_сисек а хочу набросать рандомно эту таблицу, например с последовательностью 2345 которая заloopена?
можно это как-то реализовать? типа размер_сисек = 2 where milf_id = 1, размер_сисек = 3 where milf_id = 2 и тп а дальше что-то типа в логике n + 1 , чтобы оно само дальше добавилось
>>2401409 Можешь в апдейте написать простую формулу по вычислению размера как остаток от деления от milf_id. Типа такого: UPDATE уёбищная_таблица SET размер_сисиек = (((milf_id - 1) % 4) + 2)::CHARACTER;
Сам SQL Server рабочий (к другим базам нормально подключается), а вот к этой нет (при этом пробовал еще и с самого сервера, и по локальной сети с других компов - везде выдает эту ошибку)
База данных вроде как рабочая - я сделал ее копию через powershell. В нее идут запросы по ODBC, плюс программа пишет и читает из нее данные
Пользователь тоже имеет права (ну как минимум по ODBC создаются связи для пользователя - вообще пробовал и пользователя винды и пользователя SQL)
Ошибка не гуглится. В подробном тоже нифига не написано
есть ли какой-нибудь способ открыть рядом две уёбищные таблицы сразу? типа чтобы визуально было понятно что с чем соединять неудобно жутко, хоть на бумаге рисуй их
>>2402723 нет, всмысле как например сижу я в фотошопе - могу две картинки открыть в двух окнах рядом
а в pgadmin - типа есть строка в которой вкладки с открытыми окнами, но не знаю можно ли их например просто открыть одновременно если монитор большой? чтобы каждый раз не тыкаться между вкладками
алсо еще вопрос - есть ли какая-то live reload\live update фича? чтобы каждый раз не кликать на refresh в дереве баз
>>2402779 >как в каком-нить редакторе кода Мне вообще кажется что вся среда SQL застряла где-то в девяностых.
И вот эти деревянные редакторы времен ms-dos с одним активным окошком. И сам синтаксис SQL который полностью просирает всяким модно-молодежным LINQ Связи через допотопные библиотеки которые хуй знает сколько лет как устарели.....
>>2403079 Мальчик, РСУБД это одна из самых зрелых технологий на рынке сейчас. Испытанная временем и миллионами человекочасов. Это пикрил 1. Nosql это пик 2 - молодняк, лелеющий мечты переплюнуть Папку, но ему банально не хватает опыта и выдержки, максимум на что он способен - это перетянуть на себя одеяло в небольших кейсах.
>>2403642 Есть ещё Спарк и соответственно датабрикс (дельта Лейк). Если смотреть не как замену реляционным базам а дополнение, то Там учтены все ошибки сиквела и есть возможность создавать продукты (контроль версией, тесты и вообще девопс)...
>>2403079 Не могу определиться, то ли это троллинг тупостью, то ли зелень. > И вот эти деревянные редакторы времен ms-dos с одним активным окошком. Много редакторов видел? Или сделал вывод по одному посту на дваче? У меня даже ебаная встроенная консолька в IDE умеет во фреймы и анализ синтаксиса, что там специализированные редакторы. > И сам синтаксис SQL который полностью просирает всяким модно-молодежным LINQ Модные-молодёжные LINQ не умеют работать с базами данных напрямую и не умеют даже в UPDATE без ебли с нечитаемыми коллбеками. > Связи через допотопные библиотеки которые хуй знает сколько лет как устарели..... Мера устарелости - это возраст библиотек больше трёх лет, да? 50 лет прошло, дохуя технологий и языков взлетело и умерло, а SQL пережил их всех.
>>2403642 >Nosql это пик 2 при чем тут вообще эта хуйня? Я про само SQL, а не его отдельных представителей
>>2403977 > У меня даже ебаная встроенная консолька в IDE Ну покажи IDE для SQL которая бы умела что-то кроме подстветки (например хотя бы проверку типа поля, а то заебало открывать структуру таблицы чтобы узнать что там в ячейке, число/текст или вообще дата)
>>2403977 >а SQL пережил их всех. Я и не говорил что нужно чем-то заменить. Я говорил что оно не развивается. Там вон даже сишечка развивается, а ей сколько лет и она насколько проверена временем... А выходят новые стандарты, новые среды, новые инструменты...
То есть если сравнить как писался код на сишке в нулевые, и как он пишется сейчас - да оно несравнимо... (некоторые даже специально устраивали ретрочеленджи - писать код как деды в девяностые). Очень много удобных фич
А вот запросы на SQL как писались в нулевые, когда был бум развития (даже считай визуальные конструкторы появились типа Access), так до сих пор там и сидят
p.s. если что, у меня 33 уровень. Я считай уже дед, которому заебало каждую буковку писать в этаком блокноте вот уже больше 15 лет
>>2404656 для любителей орм - отдельный котел между любителями ебаться в гудок и "тесты потом напишу" орм нужна только для джун-мидло дебилов которые хотят накатать мвп без необходимости что бы он нормально работал
>>2404797 научитесь в инжиниринг бд что бы таких вопросов не возникало, тем более при твоей ситуации в вакууме тебя орм не спасет
>>2404809 я прям вижу джанго-макаку после трехнедельных курсов с юдеми, где для вас mvc это просто три папочки в корне проекта а хайлоад - больше одного запроса в секунду
Как хранить таблицу, с данными произвольной длины - в виде файла или в памяти так, чтобы можно было дописывать и удалять данные оттуда?
Первое, что приходит в голову, это тупо выделить память для хранения данных, и писать туда их прямо: >данные1 + данные2 + данные2 + ... и т. д. а также определить максимальное число записей данніх, и сделать индекс вида: >номер записи (фиксированное число бит) + (начало данных, фиксированное число бит) + длина данных (фиксированное число бит). И записать этот индекс в отдельном блоке выделенной памяти, или в отдельном файле.
Грузить в память - только индекс, а не сами данные, а данные уже - грузить по запросу.
>>2405593 Какой блять dynamic SQL? Хуйнул SQL-скрипт с нужными изменениями схемы с названием <следующий по порядку номер> + <номер задачи в джире для уникальности>, положил в специальную папку в проекте, тулза для миграции прошлась по названиям скриптов, увидела, что указанный скрипт не запускался, запустила, добавила запись в свою таблицу с историей, и всё заебись. Легко отслеживать историю изменений схемы, контролировать порядок наката миграций и отмести правки задним числом по хеш-суммам в таблице истории, чего зумерские ORM не умеют.
>>2405593 >Пенсия, как делать миграции будете? нахуя ее делать? Работает, не трожь. 20 лет ебашат базы. Просто нормально надо было нормализовать базы при проектировании
Кстати, работал с одной американской прогой по управлению электроэнергией на уровне электростанций... Там там разрабы нихуя не дрочились, нужно новое поле или поменять тип - заебомшим новую таблицу, а старую оставим на память
>>2405593 понятно что ты хотел сказать. но вот парадокс: в твоем молодежном GO миграционный инструментарий далек от явовского и тоже весьма примитивный. Его просто не успели хорошо развить. Однако никто не орет.
>>2404953 Тогда, надо как-то выдрать этот код, https://github.com/mono/mono/tree/main/mcs/class/Mono.Data.Sqlite и дополнить его .csproj и .sln файлами так, чтобы оно конпелировалось под .NET Framework 4.0 и компилировалось с помощью msbuild или Visual Studio 2010, без пердолинга с компиляцией mono, а то там хуй пойми чего содержится в бинарниках, которые вместе - занимают целый охуллиард байт.
>>2404939 Почитай про использование страниц для хранения таблиц в БД. А вообще советую ознакомиться с этой книгой. Много чего интересного почерпнешь про кишочки.
>>2406055 ...пока молодой-модный дата-инженер быстро клепает решения на современных фреймворках и поднимает зпшку в 3 раза за 2 года, ты будешь вникать в кишочки
>>2406074 Не будешь вникать в кишочки - не пройдешь собесы и не апнешь зпшку. Очевидно же. Или ты думал любому хую с горы дадут вакуху просто потому что он сказал "я юзал модные фреймворки, пук лол кек"
>>2406078 + Проходил недавно собес на сеньку бекендера в одну большую рашкованскую компанию. Половина вопросов не по питону: - Что будете делать если случайно удалили целый набор строк в Постгре? - Что такое "план запроса" Постгри и как работает bitmap scan? - Чем индексы Кликхауза отличаются от Постгри? - Как происходит процесс записи в очереди в Реббите и что там за "маски"? - Какие виды доставки есть в Кафке и какой для чего вы бы использовали?
>>2406078 на собесах спрашивают одно и то же плюс-минус а в те места, где дрючат по подкапотной хуйне, среднепчёлу не пройти так что можно, конечно, положить жизнь на доскональное изучение кишков. но есть и другой путь...
>>2405971 ты о каком молодежном ГО говоришь? вопрос про миграции в треде задали уже раза два-три в ответ на мой пост и одно я могу гарантировать почти точно - это выпускники Яндекс практикума написавшие хелловорд на Джанго и считающие что sql это еще один язык программирования
Давайте окончательно закроем вопрос про ПАРТИЦИИили СЕКЦИИ, если угодно носителям настоящего русского языка
Откуда взялось мнение, что их вообще нужно делать? Разве всевозможные стратегии index merge (я про mysql) не должны покрывать все ситуации, когда на практике часто используют партиции ?
>>2407751 Раньше были шаред хостинги, там был один сервер и одна дб, и для всех создавали директорию и базу данных, потом через анальную дыру на одном из сайтов (которых было миллион) залазили и рутали сервак. Сейчас может и актуально для такого мусорного говна, в соглашении там прописать - если вас въебут, мы ни при чём.
Не понял как это связано. Я говорю просто с точки зрения структуры. А так своя у юзера ДБ или нет он может даже не знать. Прямой доступ логин/пароль не дается никому
>>2407764 Если сейчас есть средства и ты уверен, что не въебут весь сервак, то делай. Тогда без такой уверенности делали и норм было. Можешь даже нанять специальных людей, которые въебут и посоветуют, как настроить чтобы такое не повторилось.
>>2405593 Это либо шизанутые пенсионеры на пхп либо гобляди, вот тут https://2ch.hk/pr/res/2286748.html недавно люто порвались как раз на тему орм и миграций, визжали что НИНУЖНО
>>2409697 Сырые sql - признак дремучего легаси или не шибко смышленых мартых на проекте
Я вот не боюсь сырых sql, не боюсь коннектиться к постгре напрямую и вертеть ее сырыми запросами. Но только блять в 99 случаях из 100 я заюзаю для этого pgadmin как и любой белый человек. Смекаешь?
>>2409977 >Сырые sql - признак дремучего легаси или не шибко смышленых мартых на проекте
это настолько абсурдное утверждение, что хорошим, схожего уровня контраргументом будет просто насрать на стол, но тогда получится тавтология. В ходе всей этой дискуссии я не получил ни один аргумент за орм на серьезный хайлоад проектах за исключением 1)Макакам сложно в sql/api/ижесними 2)Макаки не могут в миграции 3)Макак так научили на курсах 4)Манагерские макаки экономят на БДА и разрабах БД
Ты несешь ту же ересь - при чем тут вообще pgadmin?
>>2410277 В зумерских ORM не пишешь SQL-запросы напрямую, ты вместо этого скармливаешь библиотеке готовые объекты, а она одним ей ведомым образом генерирует для неё SQL-запросы, глядя, какие у сущности поля и какие у них типы. Когда пишешь как нормальные люди SQL-запросы, это и есть сырые SQL, они же native queries.
>>2410313 > что есть зумерская ORM ORM - это принципиально зумерское явление, поэтому, логично, все ORM зумерские. > в какой среде надо писать нормальные SQL запросы В любой.
>>2409977 Несмышленные мартыхи это может быть но редко. Наоборот, это очень ушлые и хитрозадые мартышки оптимизирующие свою job security. Потому что никто в здравом уме не полезет поддерживать этот идиотский ворох из конкатенаций, шаблончиков, ФОРМАТОВ. Если Кабан Кабаныч спросит «а почему так, СЫЧАЕВ?», Сычаев начнет бубнить под нос что-то невнятное про хипстеров (что мы и зоонаблюдаем в треде).
>>2410353 > job security От кого? От тех немногих шизиков, не осиливших SQL? > Если Кабан Кабаныч спросит «а почему так, СЫЧАЕВ?» Какой блять кабан, он что, твой код ревьюить будет?
>>2410076 Но 90% проектов вообще никакой не хайлоад. Орм и оболочки поверх них - топовая вещь для прототипирования. При нормальной разработке они никак не мешают миграциям. Ну и если подкапотное поведение орм тебе учить не хочется - еще есть статические билдеры sql с генерацией кода. >>2410331 >ORM - это принципиально зумерское явление хибер всего лишь вдвое младше оракла. ОРМ в продакшене уже больше 20 лет.
>>2410370 К кабану придет уже третий разработчик с жалобой на код Сычева, написанный на голом sql, потому что другие разработчики не хотят сами руками писать маппинг между табличками и кодом. И особенно не хотят читать десятки тысяч строк такого маппинга, написанного сычевым.
>>2410384 А ещё они могут прийти к кабану с жалобой на говнокод Сычёва в логике программы и потребовать юзать no-code разработку с программированием мышкой. Это ничем не отличается нежелания отдельных шизиков учить SQL.
>>2410391 Чтобы пользоваться orm на продвинутом уровне ты должен хорошо знать sql. Плюс orm задает тебе рамки не использовать всякие антипаттерны типа вьюх или логики в бд во всяких хранимках.
>>2410380 ты прав, для прототипирования - ок, для низконагруженного или индюшачьего приложения - тоже ок, да я сам использовал сиквелмодел для своего бота
но буквально в том году - довольно урча команда разрабов принесла мне сервис с 10k rps 300k dau и какими-то неистовыми инсертами с обращением к нашим субд c ебучей алхимией и с предъявами что наш сервис на слишком слабом железе что бы переваривать это богоподобное творение. То что они сделали говно с точки зрения 1)Архитектуры кода 2)Оптимизации 3)Интеграции
Потому что 1) ORM на больших проектах - это легаси, костыль. Оно рвет вообще всю структуру прекрасного ооп на мелкие куски. 2)Никто не хочет учить как это работает под капотом, оно и не нужно - хорошие оптимизированные приложения будет писать человек который может в оптимизацию запросов, в лучшем случае часть логики может даже перенести на субд 3)ORM - это явно бутылочное горлышко
>>2410402 >10k rps 300k dau и какими-то неистовыми инсертами с обращением к нашим субд c ебучей алхимией показатель, успешности орм, что сервис дошел до таких нагрузок. Вполне реально переписать только 20% критичных к нагрузке методов, причем не на голый sql а на какую-нибудь легкую оболочку, как минимум защищающую от инъекций. И если ты не гугель все эти ваши большие rpm решаются кешом. >в лучшем случае часть логики может даже перенести на субд лол, привет тестам и соответственно всей современной разработке с агилом и опять же жоб-секурити, как выше сказали. Заебешься искать нормального человека, кто сможет поддерживать логику в бд.
>>2410402 Чел причём тут орм, если у тебя бд как хлебушек работает. Если у тебя уловного индекса нет на таблицы, тебе sql не поможет. Орм позволяет в 90% случаев реализовать тот же функционал, но без легаси sql кода? который хуево портируется и рефакторится. От нагрузки начинает рваться не потому-что орм, а потому-что датамодель хуевая\бд не оптимизирована под запросы\сами кейсы запросов не проработаны.
Анон, ходил на собеседование стартап, и в бд нет ни индексов, ни связей между таблицами. таблиц порядка +-100. При вопросе что это такое, сказали что так и должно быть. Это была проверка на мою реакцию, или они рили там все пизданутые на голову? ах да, и ацесс токен они так же хранят в бд
>>2410973 Зависит от того что за бд. В аналитике это обычное дело, индексы это слишком дорого а в пределе и вовсе невозможно на больших данных.
Но я встречал в яшке оторванные констрейнты. При чем в задачах где целостность была важна, намного важнее производительности. Чисто потому что челик был долбаеб.
>>2410859 как круто ты продиагностировал мои бд, майн респектулен, а можешь подробнее немного об индексах рассказать - что это такое и с чем едят, я же, больше пяти лет проработав дба до этого, первый раз о них слышу от выпускника Яндекс практикума и что ты вкладываешь в понятие легаси? это сильное утверждение, которое надо чем-то подкрепить, да и прочую чушь
>>2411376 я был дба еще до того как ты узнал что такое базы данных, поридж в разработке уже больше 10 лет и такие олигофрены, любители обмазаться либами для умножения двух чисел, жидко обсираются на собесах
Чёт я не вкуриваю синтаксис запросов one-to-many в постгресе. Допустим есть условный профиль, у него может быть множество постов. Всё там по ключам в порядке и для нахождения всех постов достаточно айди профиля. Вот только как это реализовать в одном запросе, чтобы на выходе получить структуру типа IProfile { id: number, posts: [] }?
>>2412653 Нет такого синтаксиса, базы данных не знают ни о каких one-to-many, они умеют только джойны, а джойнам неважно, какую идею ты в них закладываешь, они тупо объединят записи по внешнему ключу. Забросить одним запросом из БД можно только один набор строк, и ты можешь в своём примере запросить посты по id профиля, если у тебя в таблице постов хранится id профиля. Если твоей структуре не важны данные самого профиля, ты просто складываешь посты в полей posts, а в поле id устанавливаешь id профиля, по которому запрашиваешь посты. Хотя это излишне, в posts и так каждая запись содержит id профиля. Если нужен не только id профиля, но и, к примеру, имя и логин, у тебя два варианта: либо делать ещё один запрос к таблице профилей, либо в том же запросе сделать джойн с профилями, и у тебя в ответе от базы будет набор строк с постами, но рядом с каждым постом будет дублироваться инфа о профиле, и уже на уровне приложения придётся их отсекать и раскладывать по разным полям структуры. И это ещё вопрос, что будет работать быстрее. Профили, например, часто кешируют и лишний раз в базу за ними не лезут.
аноначе пытаюсь разораться в foreign key, не могу найти как простую вещь сделать - допустим 2 таблицы, типа заказы и клиенты. на одно поле во второй таблице есть внешний ключ
так вот при заполнении строк второй таблицы что мне вводить в это поле с внешним ключем ? цифру?
т.е. этот внешний ключ для чего-то нужен вообще при заполнении? ( по смыслу конечно же понимаю для чего он, но в плане удобвства что он дает ?)
короче есть две таблицы в одной рок группы и есть там колонка группа_id, в другой рок альбомы и тоже колонка группа_id
например я уже заполнил таблицу - рок группы, у каждой группы есть номер теперь. например металлика это 1, хуяллика 2, и мастер хуяллики это 3.
и теперь заполняю таблицы рок альбомы: и там тоже есть колонка группа_id, собстна мне вместо альбома создавая строки писать для колонки группа_id что? название группы или просто номер из таблицы?
Можно ли перенести в реляционную субд из csv колонку, значение в которогой массив строк? Пример - ['Drama', 'Fantasy', 'Suspense'], жанры фильмов. Пробовал varchar[], и просто varchar, при копировании говорит что значение не валидно
>>2414270 А что тебе надо сделать-то? Если импортировать какой-то датасет, то вставляешь праймери запись и получаешь её ключ, потом вставляешь форейгны с ней. Если как макака вручную, то получаешь все праймери и даешь макаке форму, она вводит значение и отправляет на бек, там уже вставляется. Прям вручную в базу никто не вставляет. Теперь пиздуй читать книгу.
Насколько нормальная практика хранить перечисление строк в одной записи? Допустим я этот массив строк буду хранить в genres_tags, а в орм просто фильтровать, хотя пока хз каким запросом.
Кому не в падлу - оцените схему данных. У меня основная логика в том, чтобы выводить в шаблон теги с помощью <a></a>, и при нажатии на тег редиректить на ресурс с поиском, где выполняется запрос. Запрос, разумеется, я ещё не написал
>>2414379 > Насколько нормальная практика хранить перечисление строк в одной записи Хуевая практика - это нинужный полнотекстовый поиск + потом ебля, если тебе потом надо добавить-убрать что-то.
>>2414411 Я ни разу не видел датасета, где были бы все нужные мне колонки, так что пришлось данные брать с разных датасетов и писать несколько таблиц, связывая их Many-to-Many. >>2414255 Ахуенный constraint ты мне подсказал. Проверил на join, запросы работают как мне и нужно было
Сап. Хочу вкатиться в аналитико-макакинг, работать с данными. Освоил postgresql, практиковался на базе northwind. Проблема в том, что у меня нет ни малейшего представления о том, как работают с SQL в коммерции. Мне интересно, как данные взаимодействия пользователя с приложением попадают в базу данных, как сделать так, чтобы они туда попадали, как соединить сайт/приложение с базой данных и т.д, но я не могу найти нормальных книг/ресурсов для таких зелёных как я. Решил почитать книгу с ОП-поста, но там на первых страницах уже непонятная мне информация и названия(прикреплен скрин) и хочу найти что-нибудь попроще для понимания глобальной картины КАК работать с БД на практике. Стоит ли почитать К. Дж. Дейт. Введение в системы баз данных из оп-поста? помоги, анонче
>>2414871 > Мне интересно, как данные взаимодействия пользователя с приложением попадают в базу данных, как сделать так, чтобы они туда попадали, как соединить сайт/приложение с базой данных и т.д Если ты идёшь в аналитики, то и не будешь знать, т.к. этим занимаются программисты. Всё, что тебе остаётся - спрашивать у них, какие таблицы смотреть.
>>2414878 Как минимум я хочу понять, как это работает. Я сейчас в pgadmin умею создать только подключение к БД и писать запросы, остальное для меня не понятно. + не думаю, что кабану нужен будет АНАЛитик на фуллтайм, который умеет только чистить данные вилкой.
>>2415191 Установить к себе 1С:Предприятие, подключиться к их информационной базе и запускать запросы через интерфейс. Ну или подключаться напрямую и лезть в эту канализацию: https://its.1c.ru/db/metod8dev/content/1798/hdoc >>2415500 На рабоче, очевидно. В открытом доступе даже опенсорсные проекты обычно не держат реальные данные так, чтобы можно было подключиться и что-то селектнуть, это небезопасно и создаёт лишнюю нагрузку.
>>2415433 Используют. В качестве базы для небольших сайтов она неплоха, особенно для макак, которые используют cms-ки и не хотят запариваться с настройками СУБД (построю нужно таки тюнить)
Анон с БД по аниме. Сейчас получилась такая таблица, связи вообще убрал, т.к. как без title во второй таблице матчились не корректные данные - год выхода, теги и т.д.
Попробовал на такой бд разные джоины, например SELECT a.title_en, a.show_type, ri.* FROM database_anime as a JOIN database_releaseinfo as ri ON a.title_en = ri.title_en WHERE ri.tags SIMILAR TO '%(Shounen)%' AND ri.end_year IS NOT null
Вроде все работает, но мне кажется это какая-то хуйня, т.к. title_en повторяется в обоих таблицах, т.е. я фактически храню одинаковые записи в двух разных таблицах. Просто проблема в том, что эта таблицы на основе двух разных датасетов
>>2416094 Ага я походу какую-то хуйню сделать пытался.
Но title_en я убрать все таки не могу, потому что тогда не понятно, к какому title будуту относится тэги из второй таблицы. Если я добавлю связи по id т и удалю title_en, то субд просто приклеит к сущности с id = 1 из основной таблицы рандомные теги где id = 1.
Я сдела как подсказал анон выше (>>2414414) и даже написал, что все ахуенно. И так было до той поры, пока я не заметил что при запросе по title = 'Cowboy Bebop' джоинится release year: 2021
>>2415500 На самом деле учебные базы у них довольно неплохие, проблема не в самой базе, а в том что ты не знаещь что с ней делать. На этих базах можно тренировать довольно близкие к реальным кейсы.
Вроде северный ветер старая, у них ещё AdventureWorks есть
>>2416348 Если у тебя сервер тупо для круда и хранения данных, можешь сделать на сервере билдер запросов и обмазать каким-нибудь GraphQL. Но вообще да, если у тебя не круд и не публичное API, мутить по эндпоинту на сервере на каждое допустимое действие - основа безопасности, чтобы юзер мог вытащить только то, что ему разрешил администратор для тех или иных действий.
>>2416301 Вот я тебе накидал примерчик импорта денормализированного csv и использование many-to-many. https://ideone.com/OOz1ow Давненько не писал на питоне, лол.
>>2416301 ты джойнишь эти таблицы по их первичному что ли?У тебя совсем фляга свистит? определи какой-то фк в таблице господи, посмотел на твой первоначальный вопрос
тебе советовали сделать многие-ко-многим, а ты какую-то хуйню наворотил абсолютно бессмысленную, просто кровь из глаз
у тебя цель какая? хранить информацию о анимах и их жанрах?
какой смысл такого деления на таблицы?
Нахера ты хранишь список жанров в текстовом поле?
запили таблицу с тайтлами и со всей информацией о них, потом сделай справочник с жанрами и связывай их через линковочную таблицу, можешь еще на остальные поля типа эйджа, шоу тайпа вынести в справочники мелкие и все
А там, если правильно понял, мы берем мин/макс значения времени создания текущих записей и на этой основе с каким-то интервалом создаем набор значений.
И дальше джойним сюда то что нужно/отфильтровываем
>>2422207 Ну ёбана, с начала фильтруешь все 0, потом смотришь подряд ли идут цифры, если подряд закрашиывешь. Я что за интернет плачу чтоб считать читать чужые посты?
Блэт, а как заполнить все строчки како-либо таблицы согласно условию? Вот как мне нужно обновить все записи:
JЕсли Cуществует запись ENVIRON с условиями:
STORE.ROLLOUT_ENV= ENVIRON.NAME И ENVIRON.LVL <= CURRENT_LVL
Тогда STORE.USED = 1
Иначе STORE.USED = 0
Тут надо как-то апдейтиться из джойна? Я могу конечно выбрать все записи из таблицы с помощью go и потом итерироваться по ним через for но это уебанство, ндао бы за 1 sql-запрос это порешать
>>2336742 (OP) Есть ли какая-то IDE для MySQL с урезанным функционалом для новичков чтобы могла наглядно строить таблички или все эти связи между табличками как Воркбенч? Может есть какой-то хидден гем в вашей области для новичков?