Это копия, сохраненная 26 октября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ссылки:
- https://www.w3schools.com/sql/
- https://www.postgresqltutorial.com/
- https://www.oracletutorial.com/
- https://learnxinyminutes.com/docs/sql/
- https://metanit.com/sql/
- MongoDB: https://metanit.com/nosql/mongodb/
Задачи:
- https://www.sql-ex.ru
- http://sql-tutorial.ru/
- https://www.codewars.com/?language=sql
Видосики:
- Плейлисты по разным СУБД: https://www.youtube.com/c/SQLDeveloperBI/playlists
- https://www.youtube.com/watch?v=EHvzvwAv7RU&list=PLY7PmJJFH5nT-lbFKxfbp3rw5BBuq5Azo
Литература:
- Томас Кайт. Oracle для профессионалов
- https://postgrespro.ru/education/books/dbtech
- Алан Бьюли. Изучаем SQL. - про MySQL
- К. Дж. Дейт. Введение в системы баз данных
ETL, OLAP, DWH и другие умные слова:
- https://www.youtube.com/watch?v=WPZuzDJXs-Q&list=PLhhjwMYxzolhP29LSPPwORVQxJX5OjYix[РАСКРЫТЬ][РАСКРЫТЬ][РАСКРЫТЬ]
- OLAP DAX Power BI: https://www.youtube.com/playlist?list=PLhhjwMYxzolhXuySjLR2_n-xb6VvWnjju
Прочее:
- https://dbdb.io/
- https://db.cs.cmu.edu/
- https://www.youtube.com/channel/UCHnBsf2rH-K7pn09rb3qvkA/playlists
- Сравнение диалектов SQL: http://troels.arvin.dk/db/rdbms/
- Как БД работают изнутри: https://habr.com/ru/company/mailru/blog/266811/
FAQ:
Q: Нужно ли знать английский?
A: Да.
Q: Что лучше, SQL или NoSQL?
A: По задачам.
Q: Вопросы с лабами и задачками
A: Задавай, ответят, но могут и обоссать.
Здесь мы:
- Негодуем, почему шапка - говно, и предлагаем коллективному ОПу идеи, как её улучшить.
- Разбираемся, почему PostgreSQL - не Oracle
- Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
- Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе
- Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно.
Поехали!
select @op = 'faggot'
select @op
И типа когда даёшь новую запись в базу данных, то оно же начиная с него будет работать, а постов до него уже не будет
Способов много. Например, незадолго до гета впилить в код создания поста проверку, где проверять значение счётчика, и если следующее значение будет гетом, то инсертнуть модгет. Либо повесить аналогичный триггер на INSERT в таблицу постов.
> Либо повесить аналогичный триггер на INSERT в таблицу постов.
Вроде же как в триггере нельзя делать insert в ту же таблицу на after insert которой он сам и дергается.
>Номер это же первичный ключ
Если первичный ключ не написан как дефолтный генератор, то там вполне можно своё значение вставлять. Да и в генератор можно своё значение впихнуть, если сильно надо.
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
RTR-L
crypto isakmp policy 1
encr aes
authentication pre-share
hash sha256
group 14
!
crypto isakmp key TheSecretMustBeAtLeast13bytes address 5.5.5.100
crypto isakmp nat keepalive 5
!
crypto ipsec transform-set TSET esp-aes 256 esp-sha256-hmac
mode tunnel
!
crypto ipsec profile VTI
set transform-set TSET
interface Tunnel1
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI
RTR-R
conf t
crypto isakmp policy 1
encr aes
authentication pre-share
hash sha256
group 14
!
crypto isakmp key TheSecretMustBeAtLeast13bytes address 4.4.4.100
crypto isakmp nat keepalive 5
!
crypto ipsec transform-set TSET esp-aes 256 esp-sha256-hmac
mode tunnel
!
crypto ipsec profile VTI
set transform-set TSET
interface Tunnel1
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI
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
6. Обеспечьте настройку служб SSH региона Left:
RTR-L SSH
ip nat inside source static tcp 192.168.100.100 22 4.4.4.100 2222
RTR-R SSH
ip nat inside source static tcp 172.16.100.100 22 5.5.5.100 2244
SSH WEB-L
apt-cdrom add
apt install -y openssh-server ssh
systemctl start sshd
systemctl enable ssh
SSH WEB-R
apt-cdrom add
apt install -y openssh-server ssh
systemctl start sshd
systemctl enable ssh
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
RTR-L
crypto isakmp policy 1
encr aes
authentication pre-share
hash sha256
group 14
!
crypto isakmp key TheSecretMustBeAtLeast13bytes address 5.5.5.100
crypto isakmp nat keepalive 5
!
crypto ipsec transform-set TSET esp-aes 256 esp-sha256-hmac
mode tunnel
!
crypto ipsec profile VTI
set transform-set TSET
interface Tunnel1
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI
RTR-R
conf t
crypto isakmp policy 1
encr aes
authentication pre-share
hash sha256
group 14
!
crypto isakmp key TheSecretMustBeAtLeast13bytes address 4.4.4.100
crypto isakmp nat keepalive 5
!
crypto ipsec transform-set TSET esp-aes 256 esp-sha256-hmac
mode tunnel
!
crypto ipsec profile VTI
set transform-set TSET
interface Tunnel1
tunnel mode ipsec ipv4
tunnel protection ipsec profile VTI
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
6. Обеспечьте настройку служб SSH региона Left:
RTR-L SSH
ip nat inside source static tcp 192.168.100.100 22 4.4.4.100 2222
RTR-R SSH
ip nat inside source static tcp 172.16.100.100 22 5.5.5.100 2244
SSH WEB-L
apt-cdrom add
apt install -y openssh-server ssh
systemctl start sshd
systemctl enable ssh
SSH WEB-R
apt-cdrom add
apt install -y openssh-server ssh
systemctl start sshd
systemctl enable ssh
Можно ли это сделать чисто на скул-запросе? Пока что у меня только мысль вытаскивать всё как есть, и уже на бэке писать php-скрипт на регулярках, чтобы убрать лишнее.
Всё, сам нашёл. Регексп прямо в майскуле: REGEXP '[0-9][0-9][.][0-9][0-9]'
В общем есть SQL проект в Visual Studio под платформу "SQL server 2014", он используется для генерации скрипта через publish. Этот скрипт добавляет в базу данных кучу таблиц и данных, но он подходит для mssql, а как сделать так, чтобы он подходил для sqlite? Пишу приложение и хочу отойти от зависимости от сервера базы данных, при этом с минимальными изменениями.
> YDB
ВЫШЛА ВЫШЛА ВЫШЛА ВЫШЛА ВЫШЛА ВЫШЛА ВЫШЛА ВЫШЛА
Комментарии анонов будут? Выглядит буквально безальтернативно. Буквально нет альтернатив.
Хз даже, есть вообще хоть одна БД как альтернатива?
FoundationDB не выглядит как альтернатива, кста
И где инфа по релизу? Подозрительно тихо выложили в период, когда можно срубить хайпа на импортозамещении.
> срубить хайпа на импортозамещении
Опоздали, уже все решили переходить с оракла на постгрес, и никого не остановят новости о плохо обкатанной в проде поделке, даже если она действительно такая идеальная и безальтернативная. Никто не хочет быть бета-тестером.
>Комментарии анонов будут?
НИНУЖНО.
Ничего изнутри Яндекса не нужно обычному анону.
Ничего.
Практическое обоснование : Стоунбрейкер уже давно написал VoltDB, но не может на ней заработать. Люди просто покупают самый большой IBM PC-совместимый ПК и крутят на нем свои СУБД.
Тупо выгоднее, проще, надежнее.
На петухабре же статейка. https://habr.com/ru/company/yandex/blog/660271/ Ну и так по новостным раскидали, правд я прочитал только сейчас.
> Подозрительно тихо выложили в период, когда можно срубить хайпа на импортозамещении.
Стесняются быть русским мб? Хз вообще. Технология-то вообще норм, то что нужно.
>>343333
> Никто не хочет быть бета-тестером.
Судя по заверениям у них есть свои тесты, скоро мб Jepson сделают. И ДБ используется в своих проектах, если они не пиздят. Т.е. как минимум она полностью рабочая и в продакшене работает.
Если там они не напердолили тысячи бесполезного функционала, то я точно заюзаю на ближайшем проекте. Хотя FoundationDB мне больше нравится, она проще, но там самому придётся кучу говна писать, YDB будет быстрее поднять, наверное, особенно если там встроенная inmemory есть.
>>343371
> НИНУЖНО.
Ну как это нинужно. Вот мне нужны кластерная хуйня с большой потанцевальной нагрузкой. Какие варианты вообще есть? Кроме FoundationDB, офк.
> VoltDB
Это же жаба. И там есть ограничения функционала, YDB вроде полностью попенсорс (но это не точно).
>а как сделать так, чтобы он подходил для sqlite?
Открывешь референс по кейвордам для mssql и смотришь, какие из них реализация SQL стандарта, а какие - инхаус костыль. Составляешь таблицу из кейвордов по категорям реализация/костыль, смотришь как реализованные кейворды реализованы в sqlite и пытаешь переписать запросики.
А потом идёт лютая ёбля с переписыванием инхаус костылей на костыли скулайта.
>Пишу приложение и хочу отойти от зависимости от сервера базы данных, при этом с минимальными изменениями.
Маняфантазии манагеров. Поезд волшебной универсальной СУБД ушёл и оставил за собой тонны легаси с диалектами. А рефакторить БД - не бэк/фронт переписывать, тут надо вкладывать усилия, время и деньжищи. Причём в обычную задачу спринта это не оформишь, да и не разбивается толком на подзадачи.
>Ну как это нинужно. Вот мне нужны кластерная хуйня с большой потанцевальной нагрузкой. Какие варианты вообще есть?
Нет, не нужна она тебе, поверь.
Кабанчик тебе нужен нормальный. Архитектор там и админ бд. Они тебе расскажут как решить эти задачи.
ВТБ вон на одном сервере mssql спокойно справляется. А твое говно до туда не дорастет
Только данные неоперативные нужно подчищать и перегружать в другие субд
>Нет, не нужна она тебе, поверь.
Надо, вася, надо. Других вариантов нет. Либо делать как нужно делать, либо сосать. Сосать я не хочу.
>Кабанчик тебе нужен нормальный. Архитектор там и админ бд. Они тебе расскажут как решить эти задачи.
Вероятнее всего они обоссутся, потому что альтернатив-то YDB и нет особо. Покрайней мере я так и не смог придумать. Хотя в целом можно через FoundationDB, но она сложнее. Либо через порезанные версии с интерпрайсом, ну тут это залупа конская, пошли они нахуй любители денежек.
>ВТБ вон на одном сервере mssql спокойно справляется. А твое говно до туда не дорастет
Не, я планирую очень много трафона гнать. Прямо очень много. Миллионы/сутки или вроде того. Иногда хайповые нагрузки миллион/час.
И аналитику туда ещё ебануть, а чтобы отвал бошки от поддержки не случился - всё на единой БД напердолить.
Мне нужно. Если тебе не нужно - иди делай своё говно без трафона и не отсвечивай.
Тебе нужно чтоб подрочиться с модным баззвордом для поднятия ЧСВ, для твоих реальных задач нет необходимости в этой хуйне
Пчел, тут только ты нафантазировал что мне нужно, ты в курсе? И продолжаешь влажно фантазировать, про чсв, про задачи, про то что мне нужно, про каких-то кабанчиков.
Ты таблетки не выпил, что столько фантазий ебанул в тред?
есть поле nvarchar max, нужно по нему найти все записи с определенным значением
Microsoft SQL Serevr
совершенно точно можно сказать одно - в разрезе нескольких следующих лет ты обязательно где-нибудь ошибешься. просто потому что предвидеть будущее нельзя.
Отсюда и мысль, что тебе скорее всего не нужна сырая БД от Яндекса. Ведь как-то наша айтишечка развивалась все эти годы.
Хочешь вложить свое время и не получить ничего - пожалуйцта.
>ВТБ вон на одном сервере mssql спокойно справляется.
Это откуда информация? Я там работаю и только лично мне приходится ковыряться в 4 базах, ещё штук про 5 я слышал, а сколько их всего вообще ебу.
> совершенно точно можно сказать одно - в разрезе нескольких следующих лет ты обязательно где-нибудь ошибешься.
Да я уже, десятки раз обосрался и ошибся. По этому работаю в нескольких направлениях.
> просто потому что предвидеть будущее нельзя.
Можно конечно. Причины имеют следствия, именно так составляются новучные теории. Они предсказывают будущее. Другое дело точность теорий. моя теория не очень точная, но предсказать хоть что-то можно всё же
> Отсюда и мысль, что тебе скорее всего не нужна сырая БД от Яндекса.
Альтернатив практически нет. Вообще нет никаких альтернатив YDB, буквально ноль. Единственная проблема которая там есть - производительность может быть не такой большой как у foundationdb и у самописного говна.
> Ведь как-то наша айтишечка развивалась все эти годы.
Она как раз и развивалась в направлении таких БД.
> Хочешь вложить свое время и не получить ничего - пожалуйцта.
Теории, понимаешь? За каждым шагом и мыслью должны лежать теории. Если хочешь что-то получить - нужно иметь теорию, которая проверена на эмпирических данных.
с надежного места, епта.
но проверить ты ее сможешь через 10 лет, когда форум sql.ru снова откроют.
А что, эта информация не кажется тебе правдоподобной?
Ну оцени банковским способом риски эксплуатации хуй знает какой базы от яндекс для транзакций.
>Альтернатив практически нет
еще раз, альтернатива на поверхности:
эксплуатируешь любую традиционную бд на одном большом сервере для OLTP и непротиворечивых данных, таких как остатки на счетах и транзакции и несколько вторичных, в том числе аналитических, для всего остального.
И что делать если нагрузки внезапно скакнут, "пожалуйста пожите, бд йобнулась"? Это несерьезно.
Конечно, это всё в рамках манятеорий, но я изначально делаю под огромный траф. Если оно будет работать - оно должно отрабатывать без хуйни и проблем. И выжимать нишу я хочу до последнего юзверя.
И счета, и аналитика, и данные будут на отдельных кластерах, чтобы в случае чего мог просто расширением аренды покрыть все проблемы.
YDB (или любое другое подобное решение) позволяет совершить плавный переход от лоутрафа до миллиона rps. Может конечно оно какое-то лажовое, тестов мало, jepsen нету, но. Нету альтернатив. Просто нету. Уже давно ищу и ничего нет.
>И что делать если нагрузки внезапно скакнут, "пожалуйста пожите, бд йобнулась"? Это несерьезно.
Ничего.
Поставишь кабанчика перед фактом, что планирование не удалось, но хорошо что вам вообще удалось свою идею реализовать и настолько сильно вырасти.
>YDB позволяет совершить плавный переход
А может и не позволяет.
>(или любое другое подобное решение)
Вообще-то, другого такого же нет по определению. В Яндексе все уникальное.
>Ничего.
В смысле ничего, пользотели-то уходят. Деньги тоже утекают. Каждая секунда простоя - очень хуево.
>Поставишь кабанчика перед фактом, что планирование не удалось, но хорошо что вам вообще удалось свою идею реализовать и настолько сильно вырасти.
Это мои проекты, лол, ты что, на кабанчиков работаешь в 2к22 году? Ебать ты. Мелкобуржуа нужно становиться.
>А может и не позволяет.
Позволяет, это же кластер.
>Вообще-то, другого такого же нет по определению. В Яндексе все уникальное.
Ну так покажи мне полностью опенсорс кластернуб БД, без интерпрайза и ограничения функционала. Единственная что есть - foundationdb. Всё остальное с ограничениями. Постгрес есть, но там просто реплики и это вообще не то.
>мелкобуржуа
>МИЛЛИОНЫ РПС!!!!!!!
Чел... ты хотя бы прототип запили для начала на знакомых технологиях, чтобы понять, у тебя будут вообще клиенты или нет...
Ну вообще не если, а когда. Для этого открыл сразу несколько проектов и несколько копий существующих. Когда-то будет, главное сделать превосходство как минимум на уровне софта.
А вы посвящаете какое-нибудь время на развитие? Я уже года два прям вот чтоб самостоятельно, нихуя не делал.
На питухоне всякое делаю, щас вот спарк пытаюсь палкой тыкать, каждый день не получается, но раз в 2-3 дня вполне. Щас читаю кабанчика с оппика.
Хочу с заданным интервалом парсить количество вакансий на хх.ру по тому или иному запросу. И хранить это дело в бд.
Как лучше хранить? Я ничего не придумал лучше чем
id | запрос | количество
Норм будет или не очень?
как минимум ты дату проебал
Мы пишем в реляционку (постгрес) события. Другой воркер какой-то их вычитывает и удаляет. То есть грубо говоря это очередь.
На таблице есть индексы.
Запись достаточно интенсивная (сотни/тысячи в минуту), удаление так же.
Что будет проиходить с течением времени? Будет ли как-то деградировать эта система?
Я не знаю как именно, но предполагаю, что индексы и таблицы будут фрагментироваться, что может очистка удаленных записей будет создавать какую-то проблему
Наверное этот вопрос еще и специфичен для конкретной СУБД. Подскажи, что погуглить на эту тему? И поддается ли этот импакт (если он есть) рассчетам?
Ой блять, так и знал что придет дегенарт, который решит выебнуться знанием btree.
Только ты ошибся, дятел, btree - от слова balanced, а не binary.
Мой говно-код.
https://pastebin.com/AYQGYKcM
Пик, самое задание.
выходы в море тоже нужны правки с датой возвращения, но это главное заполнил таблицу для примера
SELECT * FROM tasks
WHERE tasks.Name LIKE ?
AND tasks.Date BETWEEN ? AND ?
я не ошибся, а упростил изложения. вопрос же ебанутым образом поставлен.
И, получается, ты в целом знаешь как устроены базы данных, но при этом ебешь нам мозг, задавая ебанутые некорректные вопрос?
ну и говнюк же ты.
В функции ты можешь указать значения по умолчанию для дат, какое-нибудь 01.01.1900 и 01.01.9999, в рамках одного запроса я не встречал такой функционал в базах с которыми работал, по-моему так не делается.
Сперва подумай, как ты будешь такой запрос кэшировать.
Собирай секции where на уровне кода и небеи голову
Говнокод.
https://pastebin.com/XbKqCU8T
Пики: вид представления и 2 разных ошибки.
>нахуя у тебя названия таблиц и столбцов на кирилице?
Как сказали сделать, так и сделал. Не моя прихоть.
НЕ анонас. АНОНАСИЩЕ! Спасибо огромное тебе! А есть ли возможность как то переписать представление, чтобы потом в where к нему обращаться как я это делаю т.е. просто where "Улов"."ID_рыбы" = up10_semga?
Это так не работает, не может значение поля быть равно таблице или вьюхе, оно может быть равно значению поля таблицы или вьюхи которое тебе надо селектнуть подзапросом.
Странно, вроде где то в примерах в интернете видел, что обращались просто к вьюхи без полей. Но может там вью сделана как то по особенному. В любом случае, спасибо большое!
Можешь помочь еще с одной вещью?
https://pastebin.com/N3Z8iwVX
Пытаюсь заполнить таблицу выходов в море. Поле выходов в море заполняет рандомной датой. Дальше надо заполнить дату возвращения путем рандомом например от 3 дней до 7 в примере у меня, пока просто затычка одна для всех. И вот тут начинается проблема. Пытался разными способами но не получается, постоянно ругается на то, что нельзя складывать timestamp+timestamp, date+date и т.д. Каким образом это организовать? cast не помогал, все равно ругался
> путем рандомом например от 3 дней до 7
Имею ввиду,дата возвращения = дата отправления + рандомом например от 3 дней до 7.
>нельзя складывать timestamp+timestamp, date+date
Ясен хуй нельзя, как ты сложишь 05.05.2022+05.05.2022? Число прибавляй, timestamp+1 добавляет один день, если надо добавить месяцы то через add_months, загугли.
1) На каких языках взаимодействуют с базами в it среде в реальности. Я не о самом SQL, а неком C# с Entity Framework или Python Psycopg2. Есть ли какие-то фавориты?
2) Встречали ли вы доступное объяснение по работе с бд. Я не о книжках где учат синтаксису, более интересуюсь эксплуатацией самих бд. Как проектируют бд? Рисуют схемку в drawIO, а потом перегоняют в СУБД или создают на каком-то ЯП с помощью фрейм ворка или либы? Оценивают ли работу бд по каким-то показателям? Нормально ли, что в бд могут быть несвязанные таблицы, просто табличка, из которой периодически запрашивают какие-то данные?
Вопросы могут быть странными или тупыми. Я не it-шник поэтому решил спросить тут, ибо большинство инфы это учу SQL за 300 ноаносек.
> На каких языках взаимодействуют с базами в 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) Встречали ли вы доступное объяснение по работе с бд
Дейт. Хз что ты там называешь доступным.
>Нормально ли, что в бд могут быть несвязанные таблицы
это НЕ "нормально", в смысле нормальных форм по Дейту и компании.
Но этот же самый Дейт неоднократно напоминает, что теория нужна для того чтобы лишь только ориентироваться на нее.
>В некоторых ORM изобретают высокоуровненвые языки, похожие на SQL
А зачем на это тратить время разработки, если можно дать напрямую SQL? Ограничить возможно для защиты от дурака?
>через различные инструменты миграции.
А что за миграция? В моем понимание это перенос данных из исходника в БД, или из БД №1 в БД №2. Это исходя из смысла слова.
>>351002
>Хз что ты там называешь доступным.
Другой анон упоминал про ORM. Вот есть где про это посмотреть/прочитать? Вообще хотелось бы посмотреть какой-то курс универский на подобии Хирьянова.
>На каких целесообразно писать.
Правильно ли я понимаю? Если компания запускает свой условный проект с использованием БД и управляю ей помимо СУБД выбранным мною языком и ей будет все равно какой это будет язык лишь бы можно было найти толкового программиста?
про ORM фундаментального почитать особо нечего. А поверхностных статей полно.
Может быть есть на английском не переведенные книги, но попробуй еще начальные главы из книги "Java Persistence API и Hibernate" (не обязательно становиться грибом-джававиком чтобы понять эти главы)
>Правильно ли я понимаю? Если компания запускает свой условный проект с использованием БД и управляю ей помимо СУБД выбранным мною языком и ей будет все равно какой это будет язык лишь бы можно было найти толкового программиста?
здесь я сдаюсь. Просто непонятно что ты спрашиваешь.
Реально какой-то разрыв в понятиях у тебя и у программистов.
Выбор и основного языка и СУБД являются важными.
Возможно ты имел ввиду такое :
позволяет ли ORM в языке абстрагироваться от деталей СУБД настолько, что можно легко сменить СУБД ?
ответ - ДА (но нет)
> >В некоторых ORM изобретают высокоуровненвые языки, похожие на SQL
> А зачем на это тратить время разработки, если можно дать напрямую SQL? Ограничить возможно для защиты от дурака?
Эти языки более переносимы и транслируются в разный SQL для разных БД. Используются они только в сложных случаях, обычно хватает стандартных методов на уровне прикладного языка.
> А что за миграция? В моем понимание это перенос данных из исходника в БД, или из БД №1 в БД №2. Это исходя из смысла слова.
Миграция схемы БД. Так называют запуск SQL-скрипта, изменяющего схему, ещё так могут называть сам скрипт.
>позволяет ли ORM в языке абстрагироваться от деталей СУБД настолько, что можно легко сменить СУБД ?
Обычно впрочем это выливается в требование знания SQL, основного языка ORM и детали реализации самой ORM.
это сложно понять, но простые в использовании инструменты в ряде случаев требуют чтобы ты понимал как все работает под капотом. где-то этого не требуется, но точно не в бекенде
>>Правильно ли я понимаю? Если компания запускает свой условный проект с использованием БД и управляю ей помимо СУБД выбранным мною языком и ей будет все равно какой это будет язык лишь бы можно было найти толкового программиста?
возможно, ты хотел спросить:
я является ли ORM настолько доминирующей технологией, что позволяет нанимать просто программиста без знаний конкретного языка и ORM чтобы потом переключаться между языками - и снова ответ ДА (но нет).
Опыт работы с ORM конечно пригодится в любой другой библиотеке в любом другом языке.
но очень уж много нюансов. Где-то миграции вручную пишут на SQL до сих пор ( да , я вас гошников имею ввиду)
Скажем так, стоит задача разработать БД + прикрутить форму для ввода критериев для дальнейших запросов. Вот я пытаюсь понять, какие критерии помимо нормальных форм применить. На каком языке лучше писать форму - Шарп или Питон. Питон по мне проще, но он медленнее. Но вряд ли в БД будет больше сотни запросов. И вот как это все запилить и потенциально дать доступ другим сотрудникам. Если с формой понятно, то с БД нихуя нет.
А то можно подумать ты дохуя языков знаешь?
я тебя раскрыл, ты - кабанчик. можешь только комбинировать псевдознания, но работать и писать программу тебе западло.
Еще хуже если "аналитик".
Тьфу на тебя. Никакого серьезного совета не жди.
Вот то, что я высрал: https://www.codepile.net/pile/PVLwp0yl
На выходе получаю за щеку. mysql.connector.errors.DatabaseError: 2006 (HY000): MySQL server has gone away
Проблему гуглил. Либо база большая, либо кривые руки и говнокод. База у меня с 3 записями, так что выбор небольшой. Очень надеюсь на вашу помощь дабы понять обосрался я в самом запросе или мне съебать в питон тред на растерзание местному клоуну
блять какая нахуй база данных, ты даже линк нормально приложжить не можешь, пиздуй улицы подметать
Там пусто потому что я разобрался сам и удалил код с поста, а ты можешь пойти нахуй. Чем больше общаюсь с айтишниками, тем больше понимаю, что их большинство составляют затравленные чмошники или агрессивные гниды вроде тебя. За год в pr видел человек 5 нормальных и доброжелательных ребят. Как вы друг друга терпите, пиздец
Код:
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;
При замене этого говна
>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, затем запрошиваю все все ответы на него, затем на каждый ответ запрашиваю еще ответы и так до конца. Но там образом запросов на сервер получается очень дохуя и я понимаю что это блять бред (или нет?).
Мне стоит пересмотреть саму таблицу? Разбить на несколько? Использовать правильный запрос? Как получить рекурсивно все ответы, а с ними и ответы на ответы за запрос, или это не возможно? Помогите, будьте добры, гугл не помог, с меня как всегда.
пикрандом
Вообще не близкая мне задача, может под каждый "корневой" тред создавать патрицию и добавлять в каждый пост внутри ссылку на него? Так хотя бы он не по всей "борде" будет смотреть из-за каждого поста.
>>354964
Разбирать что ты там написал я в рот ебал, без негатива, ответ на пикче, вроде быстро решил, больше пытался с постановкой задачи разобраться, если по моему скрипту вопросы будут - завтра отвечу.
В том и проблема, что ORM добавляют оверхеда к знанию стэка, причём необязательно, что эти знания будут полезны за пределами этой ORM. Самый очевидный пример - множественные инсерты. Банальная операция, если оперируешь SQL выражениями с интерполяцией, но лютый пердолинг в ORM. Не говоря про всякие хитровыебанные джоины/вьюхи/партишоны.
>Поставил перед собой задачу сделать форум-борду с бесконечной вложенностью комментариев как на (((реддите)))
Реддит - говно в этом плане. Все сорта вложенных комментариев - рак как в плане организации данных, так и в плане UX.
parent_id int REFERENCES posts
Посты с нулом заместо parent_id - ОП-посты. На реддите один хуй все комментарии привязаны к посту.
Репорт.
nextval возвращает незанятый id в последовательности.
Подробнее объясню, что мне нужно:
есть таблица
id | name
1 | Vasyan
2 | OP-hui
4 | test123
id - serial. Мне нужно из id = 1 получить 2 и из id=2 получить 4.
Спасибо!
Помоги, пожалуйста, понять или направь куда копать.
Дано:
Таблица 1 (Поля: Договор, Продукт)
Таблица 2 (Поля: Договор, Выручка)
Задача:
вывести те договора, что имеют выручку и нет в продуктах интернета и кабельного тв.
Моё решение на пик. Я нарушил синтаксис SQL?
могу ли я не использовать оператор where, а вместо этого добавить это условие под оператор and?
1. Идентификаторы пишутся не в 'одинарных' кавычках, а в "двойных". В 'одинарных' только строковые константы.
2. После join идёт таблица, а не столбец, так же, как таблица после from. Столбцы только в on-части.
3. where должен идти в самом конце после всех джойинов.
4. Вообще, можно сравнение выручки с 0 засунуть в on-часть, как ты сделал с Таблица1.Продукт, а можно и наоборот их все вынести в where, а в on оставить только равенство договоров. В этом случае разницы не будет.
Спасибо за советы и подсказки!
Обычно на сессию. Но вроде можно и на бд проставить в опциях самого сервере.
Откуда нам знать, надо тебе или не надо?
Это тебе не эксель. Можешь создать вьюху, в которой будешь подсчитывать значение по нужной тебе формуле, но в такую вьюху ты ничего не сможешь инсертнуть.
Либо делай как нормальные люди на уровне приложения при получении данных из этой таблицы.
Мы на хую вертели твои авиабилеты с отелями, родной, если это лаба из универа и всё надо в базе делать - google=>create view. Если ты что-то приличное пытаешься склепать - считай на уровне приложения.
Или тогда это и нормальным применениям помешает
Не используются, какой смысл? Если ты можешь подменить хеш, то можешь и цифровую подпись. Не будут делать так, чтобы одно хранилось в надёжном хранилище, а другое в ненадёжном. Подписывают обычно что-то такое, что выгружается из одной системы и загружается в другую, например, какие-нибудь отчёты.
Студент может учиться одновременно в нескольких группах. Где-то платно, где-то на бюджете как пример. Как связать это? У меня неправильно one to many в payment (пик 1)
Моя идея: сделать таблицу Seat - место (пик 2), но выглядит как-то странно, одни ключи. Так делают вообще?
Да, делают, многие-ко-многим так и реализуется.
>выглядит как-то странно, одни ключи. Так делают вообще?
А по-другому никак. Можешь добавить даты начала/окончания действия записи.
В постгресе есть социальный тип колонки для жсонов, но по хорошему надо нормализовать структуру и написать скрипт для парсинга этой жсон и загрузки в таблицы.
То есть можно скриптом перевести эти нереляционные даннные в связанные таблицы?
Просто я не совсем понимаю, как с этими лучше обращаться. Будет ли вообще профит от такой операции или можно так же в json хранить?
Смотря что за данные. Если их немного, либо ты этот жсон просто хранишь и не обрабатываешь, можно оставить жсон. А если много, либо приходится часто обновлять отдельные поля, лучше несколько нормализованных таблиц.
Это относительно немного. Может и не нужен постгрес, достаточно sqlite.
А где ты схемку рисуешь?
Партиционируй, если запрос виснет.
Когда запросы появляются на срез данных, который удобно партицировать (дата например), и происходит вис
если твой критерий размер - то ни с какого.
нет никакой причины использовать партиции, если индексы работают.
Думай о партиционировании как дополнительном измерении отсечк и данных в условиях когда оптимимизатор обосрался.
Обсирается он довольно редко.
Просто сей странный прием экономит разработчикам время потому что их кабанчик подгоняет. А нормальному ДБА он редко нужен.
если твой критерий размер - то ни с какого.
нет никакой причины использовать партиции, если индексы работают.
Думай о партиционировании как дополнительном измерении отсечк и данных в условиях когда оптимимизатор обосрался.
Обсирается он довольно редко.
Просто сей странный прием экономит разработчикам время потому что их кабанчик подгоняет. А нормальному ДБА он редко нужен.
будет ждать пока блокировка не пройдёт. По идее в MSSQL есть механизм борьбы с дедлоками, но работает так себе.
Вот мб будет полезно, из личных заметок:
https://pastebin.com/Zw21ftdE
>Есть ли какой-то таймер ожидания, и если он выйдет что произойдет?
Результат не закомитится, драйвер вернёт ошибку, которую приложение обработает.
Это если лочить с NOWAIT.
> с дедлоками
Но это не дедлок. Просто ожидание процесса, который что-то делает, пусть даже завис. Дедлок это взаимная блокировка.
Так вот возник вопрос: как поднять бд?
Ну вот создал я бд с таблицами скажем в Постгресе, а дальше что? Как блять ее запустить то? Либа просит ей скормить url или uri от бд, значит нужно ее запустить как? и найти адрес где его взять?.
Это называется строка подключения. Это особенность скорее не СУБД, а используемых драйверов/коннектеров, через которые ты из своего языка подключаешься к БД. Например, в джаве JDBC, и строка там такая:
jdbc:postgresql://host:port/database
то есть после того как я создам бд мне достаточно указать строку подключения к ней и все заработает?
Да, просто вставляешь строку и всё само делается.
Уже второй месяц пишу микросервис на нем. Сперва пользовался оберткой из spring data. Но теперь есть пара запросов на cypher. Но сущности пока всего три. И мне анонсировали еще штук 5. До сих пор не уверен, что neo4j вообще нужен и реляционки бы не хватило, а это не просто эксперименты тимлида. Тимлид и ответственный за сервис мидл как то сами особо не изучают neo4j и даже мои конспекты доки и ответов со стака по ими же написанным мне тасам читают через раз.
Представьте ебало когда еще не отошел кликхауса а росскийские анальники уже тащат в твой продакшен ydb.
>Никто не хочет быть бета-тестером.
Кроме российских анальников
Проблема не в нем самом, чел. Проблема в анальниках которые тащат, прямо скажем, сырой местячковый nosql туда где классические реляционки его выносят в одну калитку.
Ну извените, Кликхаус - принципиально другая нишевая вещь и тащить его имеет смысл.
Вот зачем нужно рисковать своими данными с YDB, если можно просто купить компьютор побольше - хз.
за языки программирование
что для чего используют?
допустим
запрограммировать станок - какой язык?
написать приложение для ios - какой язык?
запрограммировать дрон и его управление - какой?
написать приложение которое будет в живом времени взаимодейтсвовать с тобой и теми кто рядом - какой язык?
и вот мне нравится например squoosh сервис, но там не загрузить много изображений сразу, вот чтобы это сделать - какой язык нужен?
Чел, я тебе секрет открою: кликхаус и ydb примерно одного возраста, багов там одинаково дохуя.
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
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
проiбав розмiтку
Бля, там пустая строка была и все равно не понимаю нахуй через коалсенсы и нулифы это говно заменять, когда есть IsEmpty. Че за ублюдок этот кал придумывал.
Какие подводные хранения HTML строк не полноценный HTML документ, а его фрагменты в mysql колонке с типом XML? Сейчас хранится в виде обычной строки. Не устраивает то, что для того, что бы вытянуть какую-ту часть селектором приходится загружать всю строку на бэкенд, там делать HTML парсинг, после чего отдавать на фронт. Хочу избавится от лишнего звена в виде парсера на бэке, стоит того?
У меня в приложении есть WYSIWYG редактор Quill, который может сохранять только как HTML. Вот то, что пользователь там наредактирует я и сохраняю
И ты для этого дурацкого вопроса решил выбрать именно баз данных тред?
Может быть сколько угодно слоев языков друг над другом (транслирующихся один в другой). Пользователь языка (программист) обычно сидит на верхнем или около-верхнем уровне, а иногда и сам создает более высокие. SQL кстати неплохой пример, он сам по себе обычно только прокладка между СУБД и языком общего назначения, который спамит скриптами запросов сервер БД.
Трансформируешь этот хтмл в джейсон и не ебёшь мозг. XML и HTML может визуально похожи, но у них разные правила парсинга, так что ебанёшься от постоянных ошибок БД.
https://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results
Я прочитал первый ответ, но ничего не понял. Откуда там вообще взялись o и b?
На пике я скопировал ответ в онлайн sql, он выдает
> ERROR 1054 (42S22) at line 7: Unknown column 'o.Group' in 'on clause'
Хотя я дурак, надо было вместо Group нужный мне столбец вписать.
Но вопрос все равно в силе, что за o и b, и как работает эта магия
Ну в общем говоря, лучше сразу парсить на бэке, спасибо.
Репорт.
я хочу сделать для знакомой парикмахерше сайт с возможностью сделать к ней запись ( она охуенно стрижет, я хочу так выразить ей респект ) , всё что касается всяких CSS и html я знаю. но нужна будет база данных и какие-то формы записи, очевидно.
что мне для этого понадобится? куда копать? какую базу данных использовать и как ее прикрутить к сайту?
какой сейчас актуальный стэк?
Скорее всего, для этого есть готовая CMS, и код не придётся писать вообще.
СУБД для такого сайта подойдёт любая.
но CMS это же если писать сайт на php?
а какая субд будет наиболее проще для первого раза?
я сделаю нормально, но просто чтобы мне не сломаться о сложность, чтобы не было чрезмерно много информации которую сразу надо в мозг записать
я не хочу писать сайт на wordpress, там бесплатные шаблоны полное говно
поэтому хочу сделать сам, со своим дизайном
может для этого лучше сделать простенькое приложение?
Копай в сторону headless CMS и натягивай свою вёрстку на джейсоны, которые эта CMS высирает.
И она кстати тебе всё равно не даст.
ей под 50, челик )))
просто стрижет охуенно, со всякимимашинками wahl, свистелками шейверами и тп, и дешево
хочу ее отблагодарить
Сап DB, посоветуйте визуализатор бд, по типу MySQL Workbench. Что интересует
1. Реверс инженеринг существующей бд
2. Отображение визуальной схемы бд (ER Diagram)
3. Отображение связей и их типов между таблицами.
Я скорее всего многое не понимаю, цель следующая. Я создаю связи с разными типами, мне для личного убеждения нужна какая-то отладка, чтобы понимать какая связь реально установлена между таблицами.
Ведь по сути одна транзакция ждет коммита другой транзакции просто чтобы выполнить автоматические слияние данных(первая транзакция данные обновила, закоммитила, а вторая обновила после и тоже закоммитила автоматически, и зачем мы ждали, ведь то же самое было бы с другой последовательностью)?
> Зачем нужны блокировки на уровнях изоляции кроме Serializable?
Чем выше уровень изоляции - тем медленнее работает БД. Самым высоким уровнем транзакции можно добиться такого, что транзакции будут выполняться тупо последовательно, и тогда вообще не будет смысла в нескольких ядрах и нескольких нодах приложения, всё будет тормозить и ждать очереди.
> Ведь по сути одна транзакция ждет коммита другой транзакции просто чтобы выполнить автоматические слияние данных
Это только если обе транзакции лезут в одну и ту же таблицу и обращаются к одним и тем же записям, тем более если обе хотят туда что-то записывать, а не просто читают. Таких случаев сравнительно немного, большинство транзакций работает с разными данными, не мешают друг другу.
> (первая транзакция данные обновила, закоммитила, а вторая обновила после и тоже закоммитила автоматически, и зачем мы ждали, ведь то же самое было бы с другой последовательностью)?
Одна из транзакций не закоммитится, будет ошибка.
Вот тут delete автоматически удаляет новую версию даже без нового select и автоматически мержит те данные на шагах 8 и 9.
> Одна из транзакций не закоммитится, будет ошибка.
У меня в postgres закоммитилось два обновления одного и того же.
Пример из википедии https://en.wikipedia.org/wiki/Record_locking врет в данном случае. Клерк 2 спокойно перезапишет документ Клерка 1.
А данные Клерка 1 никто никогда не увидит.
Можно даже начать транзакцию, удалить данные, попытаться обновить их во 2 транзакции, а потом закоммитить первую, ошибки второй не будет, просто вернется
UPDATE 0
Делать автокомплит на основе постгреса такая себе затея. Читай реплику и строй человеческий https://en.wikipedia.org/wiki/Suffix_array или https://en.wikipedia.org/wiki/Levenshtein_automaton (ну или возьми готовую либу и не страдай хуйней).
Я когда был нулем читал 1ое издание вот этой. Там было вообще 300 очень маленьких страниц, без дурацких картинок, теперь 400.
Сап, двач. Нужно хранить много HTML, еще и с изменениями - то есть вот HTML за такую дату, вот - за такую. Какое хранилище мне лучше выбрать? Или посмотреть, как это делает гит с помощью слепков?
Посмотри, как вики-движки хранят историю страниц.
Да в теории весь сайт (любой) в HTML. Хочу диффы формировать.
Спасибо, пойду алгоритмы формирования диффов гуглить.
>а заебись бы было, не?
Можно фото шлюх с интимсити парсить, только хз как это легально монетизировать, да и гораздо более интересные схемы были или есть. Когда тянок на фото разводят, а потом шантажируют .
у вк есть api, использовать его для мониторинга и сталкеринга проще
я бы не хранил фул диф. проще в каждом объекте связанном с профилем иметь инфу о дате, когда она добавилась или была уделена
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на жава.
Она же на диск не пишет. Мне что, ручками всё делать? Ну ладно если на диск не пишет можно реплик ебануть 10 штук, но она и реплики и кластеры не поддерживает, мне что тогда, ручками реплики делать? Слишком слошна.
Пизда конечно, никаких бд по моему запросу нет по сути. Вот были времена когда майскуль ебанул на сервер и всё, похуй. Отвалился так отвалился, старую базу поднимай.
> berkeleydb
Хммм. Репликация есть. А я думал что нет. Хорошо что подсказал, нужно изучить детальнее её. Но конечно там ручками дохуя придётся пердеть.
> leveldb
У него репликация через JVM, неприятненько.
>>378836
Это да, если отказаться то просто берёшь касандру нахуй и всё. Но если я откажусь от жвм, то. То. То хуй знает даже. Это же только БД будет на жабе висеть, нахуя она нужна-то, придётся часть логики на жабу переносить. А так дойдёт до того что придётся и вообще всю бизнес-логику на жабу переносить, епты. Неприятно же! Все эти классы ебаные, оопешники блядь.
Алсо, а касандра жозенько пропихивает свой датастакс в опенсорс? Вообще не читал на эту тему. Редис, например, прямо ебёт досуха каждого долбоеба кто решил попользоваться редисом.
Ну я могу довольно просто изменять почти всю бизнес-логику под БД. Не проблема вообще, можно сделать весьма неплохо, если перестроить данные так чтобы оно графы мне считало. Но похуй. У фоундейшена появился хороший калкурент.
https://griddb.net/en/
Griddb епта. Используется и сделано тошИба. Ну типо епта с++, сделана японцами, не геями-кожевниками из эпла. Внушает доверие, а? Как низкорослый карлик доверяю низкорослым карликам из Японии. Сайт хорошо выглядит, красивый маскот. Потратились ребята. Есть клиенты под жабу, питон, ноду. Ноу-ебля эдишн короче. КАКОВО НАХУЙ КОГДА ЕБАЦО НЕНУЖНО?
Всю бд делали 7 человек на гитхабе. Но у одного из них седые волосы.
>Ну типо епта с++, сделана японцами, не геями-кожевниками из эпла.
Полехче с таким заявлениями.
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
братишка,
если бд написана на джяббе - это не означает что ты должен переписывать своё приложение на джяббе
> 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 наверное норм.
>>378976
Хм, а ведь действительно. Как KV могут быть GRID? Никак, очевидно.
>>378979
Так-то да, но руки-то чешутся. Если есть JVM, значит нужно писать в JVM. Зачем она просто так стоит? Непорядок.
> Так-то да, но руки-то чешутся. Если есть JVM, значит нужно писать в JVM. Зачем она просто так стоит? Непорядок.
А если БД написана на C++, тоже руки чешутся писать бизнес-логику на плюсах?
На плюсах не пишут бизнес-логику, на них пишут платформы и среды, поверх которых уже на высокоуровневых языках пишут бизнес-логику.
Нет, бизнес-логику, вроде того же перебора графа, очень часто пишут на плюсах/си. Как и транзакции всякие.
Ну и вообще термин "бизнес-логика" для ньюфагов, размытый и нихуя не значит, не используй особо его вне пиздаболии с менеджерами.
У бизнес-логики вполне конкретное значение: описание бизнес-процессов предприятия, соответственно, есть привязка к предметной области. Это явно не те категории, которые должны относиться к разработке СУБД.
> бизнес-процессов
Ты ввёл ещё одно определение, которое не имеет смысла и не определено. И ввёл его чтобы объяснить предыдущее определение без смысла. Ебать ты менеджер, хуле ты в этом треде забыл?
Вот рассчёт графа это бизнес-процесс? А ведь он буквально регулярно проводит рассчёты над устройствами, получая и создавая готовые данные, которые попадают в аналитику без модификаций. Просчёт интернет-мошенничества это бизнес-процесс? А это тоже через рассчёт графа происходит.
Блджаж, да я с десяток "бизнес-процессов" могут только на одном графе напердеть тебе.
Точнее, что я хочу: подобие гуишной тулзы сделать для себя. В которой вкладки для постгри есть, редиса, тарантула и прочего что юзаю.
Затык на постгре. Для себя хочу управлять включением/выключением бд, время запросов, запросы, само описание таблиц, размеры и т.д. Короче объединить всякие тулзы в одну. Но мне не клиент нужен и не хочу системные pg_ctl вызывать.
Можете подсказать?
Словарь данных?
https://www.postgresql.org/docs/current/catalogs.html
https://dataedo.com/kb/query/postgresql
Но там только инфа о таблицах и прочее, саму СУБД ты вряд ли выключишь без 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? Если нет, то каковы мои альтернативы, чтобы таки завершить установку?
docker
Клиенты. Без бизнеслогики, чистые данные.
Ты говоришь про слой промежуточных серверов, которые не относятся к высокопроизводительным серверам с отдельными фичами и к серверам с бд. Ну да, там частенько используют высокоуровневые языки. Но не всегда, потому что без плюсов оптимизировать очень слошна.
>Клиенты. Без бизнеслогики, чистые данные.
Волшебные клиенты по воздуху передают напрямую содержание памяти на своих машинах? И ты не менее волшебно их просто загружаешь прямо в память? Такую важную деталь, как откуда у них эта информация берётся, можно даже не упоминать.
>Ты говоришь про слой промежуточных серверов, которые не относятся к высокопроизводительным серверам с отдельными фичами и к серверам с бд.
У тебя от писания на крестах просто началась профессиональная деформация. Ты сидишь в треде, доменные языки которого разделены на два лагеря - человекочитаемый SQL и человекочитаемый JSON, и при этом заливаешь про отсутствие бизнес-логики как термина. Разработчикам постгреса наверно моча в голову ударила реализовывать и допиливать поддержку джейсонов в своём продукте, а разработчики монги просто захотели запилить индексы и джоины. Хотелки бизнеса здесь вообще ни причём.
вкатился я в базы данных начав изучать sqlite
можете мне пояснить кое что из азов?
хочу разобраться не тупо смотря гигобайты видосов, а напрмиер создать базы данных сам, и чтобы уже с этой целью добавлять знания недостающие
подкините мне хороший туториал который вам помог в свое время?
И правда, с libpq тоже нельзя стартом субд управлять.
>Волшебные клиенты по воздуху передают напрямую содержание памяти на своих машинах? И ты не менее волшебно их просто загружаешь прямо в память? Такую важную деталь, как откуда у них эта информация берётся, можно даже не упоминать.
Что это за бредятина нахуй? Информация с датчиков.
Перестань свои менеджерские маняфантазии о сайтиках применять на всё что угодно.
>У тебя от писания на крестах просто началась профессиональная деформация. Ты сидишь в треде, доменные языки которого разделены на два лагеря - человекочитаемый SQL и человекочитаемый JSON, и при этом заливаешь про отсутствие бизнес-логики как термина.
SQL это не бизнес логика. Почитай что такое SQL на досуге, манагер.
>Что это за бредятина нахуй? Информация с датчиков.
Датчики тоже из воздуха дату собирают? Никаких протоколов и следования стандартам, да? И отправляют гигабайты несжатых данных прямиком из памяти.
>Перестань свои менеджерские маняфантазии о сайтиках применять на всё что угодно.
Пердолик что-то там о маняфантазиях рассказывает, лол.
>SQL это не бизнес логика.
Он существует исключительно из-за нужд бизнеса. Пердолики всё хотят запилить бинарного убийцу SQL, да всё никак не могут.
>Датчики тоже из воздуха дату собирают? Никаких протоколов и следования стандартам, да? И отправляют гигабайты несжатых данных прямиком из памяти.
Да, просто байты отсылают. По udp/tcp. Если какой-то датчик отсылает вместо чистых бинарных данных какое-то говно в json - его нахуй меняют на нормальный. Ебать ты манагер, ты что, нафантазировал как датчики json отсылают?
>Пердолик что-то там о маняфантазиях рассказывает, лол.
Ух эти пердолики! Не то что высшая каста, манагеры!
>Он существует исключительно из-за нужд бизнеса.
Манагер, плиз. Он существует из-за легаси и согласованности данных, которая как раз и являются нуждой бизнеса.
Мелкого бизнеса, в основном, сосайтики там всякие твои, мелкие магазины. У крупного биза проблемы с SQL, из-за невозможности горизонтального масштабирования.
> Пердолики всё хотят запилить бинарного убийцу SQL, да всё никак не могут.
Убийцу SQL сделоли - CRDT. Манагеры уже переучиваются на бетховен и солидити, а ты всё аутируешь в SQL. Хотя могу тебя понять, SQL ламповый, а CRDT только в зайчатках. Вот бы сделали SQL CRDT.
есть индекс по B.b. Для 25 записей пришедших из SubA дергается 25 раз индекс B.b (пик 1). Все ОК.
Но если выношу подзапрос в процедуру и получаю запрос вида select * from myPoc() as ProcA join B on ProcA.a = B.b
то на индекс кладется болт и строится хэштблица для всей присоеденяемой таблицы (пик 2), и запрос в 50 раз дольше на небольшой базе. Это не ОК. Есть мысли как разрулить?
В оракле хинт leading или ordered с use_nl юзается, как в других базах хинты работают хз.
если вообще правильно понял вопрос, с разработкой процедур не сталкивался
|id|fieldA|id|fieldB
но я не могу вернуть из функции
table(id integer, fieldA text, id integer, fieldB text)
ибо два столбца с именем id ни-ни, а если переименовать столбец, то это перепердоливать мапперы. Ну что за хуета?
Перепердоливай говномапперы, делай нормально.
У одного 3NF, у другого просто называем справочники DIMENSION и точно так же джоиним.
Если кому интересно, то дело в том, что планировщик, при использовании функции не может прикинуть количество возвращаемых из нее строк. Он решает (возможно константное значение заложено), что функция вернет 1к строк и решает, то лучше сделать seq scan на 20к строк, чем 1000 раз долбить индекс, что при таком раскладе вполне разумно.
Можно закостылить установив лимит
select * from func() limit N
В моем случае количесво мне известно, так как оно зависит от размера передаваемого в функцию массива. Но в общем случае видимо придется страдать.
Что можно использовать, помимо экспорта-импорта файлов?
db2 fdw не катит - используется несовместимая версия постгри.
Помоги, анон.
сам нихуя не базист
linked server, либо любой etl инструмент
sqlite, если наличие хранимок не принципиально.
алсо поясните нубу: могу я где-то скачать mysql бесплатно?
хочу вкатиться в базы данных, лет 10 назад верстал сайты, хочу вкатиться в IT на хуй пошел я , знаю
> а что такое хранимки?
Хранимые процедуры. Это когда логика программы не в виде какого-то экзешника или скрипта, а прямо в базе данных.
> алсо поясните нубу: могу я где-то скачать mysql бесплатно?
https://dev.mysql.com/downloads/installer/
> хочу вкатиться в базы данных, лет 10 назад верстал сайты, хочу вкатиться в IT на хуй пошел я , знаю
Ну, вкатывайся, чо
а может простыми словами пояснить, что значит прямо в базе данных? не понимаю , не могу представить
допустим файл с кодом который выполняет что-то когда его читают могу представить, а что значит прямо в программе невразумею
Вот умеет СУБД как-то хранить таблицы, вьюхи и индексы в каких-то своих внутренних файлах БД. И так же она хранит в том или ином виде процедуры в виде кусков инструкций, которые сама СУБД умеет интерпретировать и исполнять, как это делают интерпретаторы некоторых языков программирования. Это может быть байт-код, исходники скриптов или что-то ещё, физически, конечно, всё хранится в файлах в бинарном виде. Ты пишешь команду CREATE PROCEDURE, прямо там же её исходник на понятном СУБД языке (к примеру PL/SQL в Oracle или T-SQL в MS SQL Server), она в свою очередь этот исходник парсит и где-то у себя сохраняет. В любой другой момент ты можешь вызвать эту процедуру, и она просто запустится и выполнится. Можно сравнить с макросами в Excel. На таких языках удобно работать со стандартными командами SELECT/INSERT/UPDATE/DELETE, ты просто их пишешь как обычные операторы языка, но в довесок к ним у тебя есть переменные, условия, циклы, вызов других процедур и прочие стандартные возможности языков программирования.
спасибо тебе анон.
подскажите
скачал установил open server, пытаюсь в настрйоках включить чтобы появился phpmyadmin , настрйки - модули - mysql, но как только выбираю sql win10 - опен сервер не запускается
у меня 7ка если что. поясните плез как настроить ээто всё
Спроси в каком-нибудь PHP-треде (или кто ещё там юзает подобный софт). Вряд ли проблема имеет хоть малейшее отношение к MySQL как таковому.
оказалось все просто, у разных версий - разный дефолтный пароль.
алсо - для изучения базы данных а именно MySQL что лучше поставить? просто чистый MySQL с сайта мелкомягких или можно оставить опен сервер? какую самую позднюю версию можно накатить на win7 ? у меня заработал только с 5.6
В постгресе выбираю часть мыла до @. Возвращается что-то типа '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?
Вот хочу понять это я кривой код написал, или постгрес с табличками неправильно сделал. Если первое то не буду вас беспокоить и пойду к разрабам на том языке на котором свою каку накодил.
Был бы крайне признателен если поможете
Бля пчел объясни своими словами пж, это что значит, мне нужно добавлять ON CONFLICT или это не баг а фича и ничего в этом плохого нет?
Спасибо за то что навел в правильном направлении, сейчас покопался и понял что не обязательно делать все значения последовательным, они уникальны и соответствуют требованиям первичного ключа да и хуй с ними.
Суть проблемы:
В СУБД (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".
Вопрос:
Скажите, пожалуйста, как правильно перекодировать юникод-строки в читабельный вид в постгресе?
Язык - sql.
Я не могу понять как нужно обработать значение
trim('"' from (address::json->'street')::text)
чтобы результатом select-запроса была читабельная запись.
Что-то типа:
select МАГИЯ(trim('"' from (address::json->'street')::text)) as "StreeName" from data;
DWH: структуры отчетов, источников, хранение данных в DWH - слои, объекты, логика преобразования данных, показатели качества требований, модели и типы хранения данных и т.д.
Аноны, выручайте, посоветуйте ресурсы, по SQL я разъебу их, а по проектированию хранилища надо хотя бы сойти за не полного идиота.
Как из Столбца 1 и Столбца 2 получить Результат?
Каждое значение в С1 повторяется строго два раза. Для каждого уникального С1 нужен результат вычитания соответствующей пары чисел в С2.
Не надо искать примеры, просто научись делать partition by C1, и в каждом окне считай разницу между first _value() и last_value().
Я пробовал постгрес, монгу и редис, примерно все одинаково плохо работают с записью объектов такого размера и получается заточены под хранения большого количества маленьких файликов. Редис только ещё и пытается вообще всё в памяти хранить и в итоге по оперативке быстро проседает.
Плохо работают - это упираются в CPU базы и в итоге запись длится часы. Я ещё думал, что может монга будет работать быстрее постгреса, так как ему нужно время на нарезку json'а на тосты, но оказывается нихуя, работают примерно одинаково.
Что ещё затестить? Удивлен, что оказывается задача "записать несколько гигов в виде json'ов средне-большого размера настолько неочевидная. Я уже думал, что может распределенную фс поднять и туда писать, прям реально файликами.
Я же сказал "хранить персистентно", это означает распределенность, устойчивость, фейловер и тд и тп.
hadoop, не?
Тогда ты странный, отлично всё работает.
https://www.db-fiddle.com/f/qrWa1fowA5PbFs8A9knE6K/0
для изучения mysql и запросов что лучше ставить на комп - open server или просто скачивать и ставить mysql ?
сколько вообще по канону нужно времени чтобы научиться нормально понимать и писать запросы?
алсо может порекомендуете хороший курс?
>Ссылки:
>Задачи:
Удали
Вcтавь:
>Продвинутый MySQL
Не вижу инструменты проектирования БД, где? Вставь хотя бы https://www.mysql.com/products/workbench/
спасибо тебе анон
я конечно же нихуя не понял но очень интересно
а зачем вообще всю эту систему ставить? для изучения в чем будет разница с просто sql и open server?
Ок, если не забуду при перекате.
Нахера вообще что-то ставить, если есть dbfiddle? Ты ещё ему кубернетес порекомендуй
MSSQL ставят исключительно шарпобляди, потому что у них нет выбора. Все остальные используют PostgreSQL, ещё в легаси Oracle остался.
а поясни мне азы плез. запутался.
есть SQL - это язык.
а PostgreSQL, MySQL, SQLite - это среда или интерфейс просто?
например в open server база данных релизована с графическим интерфейсом, т.е. можно прямо в таблице менять параметры, значения, названия и тп, без написания запросов для этого.
а по факту ( или наиболее часто ) в работе - это просто комнадная строка и запросы? как это выглядит визуально?
SQL - это язык, у которого есть стандарт, но нет "эталонной" реализации, которую бы юзало большинство.
Постгресы и мускулы - это всё СУБД, т.е. движки для создания и управления БД. Для доступа к БД они все предоставляют поддержку SQL, но каждый из них добавляет свои расширения, которых в стандарте SQL нет.
Поддержка SQL для разработчиков приложений реализована через специальные библиотеки (драйверы), где ты на уровне обычного языка программирования пишешь SQL-запросы в виде строк, передаёшь их библиотеке, а они передают их СУБД, те их выполняют и возвращают ответы в виде таблиц, для программиста это будет что-то вроде готового массива значений. Также у СУБД обычно есть из коробки простые программы с консольным интерфейсом, где можно писать запросы, а они внутри юзают драйверы и просто выводят результат.
Ну и кроме консольных утилит есть сторонние приложения, которые делают то же, что и эти утилиты, но в виде удобного графического интерфейса, где да, как раз открываешь таблицы как эксель и меняешь данные, кликая мышкой, ну и ещё можно писать те же SQL-запросы в специальных полуконсольных-полуграфических режимах. Насчёт Open Server не знаю, хз что это, там либо юзается одно из таких приложений с графическим интерфейсом, либо какая-то своя тулза.
При написании приложений пользуются в первую очередь драйверами, консольные и графические утилиты нужны только для того, чтобы иногда заходить и смотреть данные в БД, сами приложения их не юзают, они работают исключительно через драйверы.
Есть одна амуриканская проприетарная программа, которая пишет данные в MS SQL базу данных. Эта база данных уже занимает 30гб. В ней есть одна таблица с миллиардами записей (буквально - данные туда летят чуть ли не каждую минуту, и накапливаются за года)
Так вот, эта закрытая программа работает с этими данными за микросекунды - нажал кнопочку и тут же получил за нужный период по нужному условию (при этом явно не вижу ничего под кеширование)
Ну вот, импортозамещение.. Делаю простенькие селект-запросы... Ничего сложнее простого селект-фром-вере...
Почему мои запросы выводящие ровно теже данные по тем же условиям выполняются за минуты... А в той программе мнговенно?
Меня тут больше для самообразования интересует - хочу разобраться в какую сторону копать чтобы тоже так делать.
в open server там работа с базой данных через phpmyadmin
Один хуй твоя программа запросы шлёт в базу, а не напрямую из ноосферы данные вытаскивает, они должны на стороне базы в истории храниться, вот откопай их и посмотри в чём прикол, вангую ты просто партиций дохуя смотришь.
спасибо. возьму с собой маску для плавания с трубкой
а что посоветуешь ? как учиться работой с базой данных сейчас?
чтобы актульаное и прикладное. я просто посмотрел web, всякие javascript, html css , php, и понял вдруг что мне очень нравится именно базы данных, я сука люблю структуры, порядок, логику, плыву в этой моче и кайфую
допустим хочу себе сделать себе базу данных клиентов, чтобы прямо в бою учиться и дело делать и мне пользу приносило, а не пет проекты дрочить.
алсо что такое сосональная работа?
Да.
т.е. просто через sql shell? типа через командную строку?
да что такое соснали-то? как по анлийски будет?
соснали = консоли? )))
Что бля? Я тебя сам на лицо нассу щас. Только долбаёб будет пердолится в консоли, когда миллион сред для разработки. Консоль запускается в крайних случаях, когда нужно создать первого пользователя, проверить проблемный запрос, никто в чёрные целыми днями не смотрит.
мимо
Если ты просто вебмакака, то тебе нужен только CRUD. Как аноны выше советовали ставишь докер и работаешь с ним. По структуре и логике это наверное скорее Data Governance, а работа с базами данных это часто говно и кастыли, потому-что заказчик хочет что-то специфическое, и ему поебать что это не соотвествует текущей модели данных. Почитай кабанчика с ОП пика. Пойми, сами по себе бд, в отрыве от конкретного проекта/приложения ценности не имеют.
Тогда пиздуй читать, Кимбела, Аймона, data vault 2.0, анхоры, дата меш.
чел хули ты там собрался проектировать, если к бд подключиться не можешь
SELECT username FROM users WHERE username = ? and password = ?
Ебало этого любителя Дейта в мире nosql представили?
Стоп, сам сообразил. Оно в get как раз заканчивает запрос, подставляя всё в него. То есть, оно ищет в базе конкретные логин с паролем?
В get и вставляет же, не? То что ему пришло в функцию
смеялись всей Big Data team
Твоя биг дата хайпанула и исчезла.
Вот бы щас читать хабропарашу, не знаю что они там в своём курятнике кудахчут. Подумай сам, количество данных только растёт, место подешевело, и все хотят аналитику делать, не говоря уже о всяких нейронках и прочеему машинному обучению. Да оперативные бд никуда не делись, но все деньги интересные решение сейчас в аналитических решениях.
Смотря откуда берутся user и pass. Если напрямую с клиента и не экранируются, до да, легко.
Да, они просто приходят. Ну, уже хоть что-то
Как принято хранить глубокие древовидные структуры в БД? Херь вроде Монги тут вряд ли подойдет, при большой вложенности она начинает сосать. В РСУБД будет слишком много джойнов. Шо делать?
Хранить в поле JSONB.
1. WHERE x != 1 по идее должно бустануться обычным btree же? Оно работает на равенство и на больше/меньше, а на прямое неравенство? hash должен тащить то чно
2. Тут походу никакой индекс не поможет
3. btree/hash выручат
4. Возможно GIN? Не ебу, не юзал его никогда, btree точно не поможет
5. В идеале составной индекс нужен. Но просто индекс по b тоже ускорит запрос, просто меньше
так блять вот и хочу научиться! зайти могу в базу, посмотрел уже sqlite, mysql, теперь postgre, понял что такое crud, сейчас пытаюсь понять в логику запросов
Да, уже разобрался, как селект написать.
1280x720, 1:37
на каких версиях всяких postgres sqlов работаете?
может можете порекомендовать курсы какие-нибудь годные?
только не скилбоксы хуексы всякие
Во втором случае можно упороться и создать индекс по выражению x+y. Работать будет, но очень не шибко. К примеру, если в запросе использовать не x+y, y+x, то такой индекс уже не будет использоваться
Переезжаю на grinplum с MSSQL Володька, спасибо.
Курсы в шапке, специалист который. От него же ещё есть на рутрекере курс по оптимизации.
1) Хороший вопрос. Индекс по x должен помочь
2) Тут индекс не поможет, если хотим ускорить вычисляемое и пишем сразу в таблицу
3) index(a,b)
4) Т.к. вначале тоже подстановка, то полнотекстовый
5) index(a,b)
Где я обосрался?
На счёт второго зависит от базы у постоит есть такая штука для подобных ситуаций https://www.postgresql.org/docs/current/indexes-expressional.html
откуда это? Есть теория от него почитать?
Что происходит в этом коде?
Ладно, тогда просто спрошу что есть id->"')) внутри ORDER BY
есть уёбищная таблица, например с добавленными данными в виде 5 строк (из N столбцов каждая) , и я решил добавил к ней еще один столбец - например РАЗМЕР СИСЕК
как мне блин у каждой строки заполнить только этот столбец?
Тупо через апдейт, не?
ALTER TABLE UYOBISHCHNAYA_TABLITSA ADD BOOBS_SIZE NUMBER(2);
UPDATE UYOBISHCHNAYA_TABLITSA SET BOOBS_SIZE = 0;
Ну или ALTER TABLE UYOBISHCHNAYA_TABLITSA ADD BOOBS_SIZE NUMBER(2) DEFAULT 0;
не пойму, или не получается
короче , вот таблица
там есть 4 заполненные мамаши или около того
я хочу добавить туда столбец размер сисек
пишу
ALTER TABLE уёбищная_таблица
ADD размер_сисек CHARACTER VARYING(20) NOT NULL;
получаю ошибку:
ERROR: ОШИБКА: столбец "размер_сисек" содержит значения NULL
SQL state: 23502
что я сделал не так?
сделал NOT NULL DEFAULT 'Неизвестно';
и вроде получилось.
но как теперь его отдельно заполнить?
В таблицу, где уже есть какие-то данные нельзя добавить NOT NULL столбец без значения по умолчанию. СУБД ведь не знает, какими данными инициализировать ячейки существующих записей, а NULL подставить не может, ведь ты ей запретил через NOT NULL. Либо дописываещь DEFAULT какое_нибудь_значение, либо добавляешь столбец без NOT NULL, устанавливаешь значения через UPDATE и в конце меняешь столбец на NOT NULL через ALTER TABLE уёбищная_таблица MODIFY размер_сисек NOT NULL;
Так обычными апдейтами.
UPDATE уёбищная_таблица SET размер_сисиек размер_сисек = 'Неизвестно';
Это обновит значения всех столбцов размер_сисиек. Таблица целиком не перезапишется, перезапишутся только указанные в апдейте ячейки.
не понимаю.
вот мне надо чтобы теперь в каждой строке в столбце размера сисек появилось значение.
чтоб у жирной мамаши 5, у мамы шака 3 и тд
какой командой это прописывается? логику не улавливаю
UPDATE уёбищная_таблица SET размер_сисиек размер_сисек = '5' WHERE milf_id = 4;
UPDATE уёбищная_таблица SET размер_сисиек размер_сисек = '3' WHERE milf_id = 3;
и т.д.
Хотя если ты юзаешь какую-то гуёвую тулзу для работы с БД, там почти наверняка можно не писать команды вручную и в просмотре таблиц тупо отредактировать, как в экселе.
pgadmin юзаю
да, можно тупо как в таблице, но я хотел именно узнать как прописать уёбищными ручками
анон, а зачем размер_сисек два раза писать?
спасибо анон. теперь понял
а вот интересно - если милф там 1 000 000 , и например не нужно \ не хочу заполнять каждую и писать реальный размер_сисек
а хочу набросать рандомно эту таблицу, например с последовательностью 2345 которая заloopена?
можно это как-то реализовать?
типа размер_сисек = 2 where milf_id = 1, размер_сисек = 3 where milf_id = 2 и тп
а дальше что-то типа в логике n + 1 , чтобы оно само дальше добавилось
Можешь в апдейте написать простую формулу по вычислению размера как остаток от деления от milf_id. Типа такого:
UPDATE уёбищная_таблица SET размер_сисиек = (((milf_id - 1) % 4) + 2)::CHARACTER;
типа сделать автоинкримент на колонку размер_сисек чтобы он сам заполнил? а как задать чтобы ряд числел бы ограниченный и повторяющийся?
Сам SQL Server рабочий (к другим базам нормально подключается), а вот к этой нет (при этом пробовал еще и с самого сервера, и по локальной сети с других компов - везде выдает эту ошибку)
База данных вроде как рабочая - я сделал ее копию через powershell. В нее идут запросы по ODBC, плюс программа пишет и читает из нее данные
Пользователь тоже имеет права (ну как минимум по ODBC создаются связи для пользователя - вообще пробовал и пользователя винды и пользователя SQL)
Ошибка не гуглится. В подробном тоже нифига не написано
типа чтобы визуально было понятно что с чем соединять
неудобно жутко, хоть на бумаге рисуй их
нет, всмысле как например сижу я в фотошопе - могу две картинки открыть в двух окнах рядом
а в pgadmin - типа есть строка в которой вкладки с открытыми окнами, но не знаю можно ли их например просто открыть одновременно если монитор большой? чтобы каждый раз не тыкаться между вкладками
алсо еще вопрос - есть ли какая-то live reload\live update фича? чтобы каждый раз не кликать на refresh в дереве баз
как в каком-нить редакторе кода
>как в каком-нить редакторе кода
Мне вообще кажется что вся среда SQL застряла где-то в девяностых.
И вот эти деревянные редакторы времен ms-dos с одним активным окошком.
И сам синтаксис SQL который полностью просирает всяким модно-молодежным LINQ
Связи через допотопные библиотеки которые хуй знает сколько лет как устарели.....
Мальчик, РСУБД это одна из самых зрелых технологий на рынке сейчас. Испытанная временем и миллионами человекочасов. Это пикрил 1.
Nosql это пик 2 - молодняк, лелеющий мечты переплюнуть Папку, но ему банально не хватает опыта и выдержки, максимум на что он способен - это перетянуть на себя одеяло в небольших кейсах.
Есть ещё Спарк и соответственно датабрикс (дельта Лейк). Если смотреть не как замену реляционным базам а дополнение, то Там учтены все ошибки сиквела и есть возможность создавать продукты (контроль версией, тесты и вообще девопс)...
И нужно это не для широкого применения, а всяким дата-аналитикам и другим пидорам, которые и экселю рады.
Не могу определиться, то ли это троллинг тупостью, то ли зелень.
> И вот эти деревянные редакторы времен ms-dos с одним активным окошком.
Много редакторов видел? Или сделал вывод по одному посту на дваче? У меня даже ебаная встроенная консолька в IDE умеет во фреймы и анализ синтаксиса, что там специализированные редакторы.
> И сам синтаксис SQL который полностью просирает всяким модно-молодежным LINQ
Модные-молодёжные LINQ не умеют работать с базами данных напрямую и не умеют даже в UPDATE без ебли с нечитаемыми коллбеками.
> Связи через допотопные библиотеки которые хуй знает сколько лет как устарели.....
Мера устарелости - это возраст библиотек больше трёх лет, да? 50 лет прошло, дохуя технологий и языков взлетело и умерло, а SQL пережил их всех.
Спарк это номер один фреймворк для биг даты. Даже создатели велосипедов из Гугла и Майкрософта переходят
Очень пидорско звучит.
>Nosql это пик 2
при чем тут вообще эта хуйня? Я про само SQL, а не его отдельных представителей
>>403977
> У меня даже ебаная встроенная консолька в IDE
Ну покажи IDE для SQL которая бы умела что-то кроме подстветки (например хотя бы проверку типа поля, а то заебало открывать структуру таблицы чтобы узнать что там в ячейке, число/текст или вообще дата)
>>403977
>а SQL пережил их всех.
Я и не говорил что нужно чем-то заменить.
Я говорил что оно не развивается. Там вон даже сишечка развивается, а ей сколько лет и она насколько проверена временем... А выходят новые стандарты, новые среды, новые инструменты...
То есть если сравнить как писался код на сишке в нулевые, и как он пишется сейчас - да оно несравнимо... (некоторые даже специально устраивали ретрочеленджи - писать код как деды в девяностые). Очень много удобных фич
А вот запросы на SQL как писались в нулевые, когда был бум развития (даже считай визуальные конструкторы появились типа Access), так до сих пор там и сидят
p.s. если что, у меня 33 уровень. Я считай уже дед, которому заебало каждую буковку писать в этаком блокноте вот уже больше 15 лет
DataGrip от JetBrains вполне себе неплох. Единственный минус - не бесплатный
Так запросы руками пишут только деды на дба, всё остальные с ормами работают или с пандасами/спарками.
для любителей орм - отдельный котел между любителями ебаться в гудок и "тесты потом напишу"
орм нужна только для джун-мидло дебилов которые хотят накатать мвп без необходимости что бы он нормально работал
ух сука, аж трисет
дед, таблетки прими
они самые, анон
>>404797 (Del)
научитесь в инжиниринг бд что бы таких вопросов не возникало, тем более при твоей ситуации в вакууме тебя орм не спасет
>>404809
я прям вижу джанго-макаку после трехнедельных курсов с юдеми, где для вас mvc это просто три папочки в корне проекта а хайлоад - больше одного запроса в секунду
Вопрос немного низкоуровневый.
Как хранить таблицу, с данными произвольной длины - в виде файла или в памяти так, чтобы можно было дописывать и удалять данные оттуда?
Первое, что приходит в голову, это тупо выделить память для хранения данных, и писать туда их прямо:
>данные1 + данные2 + данные2 + ... и т. д.
а также определить максимальное число записей данніх, и сделать индекс вида:
>номер записи (фиксированное число бит) + (начало данных, фиксированное число бит) + длина данных (фиксированное число бит).
И записать этот индекс в отдельном блоке выделенной памяти,
или в отдельном файле.
Грузить в память - только индекс, а не сами данные, а данные уже - грузить по запросу.
Такая себе ебала. Но а шо если много таблиц надо?
Какой блять dynamic SQL? Хуйнул SQL-скрипт с нужными изменениями схемы с названием <следующий по порядку номер> + <номер задачи в джире для уникальности>, положил в специальную папку в проекте, тулза для миграции прошлась по названиям скриптов, увидела, что указанный скрипт не запускался, запустила, добавила запись в свою таблицу с историей, и всё заебись. Легко отслеживать историю изменений схемы, контролировать порядок наката миграций и отмести правки задним числом по хеш-суммам в таблице истории, чего зумерские ORM не умеют.
>Пенсия, как делать миграции будете?
нахуя ее делать? Работает, не трожь. 20 лет ебашат базы.
Просто нормально надо было нормализовать базы при проектировании
Кстати, работал с одной американской прогой по управлению электроэнергией на уровне электростанций... Там там разрабы нихуя не дрочились, нужно новое поле или поменять тип - заебомшим новую таблицу, а старую оставим на память
Так что, мне маленькому тем более норм
понятно что ты хотел сказать.
но вот парадокс: в твоем молодежном GO миграционный инструментарий далек от явовского и тоже весьма примитивный. Его просто не успели хорошо развить. Однако никто не орет.
Тогда, надо как-то выдрать этот код,
https://github.com/mono/mono/tree/main/mcs/class/Mono.Data.Sqlite
и дополнить его .csproj и .sln файлами так, чтобы оно конпелировалось под .NET Framework 4.0
и компилировалось с помощью msbuild или Visual Studio 2010,
без пердолинга с компиляцией mono,
а то там хуй пойми чего содержится в бинарниках, которые вместе - занимают целый охуллиард байт.
Поможешь с этой хуйнёй?
Почитай про использование страниц для хранения таблиц в БД.
А вообще советую ознакомиться с этой книгой. Много чего интересного почерпнешь про кишочки.
...пока молодой-модный дата-инженер быстро клепает решения на современных фреймворках и поднимает зпшку в 3 раза за 2 года, ты будешь вникать в кишочки
Не будешь вникать в кишочки - не пройдешь собесы и не апнешь зпшку. Очевидно же.
Или ты думал любому хую с горы дадут вакуху просто потому что он сказал "я юзал модные фреймворки, пук лол кек"
Он имел ввиду скорее всего приблуды типо spark / hadoop
+
Проходил недавно собес на сеньку бекендера в одну большую рашкованскую компанию. Половина вопросов не по питону:
- Что будете делать если случайно удалили целый набор строк в Постгре?
- Что такое "план запроса" Постгри и как работает bitmap scan?
- Чем индексы Кликхауза отличаются от Постгри?
- Как происходит процесс записи в очереди в Реббите и что там за "маски"?
- Какие виды доставки есть в Кафке и какой для чего вы бы использовали?
на собесах спрашивают одно и то же плюс-минус
а в те места, где дрючат по подкапотной хуйне, среднепчёлу не пройти
так что можно, конечно, положить жизнь на доскональное изучение кишков. но есть и другой путь...
ты о каком молодежном ГО говоришь? вопрос про миграции в треде задали уже раза два-три в ответ на мой пост и одно я могу гарантировать почти точно - это выпускники Яндекс практикума написавшие хелловорд на Джанго и считающие что sql это еще один язык программирования
Откуда взялось мнение, что их вообще нужно делать?
Разве всевозможные стратегии index merge (я про mysql) не должны покрывать все ситуации, когда на практике часто используют партиции ?
Что почитать об этом уровня Кнута или К. Дейта ?
Допустим у вас SaaS платформа типа wix где чел покупает и котонизирует себе сайт, и мы ему его в виде отдельной базы создаем?
Раньше были шаред хостинги, там был один сервер и одна дб, и для всех создавали директорию и базу данных, потом через анальную дыру на одном из сайтов (которых было миллион) залазили и рутали сервак.
Сейчас может и актуально для такого мусорного говна, в соглашении там прописать - если вас въебут, мы ни при чём.
Не понял как это связано. Я говорю просто с точки зрения структуры. А так своя у юзера ДБ или нет он может даже не знать. Прямой доступ логин/пароль не дается никому
Если сейчас есть средства и ты уверен, что не въебут весь сервак, то делай. Тогда без такой уверенности делали и норм было.
Можешь даже нанять специальных людей, которые въебут и посоветуют, как настроить чтобы такое не повторилось.
Это либо шизанутые пенсионеры на пхп либо гобляди, вот тут https://2ch.hk/pr/res/2286748.html (М) недавно люто порвались как раз на тему орм и миграций, визжали что НИНУЖНО
>нужно новое поле или поменять тип - заебомшим новую таблицу, а старую оставим на память
Всегда так делаю, а вы нет чтоле?
Джанга, кстати, охуенная! Пока хейтерки пердолятся с шаблонизаторами шаблонизаторов, мы уже все выкатили и гэпнулись на х5.
мимо дед скуф
Сырые sql - признак дремучего легаси или не шибко смышленых мартых на проекте
Я вот не боюсь сырых sql, не боюсь коннектиться к постгре напрямую и вертеть ее сырыми запросами. Но только блять в 99 случаях из 100 я заюзаю для этого pgadmin как и любой белый человек. Смекаешь?
>Сырые sql - признак дремучего легаси или не шибко смышленых мартых на проекте
это настолько абсурдное утверждение, что хорошим, схожего уровня контраргументом будет просто насрать на стол, но тогда получится тавтология.
В ходе всей этой дискуссии я не получил ни один аргумент за орм на серьезный хайлоад проектах за исключением
1)Макакам сложно в sql/api/ижесними
2)Макаки не могут в миграции
3)Макак так научили на курсах
4)Манагерские макаки экономят на БДА и разрабах БД
Ты несешь ту же ересь - при чем тут вообще pgadmin?
В зумерских ORM не пишешь SQL-запросы напрямую, ты вместо этого скармливаешь библиотеке готовые объекты, а она одним ей ведомым образом генерирует для неё SQL-запросы, глядя, какие у сущности поля и какие у них типы. Когда пишешь как нормальные люди SQL-запросы, это и есть сырые SQL, они же native queries.
> что есть зумерская ORM
ORM - это принципиально зумерское явление, поэтому, логично, все ORM зумерские.
> в какой среде надо писать нормальные SQL запросы
В любой.
Несмышленные мартыхи это может быть но редко. Наоборот, это очень ушлые и хитрозадые мартышки оптимизирующие свою job security. Потому что никто в здравом уме не полезет поддерживать этот идиотский ворох из конкатенаций, шаблончиков, ФОРМАТОВ. Если Кабан Кабаныч спросит «а почему так, СЫЧАЕВ?», Сычаев начнет бубнить под нос что-то невнятное про хипстеров (что мы и зоонаблюдаем в треде).
> job security
От кого? От тех немногих шизиков, не осиливших SQL?
> Если Кабан Кабаныч спросит «а почему так, СЫЧАЕВ?»
Какой блять кабан, он что, твой код ревьюить будет?
Но 90% проектов вообще никакой не хайлоад.
Орм и оболочки поверх них - топовая вещь для прототипирования.
При нормальной разработке они никак не мешают миграциям.
Ну и если подкапотное поведение орм тебе учить не хочется - еще есть статические билдеры sql с генерацией кода.
>>410331
>ORM - это принципиально зумерское явление
хибер всего лишь вдвое младше оракла. ОРМ в продакшене уже больше 20 лет.
Что ты там бубнишь, Скуфяев? Откуда я знаю от кого ты городишь жоп сесурити. Это к тебе вопрос.
К кабану придет уже третий разработчик с жалобой на код Сычева, написанный на голом sql, потому что другие разработчики не хотят сами руками писать маппинг между табличками и кодом. И особенно не хотят читать десятки тысяч строк такого маппинга, написанного сычевым.
эээ pgadmin это зумерская ORM ?
А ещё они могут прийти к кабану с жалобой на говнокод Сычёва в логике программы и потребовать юзать no-code разработку с программированием мышкой. Это ничем не отличается нежелания отдельных шизиков учить SQL.
Чтобы пользоваться orm на продвинутом уровне ты должен хорошо знать sql. Плюс orm задает тебе рамки не использовать всякие антипаттерны типа вьюх или логики в бд во всяких хранимках.
Пыхатрон, спокуха! SQL выучил?
ты прав, для прототипирования - ок, для низконагруженного или индюшачьего приложения - тоже ок, да я сам использовал сиквелмодел для своего бота
но буквально в том году - довольно урча команда разрабов принесла мне сервис с 10k rps 300k dau и какими-то неистовыми инсертами с обращением к нашим субд c ебучей алхимией и с предъявами что наш сервис на слишком слабом железе что бы переваривать это богоподобное творение.
То что они сделали говно с точки зрения
1)Архитектуры кода
2)Оптимизации
3)Интеграции
Потому что
1) ORM на больших проектах - это легаси, костыль. Оно рвет вообще всю структуру прекрасного ооп на мелкие куски.
2)Никто не хочет учить как это работает под капотом, оно и не нужно - хорошие оптимизированные приложения будет писать человек который может в оптимизацию запросов, в лучшем случае часть логики может даже перенести на субд
3)ORM - это явно бутылочное горлышко
Классическая история про то как скуфидон не осилил модный хипстерский фреймворк из нулевых-х и переписал все на перл. Ебало представили?
>10k rps 300k dau и какими-то неистовыми инсертами с обращением к нашим субд c ебучей алхимией
показатель, успешности орм, что сервис дошел до таких нагрузок.
Вполне реально переписать только 20% критичных к нагрузке методов, причем не на голый sql а на какую-нибудь легкую оболочку, как минимум защищающую от инъекций.
И если ты не гугель все эти ваши большие rpm решаются кешом.
>в лучшем случае часть логики может даже перенести на субд
лол, привет тестам и соответственно всей современной разработке с агилом
и опять же жоб-секурити, как выше сказали.
Заебешься искать нормального человека, кто сможет поддерживать логику в бд.
Он там еще и на алхимию ссылается, а значит наворачивает ООП в петухоне. Ебало представили?
Чел причём тут орм, если у тебя бд как хлебушек работает. Если у тебя уловного индекса нет на таблицы, тебе sql не поможет. Орм позволяет в 90% случаев реализовать тот же функционал, но без легаси sql кода? который хуево портируется и рефакторится. От нагрузки начинает рваться не потому-что орм, а потому-что датамодель хуевая\бд не оптимизирована под запросы\сами кейсы запросов не проработаны.
Зависит от того что за бд. В аналитике это обычное дело, индексы это слишком дорого а в пределе и вовсе невозможно на больших данных.
Но я встречал в яшке оторванные констрейнты. При чем в задачах где целостность была важна, намного важнее производительности. Чисто потому что челик был долбаеб.
Чел тебе там поди NOSQL показали
Небось все таблицы создаются через зумерские ORM, которую они не осилили сконфигурировать так, чтобы она генерировала индексы и констреинты.
yii макаки
как круто ты продиагностировал мои бд, майн респектулен, а можешь подробнее немного об индексах рассказать - что это такое и с чем едят, я же, больше пяти лет проработав дба до этого, первый раз о них слышу от выпускника Яндекс практикума
и что ты вкладываешь в понятие легаси? это сильное утверждение, которое надо чем-то подкрепить, да и прочую чушь
Как же я проиграл. Оказывается это ссаный ДБА рассказывает разрабам как правильно писать код. Шел бы бэкапами занялся, Скуфидот.
я был дба еще до того как ты узнал что такое базы данных, поридж
в разработке уже больше 10 лет и такие олигофрены, любители обмазаться либами для умножения двух чисел, жидко обсираются на собесах
откуда этот мемес "да не трясись ты?"
алсо вопрос
какова структура запроса вообще \ логика ? есть ли где-нить размернутая схема нарисованная?
например простого
SELECT [ тут что? таблица, база данных, результат запроса, что еще?] FROM [ тут что может быть ?]
какая у сложного?
Дон Скуфидон
https://docs.microsoft. com/en-us/sql/t-sql/queries/select-transact-sql?view=sql-server-ver16
что тебе не позволяет сделать орм, дедуль?
Нет такого синтаксиса, базы данных не знают ни о каких one-to-many, они умеют только джойны, а джойнам неважно, какую идею ты в них закладываешь, они тупо объединят записи по внешнему ключу. Забросить одним запросом из БД можно только один набор строк, и ты можешь в своём примере запросить посты по id профиля, если у тебя в таблице постов хранится id профиля. Если твоей структуре не важны данные самого профиля, ты просто складываешь посты в полей posts, а в поле id устанавливаешь id профиля, по которому запрашиваешь посты. Хотя это излишне, в posts и так каждая запись содержит id профиля.
Если нужен не только id профиля, но и, к примеру, имя и логин, у тебя два варианта: либо делать ещё один запрос к таблице профилей, либо в том же запросе сделать джойн с профилями, и у тебя в ответе от базы будет набор строк с постами, но рядом с каждым постом будет дублироваться инфа о профиле, и уже на уровне приложения придётся их отсекать и раскладывать по разным полям структуры. И это ещё вопрос, что будет работать быстрее. Профили, например, часто кешируют и лишний раз в базу за ними не лезут.
так вот при заполнении строк второй таблицы что мне вводить в это поле с внешним ключем ? цифру?
т.е. этот внешний ключ для чего-то нужен вообще при заполнении? ( по смыслу конечно же понимаю для чего он, но в плане удобвства что он дает ?)
id той сущности, на таблицу которой ссылается ключ
не,я хуево объяснил что хочу
короче есть две таблицы
в одной рок группы и есть там колонка группа_id, в другой рок альбомы и тоже колонка группа_id
например я уже заполнил таблицу - рок группы, у каждой группы есть номер теперь. например металлика это 1, хуяллика 2, и мастер хуяллики это 3.
и теперь заполняю таблицы рок альбомы: и там тоже есть колонка группа_id, собстна мне вместо альбома создавая строки писать для колонки группа_id что? название группы или просто номер из таблицы?
быстрофикс
*мне в строке вместо названия группы писать ее номер из предыдущей таблицы или писать буквенно опять название ?
Пример - ['Drama', 'Fantasy', 'Suspense'], жанры фильмов. Пробовал varchar[], и просто varchar, при копировании говорит что значение не валидно
А что тебе надо сделать-то?
Если импортировать какой-то датасет, то вставляешь праймери запись и получаешь её ключ, потом вставляешь форейгны с ней.
Если как макака вручную, то получаешь все праймери и даешь макаке форму, она вводит значение и отправляет на бек, там уже вставляется.
Прям вручную в базу никто не вставляет.
Теперь пиздуй читать книгу.
ну я хотел понять как работает фича с foreign key
потом задумался а как добавляюстя данные в таблицу с ним если их дохуя.
>>414255
За constraint и схему спасибо.
Насколько нормальная практика хранить перечисление строк в одной записи? Допустим я этот массив строк буду хранить в genres_tags, а в орм просто фильтровать, хотя пока хз каким запросом.
Кому не в падлу - оцените схему данных. У меня основная логика в том, чтобы выводить в шаблон теги с помощью <a></a>, и при нажатии на тег редиректить на ресурс с поиском, где выполняется запрос. Запрос, разумеется, я ещё не написал
> Насколько нормальная практика хранить перечисление строк в одной записи
Хуевая практика - это нинужный полнотекстовый поиск + потом ебля, если тебе потом надо добавить-убрать что-то.
А как можно сделать если значение в csv хранится как comma separated list (of genres) ?
Посмотрел кучу датасетов на Kaggle, там у всех таблиц жанры либо как list of string, либо просто как перечисление строк через запятую.
pgAdmin 4
Мне интересно, как данные взаимодействия пользователя с приложением попадают в базу данных, как сделать так, чтобы они туда попадали, как соединить сайт/приложение с базой данных и т.д, но я не могу найти нормальных книг/ресурсов для таких зелёных как я. Решил почитать книгу с ОП-поста, но там на первых страницах уже непонятная мне информация и названия(прикреплен скрин) и хочу найти что-нибудь попроще для понимания глобальной картины КАК работать с БД на практике.
Стоит ли почитать К. Дж. Дейт. Введение в системы баз данных из оп-поста?
помоги, анонче
> Мне интересно, как данные взаимодействия пользователя с приложением попадают в базу данных, как сделать так, чтобы они туда попадали, как соединить сайт/приложение с базой данных и т.д
Если ты идёшь в аналитики, то и не будешь знать, т.к. этим занимаются программисты. Всё, что тебе остаётся - спрашивать у них, какие таблицы смотреть.
Как минимум я хочу понять, как это работает. Я сейчас в pgadmin умею создать только подключение к БД и писать запросы, остальное для меня не понятно. + не думаю, что кабану нужен будет АНАЛитик на фуллтайм, который умеет только чистить данные вилкой.
я могу сидеть в ней с его компа когда она работает он на удаленке
хочу посмотреть как у них устроена база данных и кое-что узнать
типа сделать пару запросов
что для этого мне понадобится?
да не
хочу увидеть как выглядит настоящая рабочая база , сколько там таблиц и как они связаны чтобы иметь представление
я вроде тоже как анон сверху поучился на northwind от инженера спока, но она маленькая и простая, хочу хардкор но чтобы не перекрыться сразу
говно идея, 1с хранит свои базы в ебанутой стрктуре, с кучей профиксов в названиях, ты нихуя полезного там не увидешь.
используют
Установить к себе 1С:Предприятие, подключиться к их информационной базе и запускать запросы через интерфейс.
Ну или подключаться напрямую и лезть в эту канализацию: https://its.1c.ru/db/metod8dev/content/1798/hdoc
>>415500
На рабоче, очевидно. В открытом доступе даже опенсорсные проекты обычно не держат реальные данные так, чтобы можно было подключиться и что-то селектнуть, это небезопасно и создаёт лишнюю нагрузку.
Используют. В качестве базы для небольших сайтов она неплоха, особенно для макак, которые используют 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 повторяется в обоих таблицах, т.е. я фактически храню одинаковые записи в двух разных таблицах. Просто проблема в том, что эта таблицы на основе двух разных датасетов
запрос не смотрел. группируй по id, уберутся повторы
вообще нихрена не понятно что ты хочешь
убери title_en из одной таблицы и все
и как тебе коснтрейты мешали данные джойнить? чет ты не то куришь
Ага я походу какую-то хуйню сделать пытался.
Но title_en я убрать все таки не могу, потому что тогда не понятно, к какому title будуту относится тэги из второй таблицы. Если я добавлю связи по id т и удалю title_en, то субд просто приклеит к сущности с id = 1 из основной таблицы рандомные теги где id = 1.
Я сдела как подсказал анон выше (>>414414) и даже написал, что все ахуенно. И так было до той поры, пока я не заметил что при запросе по title = 'Cowboy Bebop' джоинится release year: 2021
То есть или эндпоинты хуярить на каждый пук и склеивать их на клиенте или мутить цепочки запросов на сервере?
group by id блэд говорю
На самом деле учебные базы у них довольно неплохие, проблема не в самой базе, а в том что ты не знаещь что с ней делать. На этих базах можно тренировать довольно близкие к реальным кейсы.
Вроде северный ветер старая, у них ещё AdventureWorks есть
Если у тебя сервер тупо для круда и хранения данных, можешь сделать на сервере билдер запросов и обмазать каким-нибудь GraphQL. Но вообще да, если у тебя не круд и не публичное API, мутить по эндпоинту на сервере на каждое допустимое действие - основа безопасности, чтобы юзер мог вытащить только то, что ему разрешил администратор для тех или иных действий.
Вот я тебе накидал примерчик импорта денормализированного csv и использование many-to-many.
https://ideone.com/OOz1ow
Давненько не писал на питоне, лол.
ты джойнишь эти таблицы по их первичному что ли?У тебя совсем фляга свистит?
определи какой-то фк в таблице
господи, посмотел на твой первоначальный вопрос
тебе советовали сделать многие-ко-многим, а ты какую-то хуйню наворотил абсолютно бессмысленную, просто кровь из глаз
у тебя цель какая? хранить информацию о анимах и их жанрах?
какой смысл такого деления на таблицы?
Нахера ты хранишь список жанров в текстовом поле?
запили таблицу с тайтлами и со всей информацией о них, потом сделай справочник с жанрами и связывай их через линковочную таблицу, можешь еще на остальные поля типа эйджа, шоу тайпа вынести в справочники мелкие и все
Есть набор записей (timestamp, value) по сути активность чего-то
Нужно вывести промежутки активности когда value > 0
date, start_time - end_time, sum(value)
Если бы был какой-то фиксированный интервал, то было бы наверно проще
если я правильно понял очевидные оконные функции, берешь соседнии в качестве nextValue и считаешь разницу.
Ну ёбана, с начала фильтруешь все 0, потом смотришь подряд ли идут цифры, если подряд закрашиывешь.
Я что за интернет плачу чтоб считать читать чужые посты?
выгрузи семпл, записей 200, а то щото мамку ебал в ручную заполнять а в голове решить не могу.
> ебал в ручную заполнять
Достойные специалисты в треде
generate_series(timestamp '2020-01-01, timestamp '2022-01-08' , interval '1 min') + random() * interval '5 min';
> смотришь подряд ли идут цифры
Как именно смотришь? Когда понимаешь что интервал закончился?
Вот я начал какать утром в 9:05, потом залипал в телефон, в 9:10 еще чуть выдавил и в 9:15 еще
Сколько я какаль? 9:05-9:15
Если покакаль 2 раза за минуту это одно событие, но в бд 2 записи, если что
Вернее, такой вариант будет правильнее:
Начал какать в 9:05, продолжил 9:06 и 07, 08 - раз в минуту выдавливал. Потом залипал в телефоне 5 минут и выдавил еще раз в 9:13
Пусть будет что если есть событие хоть раз в минуту, то это часть интервала
- 9:05-9:08
- 9:13
JЕсли Cуществует запись ENVIRON с условиями:
STORE.ROLLOUT_ENV= ENVIRON.NAME
И ENVIRON.LVL <= CURRENT_LVL
Тогда
STORE.USED = 1
Иначе
STORE.USED = 0
Тут надо как-то апдейтиться из джойна? Я могу конечно выбрать все записи из таблицы с помощью go и потом итерироваться по ним через for но это уебанство, ндао бы за 1 sql-запрос это порешать
Ну апдейтишь с джойном и там через case вибыраешь значение.
ПЕРЕКАТ >>2424142 (OP)
ПЕРЕКАТ >>2424142 (OP)
ПЕРЕКАТ >>2424142 (OP)
ПЕРЕКАТ >>2424142 (OP)
ПЕРЕКАТ >>2424142 (OP)
Есть ли какая-то IDE для MySQL с урезанным функционалом для новичков чтобы могла наглядно строить таблички или все эти связи между табличками как Воркбенч? Может есть какой-то хидден гем в вашей области для новичков?
эта ебала дичайше тормозит. у коллег тоже, и на ноутах и стационарниках в офисе
что с ней не так? где затык?
компания экономит на сервере? или нужно железо на клиенте мощнее?
phpmyadmin
Это копия, сохраненная 26 октября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.