Ссылки:
- https://www.postgresqltutorial.com/
- https://www.mysqltutorial.org/
- https://www.sqlitetutorial.net/
- https://www.oracletutorial.com/
- https://github.com/agarcialeon/awesome-database
Задачи:
- https://www.sql-ex.ru
- https://www.codewars.com/?language=sql
Продвинутый MySQL:
- https://www.mysqltutorial.org/mysql-resources.aspx
- https://shlomi-noach.github.io/awesome-mysql/
Инструменты проектирования БД
- https://www.mysql.com/products/workbench/
- https://explain.dalibo.com/
Видосики:
- Плейлисты по разным СУБД: https://www.youtube.com/c/SQLDeveloperBI/playlists
- https://www.youtube.com/playlist?list=PLY7PmJJFH5nT-lbFKxfbp3rw5BBuq5Azo
Литература:
- Томас Кайт. Oracle для профессионалов
- https://postgrespro.ru/education/books/dbtech
- Алан Бьюли. Изучаем SQL. - про MySQL
- К. Дж. Дейт. Введение в системы баз данных
Прочее:
- 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/
Ссылки для альтернативно мыслящих:
- https://www.w3schools.com/sql/
- https://learnxinyminutes.com/docs/sql/
- https://metanit.com/sql/
- http://sql-tutorial.ru/
- https://metanit.com/nosql/mongodb/
FAQ:
Q: Нужно ли знать английский?
A: Нет.
Q: Что лучше, SQL или NoSQL?
A: SQL.
Q: Вопросы с лабами и задачками
A: Задавай, ответят, но могут и обоссать.
Здесь мы:
- Разбираемся, почему PostgreSQL - не Oracle
- Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
- Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обеществе
- Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
- Анализируем, как работает поиск вконтакте
- И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно.
Поехали!
>2024
>юзать pure sql
Чем SQL лучше, чем NoSQL?
Какие варианты для вката есть, если ты хорошо знаешь SQL ( диалекты Postgre/Oracle и их процедурные расширения по типу PL/SQL)?
Я редко вижу вакансии database developer'ов, в основном знание SQL это дополнение к какому-либо языку программирования.
Писали, что можно с PL/SQL в банк пойти, но не по наслышке знаю, что сейчас тенденция у банков переходить на Postgre. Понятно, что процесс перехода не быстрый, но один хуй технология устаревающая, а хочется не остаться с голой жопой.
Какие варианты сейчас вообще есть? Хотелось бы, чтобы сфера была не хайповая (особенно в части вкатунов) и не умирающая.
Чем NoSQL
Попробуй Алана Бьюли "Изучаем SQL", там оч подробно расписана как теория бд, так и работа со всякими SQL-операторами.
Пик скорее просто конспект документации постгре с примерами, лучше с более общего чего-то начать и потом переходить к этому
Спасибо
Есть годные ресурсы поэтому вопросу? Или может быть гит какой-нибудь? хз даже че гуглить
Посоветуйте, как лучше реализовать хранение этих свойств товара. Т.е. я создаю имя свойства, slug для поиска и значение. Значение может быть только одного типа. Как решение нагуглил, хранить тип в одном поле, а значение текстом в другом либо использовать json или EAV. EAV слишком сложно и много усилий требуется для выборок потом через ОРМ. Насчет первых двух пока сомнения в плане производительности. Использую postgres если что.
1) Ты никуда не денешься от дилемы json vs eav. C json соснешь когда кабаныч будет от тебя требовать аналитику. Например захочет узнать какого цвета платья в этом сезоне лучше продавались. Не то чтобы невозможно, будешь костыли городить.
2) Когда ты проектируешь ключевые фичи софта, позиция "слишком сложно, давайте сделаем проще" - глупая. Сложное не может быть простым .
мое имхо
>EAV
EAV не нужен. Тебе нужна структура: товар, шаблон товара, свойства шаблона, значения конкретных свойств для конкретного товара.
Пример.
Шаблон: телевизор.
Свойства шаблона: тип матрицы, диагональ итд.
Товар: название: LG OLED65C3RLA, шаблон: телевизор.
Значения свойств товара: тип матрицы: OLED, диагональ: 65 " итд.
Обычные реляционные данные и никакого EAV'а.
Непонятно то ты предложил если не EAV. У тебя под каждый тип шаблона что ли таблица будет отдельная со своими столбцами для свойств товара или у тебя будет огромная таблица с сотнями столбцов под все свойства?
EAV как раз реляционная модель, чтобы не создавать таблицу для всех свойств всех товаров и еще иметь возможность динамически свойства добавлять.
ХЗ может я тебя неправильно понял
Когда я делал похожую штуку, я сделал очень просто: сделал дополнительную таблицу и ебнул туда 10 колонок интов, 10 строк, 10 датавремя и так далее. У нас не магазин, у нас документооборот типа джиры, и пользователи могут добавлять кастомные поля к карточкам, в зависимости от типа. Для магаза я бы сделал похоже, взял бы таблицу Metadata (ProductId,TypeId,IntValue,StringValue...) и складывал бы туда эти кастомные свойства. Запросы получаются тривиальные: AND EXISTS(SELECT 1 FROM Metadata WHERE ProductId=p.Id AND TypeId=10 AND IntValue=55) чтобы показать все телевизоры с диагональю 55.
Иными словами, классический EAV.
>EAV как раз реляционная модель
Пчел, ты вообще знаешь что такое "реляционная модель"? Что по твоему такое этот самый "realtion"?
Пчел...
https://en.wikipedia.org/wiki/Relation_(database)
Relation это "отношение" данных в кортеже (row) к атрибутам (column) в таблице.
>'ID' from the domain of integers, and 'Name' and 'Address' from the domain of strings
>A predicate for this relation, using the attribute names to denote free variables, might be "Employee number ID is known as Name and lives at Address".
А в EAV все колонки таблицы сведены в одну. В базе литератруно только одна таблица с тремя колонками: Entity (id), Attribute (column name), Value (value).
А схема, которую ты нарисовал, сохраняет семантику. Именно поэтому она никакой не EAV, по ней вполне можно формировать вменяемые предикаты, в отличие от EAV'а, где у тебя и "шаблон" и "свойства" и "значения" в одной таблице находятся.
В википедии статьи пишут кукаретики, там много хуйни. Тебе анон нарисовал реальную рабочую схему.
>В википедии статьи пишут кукаретики, там много хуйни.
Ты типа новую реляционную теорию разработал или че? Или старую опроверг? Когда уже весна закончится, столько шизиков и ебанутых давно не видел.
>Тебе анон нарисовал реальную рабочую схему.
Это блядь моя схема. Ясен хуй она рабочая, она прямой сейчас в нескольких компаниях работает.
Если бы ты, хуйло слепошарое, читал тред, то увидел бы что речь шла о том что анон не понимает что такое EAV. И в чем разница между "реляционной моделью" и "EAV моделью". А чтобы это понять надо для начала знать что вообще такое "реляционная модель". И по каким "кукаретическим" принципам работает база данных, в которой тебя, обезьяну тупорылую, научили бездумно создавать таблички.
Шиз, таблетки.
Тупанул. Можно же наделать соединений на каждый фильтр или иннер джойнами.
В чем проблема? SELECT product_id FROM values WHERE property_id=10 AND int_value=20 подразумевая, что 10 - это свойство "цвет", а 20 - "красный". Берутся эти значения из селектов на формочке, когда пользователь заполняет форму поиска.
Я бы сделал через EXISTS(SELECT 1 FROM...), так лучше читаемость. Джоины для колонок в гриде, экзисты для фильтра.
Ты тупанул в тот момент, когда вместо изучения литературы из шапки запустил жпткал. И вывалил тебе жпткал лютейшей хуйни. А если свойств будет пять, а если десять? Я про перфоманс этого дерьма даже и не говорю, просто про читаемость.
Вот так это делается https://dbfiddle.uk/1MYQQ2Ek
На индексы похуй, я хотел семантику показать. Таблицы связаны между собой в виде ромба, и начать запрос можно с любого угла, с того который выборку максимально уменьшит. А если в таблицу со значениями еще и колонку с идентификаторами шаблонов добавить, то можно будет совсем интересную аналитику делать.
Короче учи SQL, чтобы не быть баттхертом. А жптговно тебе в лучшем случае переврет какое-то рандомное говно из интернета, а в худшем просто насрет бредом.
Как удобно, когда у тебя все значения строкового типа. Изначально вопрос был, про то как хранить и выбирать значения разных типов. Нужны фильтры размер от 10 до 50, например. Булевы еще.
Лол. А зачем тебе "разные" типы? Ну вот зачем тебе INT, например? Значения это в принципе не INT. Они могут быть отрицательными? Их можно складывать/делить? Зачастую еще и единицы измерения надо как-то прикручивать.
Нахера весь этот геморрой, если все эти значения в конечном счете показываются на сайте в виде СТРОКИ? У тебя и так будет механизм, превращающий твои "булевы" значения в читабельные "Да/Нет" или "Есть/Нет".
Забыл про значения "между", "больше/меньше" и прочее.
Вот так это можно сделать прямо в SQL https://dbfiddle.uk/xRkE5wzL
Хотя обычно это делают в приложении, когда запрос составляют. Ты буквально можешь выбрать формат сравнения в зависимости от параметра.
>ведь не существует же таких джуниорских позиций
Вы заебали уже джуниорскими позициями. Они чё блять какие-то особенные? Там меньше работают, меньше требуют или чо. Они абсолютно идентичные по всему, там просто добавили слово junior в заголовке и всё. Это обычный сраный кликбейт, чтобы больше людей откликнулось.
Там меньше платят. Если сразу платить много человек выгорит даже не поработав в сфере ИТ. А так у чела будет цель к чему стремится и въебывать.
>Там меньше платят
Это вообще ничё не значит. Бывает что на вакансию с 30к зп претендует 200 человек. И наоборот, на зарплату 300к претендуют 2 человека. У нас полно долбоёбов с низкой самооценкой, готовых работать "за еду", "за хоть какие-то копейки", в надежде что набьют опыт и уйдут в другое место. Готовы унижаться, лизать пятки. Хоть там будут платить 10к в месяц, всё равно туда припрёться стадо баранов и попросит их нанять. Низкая зарплата никого не отпугивает. Даже если там будут плётками пиздить, водить в кандалах, он всё равно скажет, ну как же! Это же опыт!
Ты пиздец как недооцениваешь то, на что люди идут РАДИ ОПЫТА. Они готовы быть терпилами год-два-три, терпеть всю хуйню, низкую зп, микроменеджмент, легаси код, хуёвое отношение, неинтересные задачи, переработки, работу в праздники, лишь бы получить строчку в резюме.
>>127547
>>127572
Не существует джуниорских СПЕЦИАЛИЗИРОВАННЫХ позиций. Джуниор нужен когда "немного того немного этого", "ну хоть как-то", "че-то надо". Денег нет, но хоть че-то надо. Вот это работа для джуна.
А на специализированную должность нужен, внезапно, СПЕЦИАЛИСТ. И вопрос "как мне вкатиться" нужно переделать в вопрос "как мне стать специалистом". И сразу все понятно: хуй пойми как, тяжело, долго, без гарантий. И сразу всякие тупорылые катящиеся клоуны покатятся в другую сторону.
Двачую. Он пока никто, зеро. Логично, что вначале все будут отказывать. Вырастет как специалист, тогда его работодатели сами начнут приглашать на работу. Устройство на работу вначале это по сути брутфорс. После того как откажут первые 10-20-30 раз, где-то на 15-м или каком-нибудь собеседовании он устроится, если не сдастся и не съебёт в другую отрасль.
Я не об этом.
Я о том что варианты:
>Стать специалистом (Яндекс Наебтикум) -> Устроиться на спец вакансию
И
>Притвориться специалистом (наебать) -> Устроиться на спец вакансию
Это по умолчанию попытки что-то скроить и кого-то наебать (возможно самого себя).
Пикрелейтед примерный маршрут "вката" моего и людей, которые были вокруг меня. Понятно что границы условные. Но. Это я решил что красноглазая хуйня не для меня. Это я решил что sql процедуры это не то что я хочу видеть восемь часов в сутки. Это я решил что рот ебал пиксель перфект адаптивной верстки и вешать поведение на кнопочки.
И мне блядь ни на секунду в голову не приходило спрашивать в интернете как вкатиться на узкоспециализированный стек. Потому что ответ очевиден: ты открываешь резюме и устраиваешься на подходящую тебе вакансию, туда где есть интересующая тебя хуйня. Через несколько месяцев, даже просто от поглядывания со стороны и разговоров в курилке, у тебя инфа по этому стеку из носа течь будет.
А если ты предыдущий абзац осуществить не в состоянии, то охлади траханье. И поделай че попроще. Можешь конечно и "побрутфорсить" головой об стену и попытаться получить все и сразу. Если станешь тем самым одним из тысячи, то мое почтение. Только есть подозрение что людям, у которых башка на столько хорошо варит, советы долбоебов с двачей не очень нужны.
Суть вопроса была не в поиске джуниорских вакансий, а в том, что такие вакансии изначально предполагают наличие аналогичного опыта, которому непонятно откуда взяться, поскольку, опять же, не существует начальных позиций конкретно на эти спецухи.
И тут возникает вопрос: если не существует начальных позиций на эти вакансии, то откуда берутся специалисты, которые на это откликаются и находят работу? Откуда они берутся?
>если не существует начальных позиций на эти вакансии, то откуда берутся специалисты, которые на это откликаются и находят работу?
Какая разница? Работодатель описывает ИДЕАЛЬНОГО КАНДИДАТА. Если баба на сайте знакомств пишет "хочу мужика красивого, с зарплатой от 300к", откуда возьмутся красивые мужики с такой зп? То есть, работодатель может хотеть чего угодно. Вопрос в том, если придут два кандидата например и они подходят только на 70%, но того нет и сего нет. Что будет делать работодатель? Он может либо ждать ещё месяц-другой-третий, либо он будет мириться с отсутствием чего-то.
Пидора ответ.
Так а че ты высрал? SQL это Structured Query Language. Ты, жирная хуйня, с каким Language его сравниваешь лучше/хуже? С джаваскриптом?
Да.
ʁ нǝ uониwɐıo ʚqı ʚɔǝ εɓǝɔq ʚоudоɔqı жоuо̯n Һиɯɐǝɯǝ иvи Һǝ
Ну вот я читаю ОП, а там написано:
>Q: Что лучше, SQL или NoSQL?
>A: SQL.
Вот я и спрашиваю, чем? Оно же там не просто так написано, правильно?
А дальше ты че не читал?
>Задавай, ответят, но могут и обоссать.
Принимай урину, спрашиватель.
>Вот я и спрашиваю, чем? Оно же там не просто так написано, правильно?
Холиварный вопрос, нельзя так сравнивать. Разных реализаций NoSQL с десяток и все они друг от друга отличаются. Если ты имеешь ввиду MongoDB, так и говори. Если CouchDB - это другой разговор. А если DynamoDB - то это третий. В одной ситуации одно лучше, а в другой ситуации другое. NoSQL практически не обладает развитым языком запросов (кроме MongoDB, у монги есть aggregation pipeline, у CouchDB mapreduce). В SQL ты не ограничен в запросах, можно хоть 5-ти этажные строить.
вот тут шмонга явно получше будет
>>125147
>Короче делаю магазин, в котором пользователь сможет сам создавать товары и дополнительные свойства товаров (например цвет, размер и т.д.). Естественно это все нужно фильтровать в поиске.
но мы же не хотим простых решений. давайте лучше будем ебаться с EAV
Через неделю пользователь просит аналитику по продажам дилдаков красного цвета в регионе саратов и твоя монга обмякает. SQL тем и хорош, что можно писать любые запросы и крутить данные, как хочешь.
Ааааа. Я-то думал этот чепух сравнивает с НАСТОЯЩЕЙ базой, которая и EAV и джейсоны умеет. Он бы еще с экселем сравнил.
Вот тебе типичная задача из этой области.
У некоторых товаров недозаполнили свойства. У некоторых телеков разъемы не прописали, у смартфонов объем памяти. Как найти все недозаполненное и оценить фронт работ для описателей, в твоей OLAP дрисне?
Схема примерная. Офк набор знаний у всех разный и требования тоже. Речь была о том что "вкат" в этой схеме происходит слева направо, в течении нескольких лет. А не в середину за три месяца, потому что где-то че-то прочитал.
вот тебе типичное решение
на OLAP дрисне я вообще нихуя не буду делать
ни на моей, ни на твоей
>один SQL запрос
>но мы же не хотим простых решений. давайте лучше будем ебаться с EAV
>простое NoSql решение
>пик с десятком говносервисов и стрелочек
Это настолько хуево, что я даже не буду предъявлять за отсутствие в посте конкретного решения. Так говно себе по губам размазывать это надо уметь.
>один SQL запрос
хахаха. ты рили веришь, что у бизнеса будет один запрос за все время?
ну если твой манямирок реально такой, то проще простого
>>129203
>У некоторых товаров недозаполнили свойства. У некоторых телеков разъемы не прописали, у смартфонов объем памяти. Как найти все недозаполненное и оценить фронт работ для описателей, в твоей OLAP дрисне?
Шаг 1: Получение списка всех свойств
Шаг 2: Поиск товаров без всех свойств
Шаг 3: Вывод результатов
ПРОФИТ!
задаса изи. вообще при хорошем знании синтаксиса запрос пишется за 15 минут. при плохом за 30, чатжпт поможет если что. не вижу проблем
>простое NoSql решение
Самое что ни есть простое. Создал коллекцию, дал креды беку — все.
>пик с десятком говносервисов и стрелочек
А что нам не нравится? то есть делать какой-то анализ на продовой базе магазина норм, а пик не норм?
повторюсь, если приходит бизнес и говорит: нам нужна онолитега на oltp — они идут нахуй
>хахаха. ты рили веришь, что у бизнеса будет один запрос за все время?
Я про то что эта задача решается в ОДИН SQl запрос, алеша.
>ШагШагШаг
И? Кто эти шаги будет делать? Где будут храниться результаты шагов? Как пользоваться итоговым результатом?
>Получение списка всех свойств
Ты забыл слово "необходимых". Как ты будешь этот список "получать"?
>Поиск товаров без всех свойств
Ошибка. У НЕКОТОРЫХ товаров нет НЕКОТОРЫХ свойств. У товара А нет свойств 2 и 3, у товара Б 1 и 3, у товара В только 3. Свойства 3 вообще нет в датасете, смекаешь?
>задаса изи. вообще при хорошем знании синтаксиса запрос пишется за 15 минут. при плохом за 30, чатжпт поможет если что. не вижу проблем
А я не вижу запросов. Где запросы, билли?
>а пик не норм?
То что на пике это не норма. Это маняфантазия для долбоебов.
>Я про то что эта задача решается в ОДИН SQl запрос, алеша.
Петя, это ОДИН запрос в монге.
Я помню банке работал, так там отчет формировался тоже за ОДИН SQl запрос. Правда в нем было около 1800 строк, но запрос был ОДИН
>И? Кто эти шаги будет делать?
кому надо тот и будет делать
>Где будут храниться результаты шагов? Как пользоваться итоговым результатом?
на сервере естессно. по ccш подключаешься и смотришь в консольке. причем пот рутом. нужно только onoliteka.rar расспаковать
че неудобно? ну а хуйли ты хотел? какие требования — такой и результат
>Ты забыл слово "необходимых". Как ты будешь этот список "получать"?
охуеть какая сложная задача!
в пострес же нельзя узнать имена всем существующих колонок в бд
>Ошибка. У НЕКОТОРЫХ товаров нет НЕКОТОРЫХ свойств. У товара А нет свойств 2 и 3, у товара Б 1 и 3, у товара В только 3. Свойства 3 вообще нет в датасете, смекаешь?
Это ты только что узнал как документы в коллекциях хранятся?
>А я не вижу запросов. Где запросы, билли?
>То что на пике это не норма. Это маняфантазия для долбоебов.
Как и аналитика на проде. Поэтому в очередной раз для самых самых тупых поторяю — с такими запросами вы идете нахуй
сделать аналитику на проде? а может сразу модели нейросетей крутить?
>это ОДИН запрос в монге
Ну так где он? Пуки вижу, запроса не вижу.
>нужно только onoliteka.rar расспаковать
А с SQL не нужно.
>Как ты будешь этот список "получать"?
>пук
Весомо. Аргументированно.
Дегенерат, ты так и будешь пердеть в тред? Ты либо пруфаешь конкретными запросами и результатами, что на монге-хуенге эту задачу сделать вообще возможно, либо сглатываешь. Все твои охуительные истории про какие-то выдуманные банки, про хуйню и малафью никому не интересны. Своим протыклассникам будешь эту лечку гнать. А тут без реального кода, ты так и останешься вечно обоссанным пиздливым nosql попущем.
в очередной раз для самых самых тупых повторяю — с такими запросами вы идете нахуй
Ну обосрался. Обосрался же? Обосрался. Нахуя дальше на себя то ссать?
Ну так и скажи: не ебу я как это делается в монге, пизданул не подумав, проблематику не знаю, думал оно лучше, да походу нет.
Почему каждый раз так: прибегает очередная nosql маня, ррякает и верещит как же все там заебись, а когда её просят решить малейшую прикладную задачу, мгновенно сливается.
Ну бквально же итт:
>вот задача, вот так она решается на SQL
>а на nosql все это легче и быстрее
>покажи
>пошел нахуй
Стронгли пруфд ноускьюл супериорити. Не снимая штанов, как грится.
У меня вообще-то основная специальность MSSQL и Databricks. Но там где проще использовать NoSQL, я конечно использую MongoDB или Redis или еще что-нить. А иногда тупо parquet в s3 складываешь. А где надо реляционку, то могу и PostgreSQL или MySQL. Но MSSQL — это топ для меня конечно, но не для нищебродов.
Только полные дауны используют один инструмент для всего как серебряную пулю. Поэтому если ты зациклился на сукили и не можешь такой запрос написать для монги — поздравляю, ты обосрался. Причем конкретно. Не нужно свою узколобость пытаться выдать за выдающие знания в БД.
А если ты думаешь, то я по первому твоему кличу побегу писать тебе запросики — ты не просто даун, а полный даун. Поэтому еще раз — иди нахуй.
>прибегает очередная nosql маня, ррякает и верещит как же все там заебись, а когда её просят решить малейшую прикладную задачу, мгновенно сливается.
Лох подорвался, с пеной у рта чёто там доказывает. Успокойте шизика, дайте ему таблетки. А то он горящим пердаком спалит всю хату.
>Через неделю пользователь просит аналитику по продажам дилдаков красного цвета в регионе саратов и твоя монга обмякает
На ---> https://pastebin.com/GfWZ2HG5 а то у тебя пердачелло сгорит ещё больше. Это пример аналитики по продажам в монге.
>бесконечная стена write-only джейсона вместо 10 понятных строк на sql
Все-таки использование джаваскрипта и производных приводит к органическим поражениям головного мозга. Что в коде, что в запросах.
Ваше мнение очень важно для нас, оставайтесь на связи.
>А если ты думаешь, то я по первому твоему кличу побегу писать тебе запросики
Нахуя мне, ты напиши тому анону, которому ты влечивал какая монга в этих задачах охуенная. Я-то ему и "запросики" дал, и что таоке EAV объяснил. Потому что это легко и просто, дело десяти минут.
А ты бегаешь по треду с порванной жопой, хотя мог просто на чилле запостить "легкий и простой" запрос в монгу и закрыть вопрос. А ты чего только не высрал: и "я важный, хуй бумажный", и "мне вас жаль", и "я ничего никому не должен". Платина за платиной.
Так ему не надо. Это у тебя фантазии поскакать на скакать на красных дилдаках в Саратове.
фискирую отсос узколобых даунов, которые не могут в информационные технологии, но любят красные дилдаки
>Вот как жта проблема решается на sql
>на монге можно лучше
>покажи, научи
>пошли нахуй, узколобые дауны
Как называется эта болезнь?
>аноны мне нужно хранить объекты без схемы данных, какое просто решение?
> MongoDB или аналогичные
>не подходит, вдруг попросят аналитику, а я в разработке не шарю, поэтому не могу продумать и создать оптимальное технологичное решение, зато я умею кодить на SQL и могу на проде крутить запросы
Как называется эта болезнь?
КОго ты пытаешься наебать?
>аноны мне нужно хранить объекты без схемы данных, какое просто решение?
> MongoDB или аналогичные
>А ОНО ПОДХОДИТ? Вот так можно?
>АРРЯЯ иди нахуй
> напиши запрос на проде
> иди на хуй. прод не для этого
> ну а ты напиши
Как называется эта болезнь?
>А ОНО ПОДХОДИТ? Вот так можно?
А твоя реляционка может обрабатывать петабайты данных и крутить модели нейросетей?
>>129203
>Вот тебе типичная задача из этой области.
Нужно показывать рекомендации которые посетитель магазина захочет купить. Причём модель должна дообучаться прямо в онлайне. Как это сделать в твоей дрисне?
>и фейсбук
Ну то есть тысяча человек?
А знаешь почему в фейсбуке до сих пор эта дрисня? Потому что она нихуя не следует стандартам и с неё невозможно слезть даже на "такое же но лучше".
Пикрелейтед главные долбоебы индустрии поняли в каком они теперь дерьме
https://www.uber.com/blog/mysql-to-myrocks-migration-in-uber-distributed-datastores/
А могли бы на постгресе с кайфом сидеть, там за это время семь мажорных версий сменилось.
Ты имеешь в виду и монгу и постгрес?
Никто не мешает. Тем более сейчас, когда все в контейнерах.
Тут все зависит от команды на самом деле.
Если у тебя в команде только старперы, которые ничего нового не хотят, но зато умеют хорошо кодить на sql — они будут использовать только реляционку.
Я когда н-цать лет назад пришел в одну контору, так у них все было в бд сделано. То есть схема была вебморда <-> бд. Вся бизнес-логика, весь бэк и все прочее было реализовано функциями и процедурами в СУБД.
Если в команде есть архитектор или просто кто-то вменяемы с мозгами, то будут использовать подходящие технологии под каждый сервис
>Ну то есть тысяча человек?
ну то есть топ-3 посещаемый сайт в мире
>там за это время семь мажорных версий сменилось
да хоть пятьсот. как это помогает решать бизнес задачу? у нас некоторые сервисы до сих пор на 9 крутятся
>ну то есть топ-3 посещаемый сайт в мире
Он что ставит каждому посетителю mysql и заставляет этим говном пользоваться?
>да хоть пятьсот. как это помогает решать бизнес задачу? у нас некоторые сервисы до сих пор на 9 крутятся
А у меня тетя тридцать лет все в блокнот ручкой пишет. Стабильная тема, переводите свои сервисы с постгри на блокноты?
ну вот и переводи, если ты такой тупой еблан
как будто ты каждому пользователю ставишь свои мажорные версии
у тебя есть приложение банка, личный кабинет какой-нить, сайт жкх, да хоть игрулька какая-нить?
зайди к ним на сайт или в приложении посмотри чейнджлог
там нихуя не будет про мажорные версии бд — всем похуй
по популярности в интернете (посты, линкедин, вакансии etc) монго не далеко от постгрес, но даже в сумме они не дотягивают до мускуля
>Ну то есть тысяча человек?
если для тебя это важно, тогда используй монгу. там доля рынка гораздо больше, чем у постгрес
А оракл на первом месте тебя конечно не смутил?
>Number of mentions of the system on websites
>searches in Google Trends
Вот вся статистика, которую нужно знать
https://survey.stackoverflow.co/2023/#most-popular-technologies-database-prof
https://survey.stackoverflow.co/2022/#most-popular-technologies-database-prof
https://survey.stackoverflow.co/2021/#most-popular-technologies-database
https://survey.stackoverflow.co/2020/#technology-databases
Мускуль и монга на дно, постгрес стабильно растет и пару лет назад занял первое место.
Но самый цимес это разница между профессиональными голосами и голосами "вкатунов".
Мускуль: вкатуны 58.40%/профи 45.68%, постгрес: вкатуны 25.54%/профи 46.48%, монга вкатуны 31.32%/профи 28.29%
То есть приличная часть тренда сформирована людьми в технологиях нихуя не понимающих. И как только они матереют и видят реальную картину - они сразу откалываются.
Кстати, оракл по опросам реальных людей, всего 10%. Как так, гугл тренды жи?
>Вот вся статистика, которую нужно знать
Не нужно. Все эти тренды это просто запросы в Google либо на stackoverflow. Поэтому неудивительно что по мускулю и постгрес так много вопросов и поэтому они в тренде. Все они являются вкатунами-нищебродами топящими за что-то бесплатное, в котором нихуя не разбираются. Поэтому приходится идти в Google либо на stackoverflow и спрашивать как это починять и таким образом генерировать тренд популярности.
Как только они матереют, то сразу переходят на что-то серьезное типа скл сервер или оракла. И так как они уже профи, то вопросов задают мало и эти субд в тренды не попадают. К тому же появляются мозги и понимают, что нет универсального инструмента, поэтому где-то нужно использовать редис монгу кафку или даже хадуп с айсбергом. Никто с мозгами конечно не будет проводить онолитеку продаж на продовой бд. для этого есть двх и би инстументы типа табло. Или Яндекс.Метрику или Google Analytics где можно крутить вертеть смотреть воронку продаж
Может сначала читать, а потом пиздеть? Это результат опроса. survey в начале ссылки тебе ни о чем не говорит? Конкретных людей спрашивали: с чем вы работаете, с чем хотели бы работать.
Дальнейшие твои фантазии на тему просто бессмысленны, потому что ты еще на этапе предпосылки обосрался.
>Это результат опроса
>результат опроса
>опроса
Опросил своих домочадцев и питомцев и по результатам этого опросы ты хуесос и говноед.
Сорри, но это результаты опроса, а с ними не поспоришь.
Я вот работаю с MSSQL еще с тех пор, когда он не был MSSQL. С MongoDB лет десять. По паре лет с DinamoDB, Neo4j, InfluxDB.
Но я не участвовал в этом опросе.
Более того, в Сбербанке больше ораклистов, чем ты наберешь участников этого опроса со всего двача.
>SQLite 3 место
Ахахаха. Сериусли?
А ты вообще прочитал что я написал?
Вкатуны, нищеебы и мобильщики идут на stackoverflow спрашивать про свою попаболь и участвуют во всяких опросах, пока серьезные дяди разрабатывают решения на Oracle или MSSQL или даже DB2, это древнее дерьмо кажется в любом топ10 банке, которые сейчас двигают весь ИТ прогресс в рaщке.
Эскуэлайт третье место. Бля, по моему это мем года
Пчел, ну и че ты высрал?
Получилось три варианта:
>рейтинг по гугл трендам
>рейтинг по опросам программистов
>мнение долбоеба с двача
Ты можешь сколько угодно угорать над опросами, но мнение анонимного хуесоса из двачерской клоаки стоит ниже любых гугл трендов.
Да лучше базу по чиркашам на унитазе выбирать, чем слушать таких дегенератов, как ты.
А чем мнение анонимного хуесоса из двачерской клоаки отличается от мнения анонимного хуесоса из стековерфошной клоаки?
а ну да ну да. там же великие погромисты сидят. типа такого https://ru.stackoverflow.com/questions/1563867/%d0%92%d0%be%d0%bf%d1%80%d0%be%d1%81-%d0%bf%d0%be-sql-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b2%d0%be-%d0%b2%d1%82%d0%be%d1%80%d0%be%d0%b9-%d1%82%d0%b0%d0%b1%d0%bb%d0%b8%d1%86%d0%b5-%d0%bf%d0%be-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8e-%d0%b8%d0%b7-%d0%bf%d0%b5%d1%80%d0%b2%d0%be%d0%b9
>Ты можешь сколько угодно угорать над опросами
На каурсере есть курс по дата кволити (советую пройти весь). Там как раз в первой части рассказывают как можно создавать предвзятые опросы, чтобы склонить опрашиваемых в нужную сторону. Например:
Есть пять варианта:
>мнение долбоебов которые гуглят "как найти красные дилдоки в монге"
>мнение долбоебов со стековерфоу, которые из вима выйти не могут
>мнение долбоебов с двача
>мнение русских реперов
>исследование Gartner реального рынка
Ты за какой вариант?
>Я вот работаю с MSSQL еще с тех пор, когда он не был MSSQL.
При Горбачеве что ли? Пиздишь. Первая версия Microsoft SQL Server 1.0 вышла в 1988 году и была совместимой с Sybase SQL Server, выпущенном годом ранее.
Из местных кодеров самый старый Алексей Скуфьин, но даже ему в 1988 было всего всего 15 лет. Несовершеннолетних программистов в СССР на работу не брали.
NoSQL это высер маркетологов, который технический специалист употреблять не должен. Есть базы реляционные и нереляционные (документные, кэши "ключ-значение", графовые и т.д.).
Программистишки поняли, что хранить комменты из гостевухи или чата в реляционной БД не самая лучшая идея и создали специальные базы вроде Mongo для этого.
Но исторически реляционные базы появились позже нереляционных.
>вышла в 1988 году
Ага вышла и сразу у всех в проде моментально оказалось причем даже даже в совке
сразу видно что ты зеленый и даже не представляешь какой был интернет и как вообще работали в ИТ в нулевых, не говоря уже про модемный интернет и 90-ые
короч, в нулевых в рф было полно Sybase
кубернетисов не было. вообще виртуализации не было (на проде лет через 3-5 начали только внедрять)
ты покупаешь дорогущий здоровеннный мейнфрейм от IBM и там у тебя будет либо Sybase либо db2
оракл юзали для второстепенных сервисов как сейчас постгрес
>Я вот работаю с MSSQL еще с тех пор, когда он не был MSSQL.
Обосрался - обтекай, долбоеб. Мне твои оправдания неинтересны.
Обосрался прямо тебе в ротик мелкобуква, иди под струю мойся.
2) Во время запроса всё таблицы базы данных загружаются в память? А не приведет ли это к нехватке памяти, если там огромные таблицы?
1) Очевидно нет, это же не redis и не memcached.
2) Загружается кеш, а не вся таблица. Размер query cache'а можно тонко регулировать в конфигах. Там много тонких настроек, от количества открытых файлов до innodb размера буфера, размер временных таблиц, размер логов и т.д.
Ну короче! Это всё регулируется через my.cnf в зависимости от ресурсов сервера, подгоняется под машину. Если ты слишком много чего-то укажешь, например 2 гб кеша а памяти только 1 гб, он либо уйдёт в swap, либо просто завершится и не будет работать. У innodb по-моему минималка 1 гб, но это не точно.
Уже пытался отвечать повышенное время отклика, тупеж параллельных вопросов да и хз что еще, тут ответ походу конкретный, но по ощущениям это морской бой догадками)
Сорян если дублирую вопрос из одного треда в тред
Что за вопрос вообще такой уебанский? "бд с низким потреблением"
Как БД блядь может быть с низким потреблением? У бд кеш либо есть, либо нет. А если есть, то его размер настраивается.
Особенность может быть у запросов, которые "потребляют мало кеша". Если у тебя десять записей в таблице, а в кеше только три, то это "низкое потребление" вызвано повторением одних и тех же запросов, между прочим для этого кеш и придуман.
А если у тебя миллиард записей и на каждый запрос выбирается случайная, то у тебя к нагрузке на диск и проц добавляется куча мусора в памяти и затраты на поиск в этой куче того, чего там нет.
>Что за вопрос вообще такой уебанский? "бд с низким потреблением"
Не мой вопрос, не я задаю тут правила
Usage count кэша маленький
Главное свойство спрашивается
>Не мой вопрос
Да ладна. Бессмысленной хуйней он от этого быть не перестает. Так что либо спрашивал долбоеб, либо ты все переврал.
>Usage count кэша
Опять какая-то хуйня. Нет такого термина "usage count". Что это блядь вообще должно означать? "Маленькое использование" кем? Тем кто сохраняет в кеш или тем кто достает? Ты понимаешь что это полностью противоположные ситуации?
Короче. "бд с низким потреблением", "Usage count" это тарабарщина. Если ты ДЕЙСТВИТЕЛЬНО на собесе это услышал, то тебя просто завалили хуйней, тебе туда не надо. А если ты сам это придумал, то новости печальные - ты профнепригоден, надо доучиваться.
Я прихожу на пересдачу уже третий раз и мне уже абсолютно поебать на формулировки этого препода.
Изначально вопрос звучал так: "В некой бд usage count буферного кэша низкий, чем она отличается от бд с нормальным использованием буферного кэша?"
На просьбу "повторите вопрос пожалуйста" ответ "а я забыл / а ты че не запомнил / надо было записывать". Уточняющие вопросы по вопросу идут туда же.
Я никогда по-хорошему не работал с бд, usage count скорее всего указывает на число записей в кэш или к числу обращений к кэшу, я думаю, что скорее первое. Условие в том, что абстрактная бд довольно мало использует буферный кэш и в этих условиях мне нужно отвтетить, какое её главное свойство.
Мои догадки:
1. Данные почти всегда свежие
2. Возможно, кэшировали индексы и поэтому такой низкий usage count, что бы это не значило
3. Т.к. бд почти всегда обращается к тейблам и объектам, то несоответствие данных почти исключено
4. Какая-то неведомая "оптимизация" через три пизды, которая на внятный ответ не похожа
Оказывается нужно указать критерии этой бд...
>2) Загружается кеш, а не вся таблица. Размер query cache'а можно тонко регулировать в конфигах.
Регулировать можно размер innodb page cache.
А query cache - средство для оживления всяких drupal-ов. Отдельная и несколько штука.
Насколько спорная, что в mysql 8 ее попытались выпилить, но в mariadb понимают что проекты бывают разные.
Причем, все это не отменяет кеш ОС.
>А не приведет ли это к нехватке памяти, если там огромные таблицы?
инвалидация кеша ОС считается бесплатной. Настолько, что он есть, но в linux программы top не показывают этот кеш.
А вот innodb page cache надо как-то подбирать экспериментально под свою нагрузку.
Куда в mariadb проебали настройку innodb_dedicated_server я понятия не имею, но ты ознакомься с документацией от Oracle Mysql
usage count ничего не означает. Есть термин "cache hit rate". Это отношение количества запросов удовлетворенных кешем к общему количеству.
Догадки твои - это не догадки, а такой же информационный шум, как и вопрос. С тем же успехом препод мог тебя спросить: хуй сосал, селедкой пахло? А потом сказать что: хуесосам незачет.
Не сходить ли тебе нахуй? Вместо того, чтобы хоть что-то предположить, рассматривая обе версии, что значит то или иное, ты просто срешь в переполненный унитаз, в результате чего твоя жопа и ноги в том же говне. Ты сюда пришел показать умственное превосходство или кому-то помочь, с тем же успехом ты можешь устроиться на линию доверия и вместо помощи человеку направлять его на суицид. Крч, ты не меньший долбоеб, чем я и препод, задающий мне эти вопросы.
> В чем особенность бд с низким потреблением буферного кэша?
такого общепринятого термина нет.
препод проверяет слушал ли ты его вообще - какую-то свою теорию создал
не совсем понятно это кеш записи или чтения.
Допустим, ситуация с большим буфером записи и отложенной записью считается нетипичной для субд и ее исключаем.
Тогда остается чтение. Субд мало повторно читает.
Теоретики делят СУБД по характеру использования на OLTP и OLAP. Описанное характерно для OLAP.
>Ты сюда пришел показать умственное превосходство или кому-то помочь,
А я всегда и прихожу показать умственное превосходство.
Просто в данной ситуации мне нравится удовольствие от того, что я понял пусть даже немного шизоидные мысли какого-то левого препода.
Помочь - никогда.
Пчел, еще раз.
Препод тебя спрашивает: хуй сосал, селедкой пахло? КОгда ты пытаешься спрыгнуть, говорит: отвечать да или нет. А после твоего ответа: хуесосам незачет.
Твои действия? Ты идешь на двач спрашивать пахнет ли хуй селедкой?
Ни то, ни другое, я схожу с ума, я нихуя не понимаю и знаю, что у него есть какой-то конченый ответ, вокруг которого я ходил на протяжении пяти часов.
На вопрос "Как реализовать шардирование в базовом постгре" ответом было "partitioning". -_-
Ответ такой же конченый, как и вопрос
Шардирование делается на уровне кода, бд про это не знает.
Партиции делаются внутри бд, код про это не знает.
Твой препод долбоеб. Ты, случайно, не в епаме курсы проходишь?
Неа.
Догадка, что мы много пишем мало читаем верна и от этого кэш маленький, следующий вопрос: "что нам говорит о бд то, что у нас много записи мало чтения?"
Мысль, что это транзакционная бд, отклонена >.<
Как лучше поступить:
1) Завести 2 таблицы: одна хранит только текст, другая информацию о тексте (название, размер и т.д.);
2) Хранить все в одной таблице.
Спасибо, друг, от души.
Гугли у постгреса TOAST, эха хуйня делается автоматически на уровне СУБД. С какой целью ты хочешь делать на уровне приложения две таблицы - непонятно
Храни в еластик серче. Бонусом получишь, что по тексту искать можно будет.
>>126874
Спасибо. Сделал CTE с желаемыми свойствами, к ним соединил свои свойства, сгруппировал по id продукта количество соединенных свойств и сделал HAVING количество свойств = количество фильтров, чтобы отобрать только те продукты, которые подходят по всем фильтрам. К этой уже таблице соединил продукты. Вроде заебись получилось.
Проблему с разными типами решил через jsonb поле, которое хранит примитивные типы. Со стороны ORM даже нет разницы json там или нет.
Тебе жи все показали >>126943 https://dbfiddle.uk/xRkE5wzL
У тя подсчет количества пройденных фильтров бисплатный, пушо все равно дистинкт делается. И подсчет количества заданных фильтров бисплатный, пушо они в cte лежат, да и сколько там этих фильтров? Десять? Двадцать? А найденных товаров может быть десятки тысяч.
"Если текстовые файлы, которые нужно прочитать, находятся на сервере, то из соображений безопасности эти файлы должны либо размещаться в директории базы данных, либо быть доступными для чтения всем пользователям."
Куда класть файл-то?
Я даже не ебу куда mysql сохраняет файлы существующих БД.
У меня нет никаких папок data.
> Куда класть файл-то?
Для начала надо решить, насколько тебе важно держать в базе данных логику, а не собственно данные, и точно ли нельзя никак обойтись без этого. Обычно этим должно заниматься приложение, разве что у тебя какой-то особый кейс с аналитикой.
> Я даже не ебу куда mysql сохраняет файлы существующих БД.
Значит, надо узнать. Копай дальше документацию.
>"Если текстовые файлы, которые нужно прочитать, находятся на сервере
Это оптимизация на спичках.
Просто не используй load data local, а загружай через клиент
Имеется ввиду, что есть возможность заставить сервер читать файл и в этой ситуации загрузка еще более оптимизирована чем обычно, но тебе это не надо.
суп
помоги нубоэникею.
установил это
установил dbeaver
даже сделал это
https://qna.habr.com/q/1110078
когда создаю сервер то ругается
чо делать плз помогите.
У тебя сам постгрескл на локалхосте есть или ты просто установил pgadmin?
pgadmin - это клиент к постгресу
Браузер открывает 80-й порт, а постгрес у тебя на 5432.
Проверь, запущена ли служба (в Windows Администрирование, Службы, в Linux - через systemctl).
Проверь подключение через psql.
Установка на Windows: https://docs.rkeeper.ru/rk7/7.7.0/ru/ustanovka-postgresql-na-windows-29421153.html
Установка в Ubuntu: https://selectel.ru/blog/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04/
Проверь все шаги, обрати внимание на порт, имя юзера и пароль. Для работы с БД сервер должен быть запущен.
сделал ровно то же самое. за одним исключением: я все галочки за раз прожимал, в статье они по одному прожимались с дровами. установил один драйвер. малаца. запусти заново. выбери вторую. repeatx2
и базу пустую создал. после этого ругаться перестало на базу. так понял, на локальном компе есть и база, и сервер.
только вот 1с сервер говорит: нету
И в строке браузера тоже ввожу, ничего.
Как серверу имя присвоить, чтобы введя в 1с его имя, или ip компа можно было базу подключать?
>Вот тебе типичная задача из этой области.
>У некоторых товаров недозаполнили свойства. У некоторых телеков разъемы не прописали, у смартфонов объем памяти. Как найти все недозаполненное и оценить фронт работ для описателей, в твоей OLAP дрисне?
Это не типичная задача, а какая-то двачерская маня хуета. Зачем это вообще нужно? Никто такой хуетой заниматься не будет
Я вообще не понимаю о чем спор. Как будто некоторые люди где-то в начале 10-го годов остались и пилят какой-нибудь говно магазин на джумле с одной единственной базой, в которой и структура сайта хранится, и складской учёт ведётся, и продажи, и аналитика, и вообще все.
У нас бизнес по оптовым продажам для b2b. Клиентов дай бог 3000 наберётся. Сайт работает на MongoDB, бэкенд сервисы на PostgreSQL, вся аналитика на Clickhouse.
И где ты нашел "документацию к SQL"?
>В SQL ты не ограничен в запросах, можно хоть 5-ти этажные строить
А зачем? Есть какие-то бизнес-кейсы? На практике какие-то сложные и многосоставные запросы - это большая редкость. Тот же функционал монги и ORM для реляционок покрывает все потребности
SELECT
first_name,
last_name surname
FROM customer;
Для столбцов юзаю, для нутрянки фрома как правило нет
Портянки запросов в бизнесе как раз востребованы, чел. Я тебе говорю как сменивший 5 работ.
мимо шел
Вот тебе задача, монгошиз: нужно сгруппировать таблицу и выдать первые пять записей из каждой группы.
>Есть какие-то бизнес-кейсы?
Конечно, это в основном какие-то отчёты
> Тот же функционал монги и ORM для реляционок покрывает все потребности
Реляционка тебе все равно нужна будет, если у тебя будут транзакции, а у большинства бизнесов они есть. А дальше - значем тебе 2 базы данных, когда можно обойтись одной? Шах и мат.
маня задача с собеса?
В реальной жизни такой хуйней никто не страдает.
>>146175
Я только за последние полтора года пять проектов сменил.
Бизнесу глубоко похуй у тебя портянка запрос или три строчки.
Они хотят какую-то реальную задачу решить.
Кто-то эти задачи решает портянками.
А потом компания вырастает, и твои портянки начинают разъезжаться
Вроде бы один и тот же отчёт, просто в разных разрезах, но показывает разные цифры
Начинаешь проводить аудит, а там какой-то потяношиз нахуячил говна на 3к строк
Привет
>маня задача
Задача типичная. Классика жанра.
Но это ведь не важно, правда? Потому что никто тебя, долбоеба, не спрашивал про степень маманястости задачи. Тебя спросили: можешь ли такое решить с помощью монги? Судя по пустопорожним кукарекам - не можешь.
Ну что, переходим к этапу "я никому не должен ничего решать, аррря"?
>>146424
>А дальше - значем тебе 2 базы данных, когда можно обойтись одной? Шах и мат.
Под себя серешь. принёс картинку с сайта крупного ритейла. У них там зоопарк sql+nosql решений.
Кстати у меня вот тоже картинка есть. А дальше что? Под капотом сайта что работает? А запросы кто формирует? Вряд ли при каждом переходе страницы сидит кодер на sql и пишел свой скрипт
>Задача типичная.
Нетипичная. Потому что тут вся сложность не в группировки и сортировке, а десятках джойнов, так как это все в разных таблицах храниться. С учётом того что в монге все это хранится в одной коллекции, запрос будет все две строчки: группировка и слайс
>Тебя спросили: можешь ли такое решить с помощью монги?
Да, делал абсолютно аналогичную задачу. нужно было взять все продажи за час по разным категории и взять топ 10 в каждой. Делал все это на бэке через ORM
>запрос будет все две строчки: группировка и слайс
Где запрос? Так-то пиздеть не мешки ворочать, я вот точно говорю что запрос будет в джва слова: слайсировка и хуйс. Верим?
>Где запрос?
Так и где же? Весь тред уже засрал как ты на sql можешь и это написать и то написать и сё то же. А по факту ни одной строчки
>У них там зоопарк sql+nosql решений.
Это не значит что оно там нужно. Вероятнее всего это какой-то такой же кодерок решил показать какой он умный и нахуярил всех технологий, которые на конференции услышал.
Я так же видел зоопарк sql + nosql на одностраничном складе фотографий.
Регулярно помогаю анонам в этом треде с запросами. Вот это я писал, например: https://dbfiddle.uk/xRkE5wzL
Я знаю как минимум три способа решения этой задачи на SQL. И все они за рамками автосгенеренных ОРМ крудов. Мне просто было интересно как эту простейшую задачу решит монгохуесос. Судя по всему никак не решит. Потому что он похоже и не монгохуесос вовсе, а просто шизик, который эту монгу в глаза не видел.
>Делал все это на бэке через ORM
Это кинец
Гонять сотни мегабайт по сети только чтобы протолкнуть своё хипстерковое решение - это просто вершина тупизма :(
Я даже не знаю почему компании ведутся на такую хуйню. Ведь можно нанять одного базиста + одного бекендера + одного фронтендера + одного мобильщика. ВСЁ!
На хуя компания такой огромный и раздутый штат айтишников? Ведь одной базы и одного сайта достаточно для любых нужд.
>>146894
>Гонять сотни мегабайт
А почему не триллионы? Ты вообще знаешь как ORM работает?
>>146892
>Я знаю как минимум три способа решения этой задачи на SQL
Ты про манязадачу с двача или про типичную задачу реального бизнеса?
Если про типично реальную задачу тогда берём вот такую функциональность >>146712
Тебе нужно вывести на сайт топ пять товаров из трех самых популярых категорий этого пользователя или этого города, если незалогинен. База данных нормализована. Плюс нужно проверить остатки на складе. Ты же не будешь как долбоёб предлагать товар на главной странице которого уже нет. Цены динамические зависит от устройства пользователя, города, категории клиента, время года, суммы его покупок за год. Скидки и бонусов подтягивается через api сервиса СЛК (Сервил лояльности клиентов)
жду хотя бы одного решения
>А почему не триллионы? Ты вообще знаешь как ORM работает?
Я-то знаю, ты похоже не знаешь, раз качаешь весь датасет к себе на бэк. Причем тут вообще ОРМ? От него ни холодно ни жарко.
>Я даже не знаю почему компании ведутся на такую хуйню.
Потому что на конференции сказали, очевидно же. После эпидемии микросервисов об этом даже глупо спрашивать.
>Я-то знаю, ты похоже не знаешь, раз качаешь весь датасет к себе на бэк
Вся база качается сразу. Чтобы два раза не ходить
Монгошизохуесос.
Все что ты тут пытался навалить ПРЕДРАСЧИТЫВАЕТСЯ специальными сервисами. Долбоебу понятно что вычислять все это говно по запросу пользователя тупорылейшее занятие. Так вот после всех этих вычислений остатков и хуятков, у тебя получается таблица с товарами, которые гарантированно можно показать клиентам. И их блядь больше пяти, а показать нужно по пять в каждой категории.
И ты пол треда срешь какой-то хуйней, но никак все не можешь высрать простейший запрос, который возьмет твои джейсончики в монге, сгруппирует и выведет по N записей в каждой группе.
Ты весь тред засрал уже, а реальные задачи для бизнеса так и не решил.
Какая-то двачерская маняхуета. Нахуй это бизнесу нужно? Ебать ты Даун конечно. Или ты просто кичишься своим знанием sql? Ну так семь INNER JOIN написать любой студент первого курса сможет. Стажеры Дата аналитики и то лучше запросы пишут.
>ПРЕДРАСЧИТЫВАЕТСЯ специальными сервисами
А то мы речь, хуесос.
Я ведь не монгошизохуесос, чтобы как тупой еблан всё делать на монге.
И не постгресошизохуесос, чтобы как тупой еблан всё делать на постргрес.
>Цены динамические зависит от устройства пользователя, города, категории клиента, время года, суммы его покупок за год.
Ну вот, а ты говорил для многоэтажных запросов бизнескейсов нет, а сам описываешь
>пук
Без запроса твоя шиза скипается. Кому нахуй интересно читать твои оправдания твоей криворукости и тупизны.
Ну если у тебя 100 пользователей в твоем онлайн магазине, то в принципе нормально. Иначе при десятках а тем более сотнях тысяч пользователи они будут заходить на сайт и ждать несколько секунд пока твои цены рассчитаются при каждом переходе на новую страницу. тут нужен распределенный key-value чтобы в оперативке все считать — по опыту могу сказать что Ignite отлично справляется с этим. либо какой-нибудь ml решение, ну это тоже не про реляционку. Суть примера в том что ни одна БД в вакууме решает проблему бизнеса. Ни монго ни постгрес ни любая другая.
Но для манязадачки с собесов в принципе пойдет.
>распределенный key-value
>либо какой-нибудь ml решение
>либо
Пиздец, прямо блядь две альтернативы.
Какое мл решение, чушпан? Ты там совсем ебанулся? С каких пор "ml решение" более быстрое или более распределенное?
Бля с каждым твоим постом все более убеждаюсь что ты просто пациент дурки, который рекламы курсов обчитался.
Плохо когда ты постгресошизохуесос и нихуя в технологиях не разбираешься, да?
Иди дальше пиши свое говно по группировке таблицы и выдаче первых пять записей из каждой группы.
>распределенный key-value
>чтобы в оперативке все считать
Чел, если ты в оперативке считаешь, то твой кейвалью не распределённый, он в твоей оперативке. А распихал по микросервисам ты его потому что "распределенный" звучит круто.
>чтобы в оперативке все считать
тогда тебе ничего не мешает выгружать датасет в оперативный кэш из обычного SQL
>Чел, если ты в оперативке считаешь, то твой кейвалью не распределённый, он в твоей оперативке
Охуеть! Неужели?
>>146964
>тогда тебе ничего не мешает выгружать датасет в оперативный кэш из обычного SQL
Мешает. Данных очень много, а расчёты нужны моментальные. То есть задержка даже не секунды, а миллисекунды. Кэша твоего лэптопа не хватит, поэтому ты распределяешь данные по оперативке десятков или сотен машин.
Конечно это не всем нужно. Если ты делаешь магазин для ИП Ашот и Ко, то это на хуй не надо. Можно все сделать на пэхэпэ и постгрес
Слушай, ты хоть кабанчика почитай, что ли. Ты же вообще нихуя не понимаешь, как работает сеть, как хранятся данные, несешь хуету про машин лернинг для сраного кэша, вообще охуеть.
>Мешает. Данных очень много, а расчёты нужны моментальные.
Бля, больше десяти лет уже прошло, а джаваскрипт макаки все еще на серьезном ебале думают что мапредьюс это супир быстро и всем дает посасать.
>Данных очень много, а расчёты нужны моментальные
Рекомендательные системы обычно лопатят кучу данных и подготавливают ответ оффлайн.
Просто делай 30 рекомендаций и фильтруй онлайн по наличию товаров.
Выгода в том, что ты можешь намного более сложные штуки подключить чем ты смог бы закодировать в SQL
>Я так же видел зоопарк sql + nosql на одностраничном складе фотографий.
ты про gallery2 ?
http://codex.galleryproject.org/Gallery3:Features.html
Ну он рулил, хотя и представлял из себя ORM-шизу.
Но сейчас-то ВЕЗДЕ так.
В ОРМ нет никакой шизы. Это просто ДРУГАЯ задача. Генерация простых запросов за тебя. Кайф же.
Даже когда ни ты ни твоя ОРМ не можете написать рекурсивный запрос и тупо выкачиваете все данные на бек - это не шиза, это просто криворукость и лень.
А вот когда криворукость и лень преподносятся как ПРАВИЛЬНЫЙ способ - вот это шиза.
То же самое и с технологиями. Если эта замечательная технология делает лучше/быстрее просто вот так. То офк надо брать. Только вот законы физики не наебешь, и в 99% случаев в комплекте идут ебейшие недостатки. Типа закупки нескольких терабайт ecc оперативы для твоего охуенного "RAM кластера", который мапредьюс делает.
Я вот лично ничего против монги не имею, но каждый раз как прибегает монгохуесос и заявляет что монга что-то делает лучше. Он не может с её помощью решить ни одной прикладной задачи. Бегает по треду, орет и постит смешные картинки. При том то на SQL все это делается любым интерном за пять минут.
>В ОРМ нет никакой шизы. Это просто ДРУГАЯ задача.
Я знаю. Просто нам это не нравится.
Она усложняет работу всех тех, у кого БД в фокусе.
>с её помощью решить ни одной прикладной задачи
А была хоть одна ПРИКЛАДНАЯ задача?
Написать иннер за 5 минут — это манязадача с собеса.
Плохо когда ты постгресошизохуесос и нихуя в технологиях не разбираешься, да?
Это не мапредьюс, а кейвелью, поэтому да, это супир быстро и всем дает посасать.
Никак.
Во первых: это вообще незаконно. 426 ГК РФ. Но это права потребителей, кого в этой стране вообще права гречневых ебут.
А вот во вторых: если тебя и не нахлобучат по 426, то тебе по этим ценам бух отчетность писать и НДС платить. Разная цена = разный НДС. На один и тот же товар с одной и той же закупочной. А это уже уклонение от налогов со всеми вытекающими.
Вот тут-то тебя выебут без смазки, и крыша никакая не поможет.
Что это за отборная наркомания?
>Во первых: это вообще незаконно.
В перекрёсток зайди в центре Москвы и где-нибудь на окраине в Твери — цены разные. И даже в одном магазине цена для некоторых товаров разная для анонимного покупателя и идентифицированого, который карту лояльности прокатывает.
Тоже самое с маркетплейсами. Много раз было когда у меня цена одна, а у друга-брата-свата в этот же момент времени, но в другом регионе немножко другая. Если у тебя подписка есть, цена третья. А если Яндекс Pay каким-нибудь оплатишь вообще другая цена.
ГК не нарушается, не переживай. Так как цена реально будет одна и та же абсолютно для всех. Это просто акция для жителей конкретного региона. Или персональные скидки для всех анонов, кроме тебя.
>то тебе по этим ценам бух отчетность писать и НДС платить
Это не проблема в век информационных технологий. Ставишь задачу айтишникам и они делают любым интерном за пять минут.
>Или персональные скидки для всех анонов, кроме тебя.
Сказочный долбоеб. Будешь в налоговой объяснять почему у тебя с партии товара недоплата НДС идет. Хотя... до этого никогда не дойдет, потому что еще на этапе идеи главбух тебе леща въебет, сидеть-то ей а не тебе, лол.
Ты бы знал какая ебля оформлять бонусную программу по документам. Там год юридической подготовки минимум уйдет. А всякие "платиновые" статусы на самом деле по документам нихуя не статусы, а какие-нибудь "услуги".
Чел ты похоже тупой даун который живёт в каком-то манямирке и с реальным миром не взаимодействуют
Я тебе реальный примеры привёл.
В Перекрёсток зайди. Там на ценнике две цены.
Одна для всех, другая только для тех у кого есть карта лояльности.
НДС тебе сложно платить? А кого это ебёт?
Мудила гороховый, ценник это публичная оферта. А бонусная карта это следствие оформления ДОГОВОРА.
Цена на ценнике только одна, это должно быть самое крупное число. Это публичная оферта, по этой цене тебе обязаны продать товар по закону. Второе/третье/перечеркнутое число это не цена, а просто рекламная цифра, никакого юридического смысла она не несет.
А вот снижение основной цены и сумма за которую тебе на самом деле продадут товар определяется заключенным тобой ранее договором, при подписании которого тебе и выдали "скидочную карту", статус которой тоже должен быть прописан в договоре.
>ценник это публичная оферта
>Второе/третье/перечеркнутое число это не цена, а просто рекламная цифра, никакого юридического смысла она не несет.
А кто-то спорит разве? Всё именно так. И я так написал. Ты жопой что ли читал?
Вот смотри один и тот же товар в двух разных регионах.
Ценник в 1279₽ , он же публичная оферта, одинаковые для всех.
Никакого ущемление прав какой-либо группы лиц нет. Все согласно закону.
А далее просто рекламные цифры, которые юридического смысла не несут, но тем не менее именно по этим рекламным цифрам покупатель приобретёт товар.
И я говорю как раз вот про динамическое ценообразование этих рекламных циферок.
>Ты бы знал какая ебля оформлять бонусную программу по документам. Там год юридической подготовки минимум уйдет.
Ты даун поэтому у тебя год уйдёт. Берём любую продуктовый сеть, где каждый божий день есть скидка на некоторые товары для всех, на другие товары для владельцев карт лояльности, скидки на промо товары, скидки на товары с почти истекшим сроком годности, скидки за баллы, за большую сумму покупки, за минет твоей мамки. И все это меняется ежедневно, а не раз в несколько лет, пока ты тормознутый даун будешь юридическую подготовку делать.
>Берём любую продуктовый сеть, где каждый божий день есть скидка
И эти скидки вместе с оформлением ООО в комплекте идут?
Я когда в не самом крупном ритейлере работал, там только 1С макак было тридцать штук. Это только тех кто инструменты для бухгалтерии писал. Самих бухгалтеров я вообще хуй знает сколько было - отдельный офис трехэтажный.
Там был АРХИВ нахуй с архивариусом, потому что квартальная отчетность это пятьдесят КОРОБОК с мукулатурой, ебучий трехметровый стеллаж. И храниться все это говно несколько лет должно, чтобы если че можно было за любой косяк нахлобучить.
Меняется у него блядь ежедневно. Само ебать меняется. Ну ты и выдал, долбоеб.
>по этим рекламным цифрам покупатель приобретёт товар
Если заключал договор. ДОГОВОР, слепой ты долбоеб. И именно в этом договоре четко должно быть описано по каким правилам будет меняться цена.
Нельзя блядь в договоре написать: ну кароч наша нейросеть будет на рандоме ценник хуярить, окда? Там указываются конкретные числа: при покупке на сумму от... каждый потраченный рубль соответствует скидке в сумме... и все это должно быть отражено в отчетности, буквально с указанием дат предыдущих покупок, на основе которых сформирована скидка. С отдельной еблей в очко если происходит переход на следующий год.
А самое главное что это все только при СНИЖЕНИИ цены. Не дай аллах тебе цену хоть на рубль повысить. За такие фокусы сразу пизда. То есть речь идет не о "расчете цен", а только о "формировании скидки".
А при расчете исходной цены нельзя, например, использовать данные конкурентов. За такое тебя нахлобучит уже ФАС. И им похуй будет нейросеть там тебе цену формировала или мясной долбоеб. Можешь загуглить "картельный сговор роботов". Несколько лет назад крупных ритейлеров ебнУли и поимели с них немножко денежек за такую хуйню. И на все отмазки типа "ой ну знаете это жи все кампудахтер вычисляет, автоматически" было строго похуй.
Как можно быть таким тупым?
Этот тред про IT. А конкретно про базы данных и про данные в них.
И как один из примеров как можно использовать эти данные для динамического ценообразования.
Какой на хуй договор? Какой на хуй ГК? Ты ёбнулся что ли?
Ну я бы тебе конкретный пример привёл на Яндекс маркете, что разные покупатели видят разную цену на один и тот же товар и соответственно купят его по разным ценам.
Хули ты тут тред засираешь?
Иди засуди Яндекс маркет перекрёсток ozon и прочие крупные ретейлы.
Потом засудили авиакомпании отели такси. РЖД конечно не забудь.
Ты что даун что ли запугиваешь двачеров фасом, лол!
Или хватит пиздеть и просто иди на хуй.
>А при расчете исходной цены нельзя, например, использовать данные конкурентов. За такое тебя нахлобучит уже ФАС.
ЛОЛ! Мальчик похоже насмотрелся голливудских фильмов про IT. Практически во всех компаниях что я работал есть целая команда которая занимается парсингом сайтов конкурентов и всех прочих что может принести пользу. И скажу даже по секрету, все с удовольствием качали слитые базы Яндекс доставки и прочих чтобы использовать для анализа и обучения своих моделей.
>Можешь загуглить "картельный сговор роботов". Несколько лет назад крупных ритейлеров ебнУли и поимели с них немножко денежек за такую хуйню.
Один случай из 1000. Чё там ФАС сделает?
>Доказать сговор удалось благодаря анализу настроек аукционных роботов – у обеих компаний они были практически идентичны. Роботы делали все, чтобы завершить торги в первую же секунду со снижением цены в 0,5% от максимальной (начальной). Обеим оптовым компаниям грозили штрафы по 35 тысяч на руководителей организаций и порядка 330 тысяч рублей на каждое юрлицо.
Ахаха, как страшно. Да и похуй. Велью от инсайтов полученных из этих данных гораздо больше на несколько порядков.
>Hoff
>наши категорийные менеджеры предпочли верифицировать вручную, так как экспертная оценка в этом случае была крайне важна
Там вообще МЛ используется для "поиска аналогов", и то бля все в ручную потом обрабатывается. Никаких цен Мл не формирует. Тем более индивидуальных.
>Азбука вкуса
>Система разработана международной компанией GoalProfit
>Sorry, this page doesn't exist.
Сайт системы редиректит на 404. Наверное что-то случилось. ГООООООЛ.
Опять же, даже если сайт лежит "временно/случайно" речи об индивидуальных ценах нет. Как и следов использования МЛ.
>Хуяндекс.Хачси
>Мы решили позаимствовать у машинного обучения метод ближайших соседей для задачи регрессии
Это литературно единственное применение МЛ в их ценообразовании. Буквально "рядом лежало". Это блядь уже комедия какая-то - эти долбоебы написали P.S что настоящее МЛ у них используется... в другом месте, хули ноете.
Последняя статья вообще про муррику. И опять непонятно причем там вообще МЛ. Ну придумали хитрожопые барыги менять цену в зависимости от расстояния мобилы до магаза, ну написали скрипт. Нахуй тут "лернинг" уебался. Разве что обучение клиентов отключать отслеживание в мобиле.
Короче ты сам себе в штаны насрал. Никто не использует МЛ для формирования цен. И уж подавно никто не использует МЛ для формирования индивидуальных цен. Динамическое ценообразование офк есть, этого никто и не отрицал, только это процесс сложный и ограниченный определенными правилами, МЛ в нем нахуй не нужен. Вот сопоставить товары по фото это пожалуйста, маршрут "угадать" вместо честного просчета тоже да. А цены слишком точная и важная хуйня, чтобы её генератору шума доверять.
Вообще по откровенном попыткам нагнать хайп в этих статьях можно сделать довольно точный вывод о том кто этот кал потребляет. ГОВНОЕД, нахуя ты эту поебень читаешь? Там пидарасы уже даже не стесняются - тупо лепят тег "машинное обучение", а ты жрешь эту хуйню, еще и сюда тащишь. Фу блядь, фу нахуй.
Ты какую-то хуйню загуглил. Какие нахуй аукционы, ебанько?
Вот о чем речь была
https://www.vedomosti.ru/business/articles/2017/09/07/732731-robotov-sgovore
>Управление Федеральной антимонопольной службы (ФАС) по борьбе с картелями в середине августа провело встречу с вендорами и ритейлерами электроники. Цель – обсудить программы для мониторинга и сравнения цен в интернете, так называемый парсинг.
>служба установила, что некоторые торговцы и поставщики используют роботов, чтобы определять цены товара на полке или контролировать розничные цен на продукцию конкретного бренда
И этим "конкретным брендом" был Альберт Эйнштейн LG
>Участники рынка с опасениями ФАС не согласны.
Еще бы они блядь были согласны. Но, спойлер, их согласие никого не ебало. Им въебали несколько лямов штрафа каждому.
И у нас руководство всех программистов собрало и стало решать как бы так наебать, чтобы продолжать парсить. Думали гадали, в итоге только один вариант рабочий - парсить должна сторонняя компания, а ритейлеры у неё будут покупать "просто цены", хуй знает чьи. Офк смысл от такого парсинга сильно теряется. Но когда любой стукачек может выставить контору на несколько лямов штрафа, приходится хавать.
>Чё там ФАС сделает?
А будешь выебываться - изымут сервера на "проверку". Ботов искать зловредных. Ты думаешь нахуя закон о возвращении данных в родную говень был принят?
С налоговой веселее. Пишут что недоплачено налогов на лям из трехсот, и похуй что вы и три ляма готовы прям щас отдать, только чтобы отъебались. В офис прибывает НОМО и усердно ищет пропавший лям.
>Во первых: это вообще незаконно. 426 ГК РФ
>Динамическое ценообразование офк есть, этого никто и не отрицал
>Внимание! Я не обосрался! Повторяю! Не обосрался
> Никаких цен Мл не формирует
> сайт не открывается
> Это блядь уже комедия какая-то
> статья вообще про муррику
ЛОЛ! Что за манявры пошли?
Мы разве обсуждали как у кого-то и на чем цены формируются?
Похуй что они там используют. Хоть МЛ, хоть сприпты на фортране.
Вопрос был про динамическое образование цен.
Что одному пользователю показывает одну цену, а другому пользователю показывает другую цену.
Что днём цена одна, ночью другая. Что на iPhone одна цена а на андроиде другая.
На что ты ответил, что не существует и не законно, а потом неожиданно переобулся.
>>148265
>>служба установила,
Ну я установил что ты пиздабол который обдристался на дваче при всех и что дальше?
>Им въебали несколько лямов штрафа каждому.
А чего не триллиардов? Пизди побольше для важности
>Думали гадали, в итоге только один вариант рабочий
Ты при этом тоже всем рассказывал про договоры оферты и запугивал фас?
Или ты только такое пиздишь, пытаясь показать что тут самый важный?
>А будешь выебываться - изымут сервера на "проверку".
>С налоговой веселее.
>В офис прибывает НОМО
В какой офис? Десятки даже сотни офисов по всей России?
Как ты вообще представляешь чтобы в ВТБ или МТС или перекрёсток прибыла налоговая с омоном и начали все изывать?
Какие серваки? Там целые датацентры.
Вот прям весь датацентр увезут и допустим порушат все сотовую связь в регионе?
Или ты про малый средний бизнес?
Ну так вас всё равно будут кошмарить.
Неважно есть у вас динамические цены или нет.
Есть у нас картельные сговоры или нет.
>Во первых: это вообще незаконно. 426 ГК РФ
>Динамическое ценообразование офк есть, этого никто и не отрицал
>Внимание! Я не обосрался! Повторяю! Не обосрался
> Никаких цен Мл не формирует
> сайт не открывается
> Это блядь уже комедия какая-то
> статья вообще про муррику
ЛОЛ! Что за манявры пошли?
Мы разве обсуждали как у кого-то и на чем цены формируются?
Похуй что они там используют. Хоть МЛ, хоть сприпты на фортране.
Вопрос был про динамическое образование цен.
Что одному пользователю показывает одну цену, а другому пользователю показывает другую цену.
Что днём цена одна, ночью другая. Что на iPhone одна цена а на андроиде другая.
На что ты ответил, что не существует и не законно, а потом неожиданно переобулся.
>>148265
>>служба установила,
Ну я установил что ты пиздабол который обдристался на дваче при всех и что дальше?
>Им въебали несколько лямов штрафа каждому.
А чего не триллиардов? Пизди побольше для важности
>Думали гадали, в итоге только один вариант рабочий
Ты при этом тоже всем рассказывал про договоры оферты и запугивал фас?
Или ты только такое пиздишь, пытаясь показать что тут самый важный?
>А будешь выебываться - изымут сервера на "проверку".
>С налоговой веселее.
>В офис прибывает НОМО
В какой офис? Десятки даже сотни офисов по всей России?
Как ты вообще представляешь чтобы в ВТБ или МТС или перекрёсток прибыла налоговая с омоном и начали все изывать?
Какие серваки? Там целые датацентры.
Вот прям весь датацентр увезут и допустим порушат все сотовую связь в регионе?
Или ты про малый средний бизнес?
Ну так вас всё равно будут кошмарить.
Неважно есть у вас динамические цены или нет.
Есть у нас картельные сговоры или нет.
>Что одному пользователю показывает одну цену, а другому пользователю показывает другую цену.
>
чел ты даун кукаретик
мимо
Это как дауны, которые не нашли /s/ и срут здесь. Нет бы съебаться в /law/.
>Посоветуйте курсы хорошие. Биг дата, разработчик БД или дата архитектор. Бюджет на обучение выделен, на то что я хотел пойти либо ушли из России либо закрылись.
Аноны, по курсам подскажите?
Если упростить, у меня есть две таблицы: в первой числовое значение и внешний ключ на вторую таблицу, во второй также числовое значение. Я хочу чтобы при каждом добавлении записи в первую таблицу, он изменял запись второй таблицы на которую ссылается созданная запись, так что к числовому значению записи из второй таблицы будет прибавляться числовое значение из созданной записи в первой таблице.
CREATE TRIGGER sum_tables AFTER INSERT ON table_1
FOR EACH ROW
BEGIN
UPDATE table_2
SET value2 = value2 + new.value1
WHERE id = table_2_id;
END;
Выдает ошибку и т.к. я до конца не понимаю как правильно обращаться к значениям в других таблицах, думаю проблема именно в
WHERE. Но как правильно написать все равно не понимаю пока, так что прошу помощи...
Да конкретной ошибки то и нет, просто не до конца понимаю как правильно триггеры писать.
https://dbfiddle.uk/ZT2Xar-a
>Да конкретной ошибки то и нет
А вот эта красная хуйня чисто по приколу висит? Написано же: BEGIN в триггере нельзя использовать. Откуда ты его взял вообще?
https://www.postgresql.org/docs/current/sql-createtrigger.html
>The trigger will be associated with the specified table, view, or foreign table and will execute the specified function function_name when certain operations are performed on that table.
Триггер функцию вызывает, а уже в функции ты делаешь то что тебе нужно https://https://dbfiddle.uk/V0NLwhYD
1) Называй таблицы ключи и процедуры так, чтобы по названию можно было понять что куда и откуда.
2) Если указываешь тип SERIAL, то и работай с ним как с SERIAL.
3) Триггеры в целом так себе идея. Гораздо лучше будет если ты выполнишь сам в транзакции два запроса - на инсерт и на апдейт.
Бля, забыл ссылку на доку
https://www.postgresql.org/docs/current/plpgsql-trigger.html
Эта хуйня так и называется: Триггерные процедуры.
>Никто не использует МЛ для формирования цен.
Крупные ретейлы, маткетплейсы, и даже обсосы используют.
Я работал в нескольких крупных компаниях, в которых каждый россиянин хотя бы раз в жизни что-то купил. Конкретно я это не делал, мои задачи были перекладывать данные из одного места в другое, но ребята пилили модели. Практически в любом месте где есть много точек и массовые продажи нужно решить три задачи: по чём продавать, сколько остатков держать на складе, сколько сотрудников выводить на точку. Если у тебя есть история продаж за десятки лет, то на все эти вопросы отлично отвечают ИИ.
>то на все эти вопросы отлично отвечают ИИ
Бля, и что же ИИ отвечают на эти вопросы?
Отвечают: ебанько, у тебя есть закупочная, себестоимость и ррц, ты че генерировать собрался?
Охуеваю с долбоебов с магическим мышлением.
Присылай резюме. У нас как раз ML инженера ищут еще одного. Зарплата для сеньора от 400к + годовая премия 20% от годовых доходов.
Я за это бонус получу, а ты узнаешь как ML работает — оба в плюсе.
Угу, все понял, спасибо большое
>Зарплата для сеньора от 400к + годовая премия 20% от годовых доходов
Баляяя, эти фантазии потребителя курсов. А еще полцарства и дочь CEO в жены.
Сорян братишка, но твоя выдуманная конторка мне не по размеру.
Я занимаюсь реальным машин лернингом - делаю таргетированную рекламу для яндекса. Если тебя неделями после одного единственного поиска заебывала реклама хуйни, котрую ты давно купил, то знай - это я. Мы предиктивно-адаптивно машин лерним нейросети ИИ, чтобы улучшить опыт наших клиентов, получая премию 50% с налерненых за год доходов.
>Если тебя неделями после одного единственного поиска заебывала реклама хуйни, котрую ты давно купил, то знай - это я.
Ты гордишься тем, что сливаешь деньги рекламодателей в пизду? Похвально. Одобряю. Так держать! Но лучше форсировать.
720x720, 2:31
>сливаешь деньги рекламодателей в пизду
Ты че, пес. Нейросеть не ошибается. Надежная вещь, вы определенно можете ей доверить свои деньги но лучше чужие.
Мы, машин лернеры, не обманываем друг друга.
>форсировать
Теперь это тред дружной форсированной нейросемьи.
> делаю таргетированную рекламу
О прикинь я тоже. Только в другой компании.
Динамическими ценами соседняя команда занимается
>Я занимаюсь реальным машин лернингом
Да по сути одно и то говно. Зазывала продажник, просто не табличку крутишь у магазина, а модели в тензорфлоу
В компании есть 3 сегмента клиентов (сегмент_1, сегмент_2, сегмент_3), при этом клиенты бывают действующими и бывшими, клиенты также имеют разное количество подключенных услуг и находятся в разных городах.
Вся информация о клиентах хранится в таблице clients. Структура таблицы выглядит так: (приложил картинкой)
Необходимо выполнить следующие запросы:
Запрос №1.
Необходимо выбрать всех действующих клиентов сегмента_1 с количеством продуктов больше 2 и находящихся в регионах 002 или 003 или 007.
Запрос №2.
Необходимо написать запрос, позволяющий понять распределение кол-ва клиентов в разрезе сегментов, признака flag_client и региона. Используйте агрегирующие функции
Запрос №3.
В предыдущий запрос необходимо добавить значение по среднему количеству услуг на одного клиента. Если у клиента нет услуг (cnt_services = 0), тогда необходимо подставить среднее значение по данному региону и сегменту
>Необходимо выбрать всех действующих клиентов сегмента_1 с количеством продуктов больше 2 и находящихся в регионах 002 или 003 или 007.
Что-то типа
select inn from clients
where flag_client = 1 and id_city in (001, 002, 007) and cnt_services > 2
>. Всего около 300к документов в одном шарде
И это все, чем ты смог описать свою систему?
Один ебанат ничего сформулировать не может, другой ебанат ему советы раздает..
давай убедимся, что ты прочитал и опробовал тут все https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-knn-search.html
И что у тебя есть мониторинг чтобы понять какой из ресурсов активно использует в моменты нагрузки на поиск
По большей части там советы "а может поменьше сделаешь вектора?) Оптимизируй, чтобы не было индексации и серча одновременно". В общем проблему я в итоге решил обычной квантизацией, которую можно прям в индексе задать. Пока что не заметил проблем с результатами. Буду дальше тестить. Спасибо за наводки!
>elasticsearch
>Всего около 300к документов
Забей. Эластик на жабе написан и тормозит уже на паре тысяч документов где латенси 99% плавает в 500-700 мс. Просто провальный проект как и кафка. Ищи альтернативы на нормальных языках программирования
кафка топчик. лучше ничего нет
>Ищи альтернативы на нормальных языках программирования
так их нет.
есть какое-то дрочение, типа расширение для postgres, но мутное и малопопулярное.
может что-то конкретное предложишь?
Да это какой-то шиз. Забей на него.
Я сам не фанат джавы, но только дурак будет отрицать ее производительность и масштабируемость, что важно для систем обработки больших данных. Поэтому и Elasticsearch и Kafka и Hadoop и Cassandra и десятки других инструментов для обработки больших данных написаны на Java
>>Hadoop
>Clickhouse
Хороший зерноуборочной комбайн стоит столько же сколько Rolls-Royce. Думаю они взаимозаменяемые?
>Redpanda
Да классная штука. Используйте или просто нагуглил? Ну погуглить я и сам могу. А ты покажи что у вас на проде
> что важно для систем обработки больших данных
Как бы не было смешно, в таких системах производительность больше зависит от стратегий шедулера, а масштабируемость от архитектуры.
>>Hadoop
>Clickhouse
Скорее YTsaurus
мимо
SELECT number, count(number) from t where number in (1,2,3) group by number having count(*) = 0
Да похоже так нельзя, но вдруг можно
Вот моя бд
test2=# select * from t1 ;
number
--------
1
2
4
И по запросу я хочу чтобы вывелось 3
и
Какая то параша из под чатагпт
Я бы сделал примерно так
1. Сортируешь, добавляешь фиктивную строку с нулём в начало.
2. Смотришь число в прошлой записи (LAG)
3. Убираешь все записи в который LAG отличается от текущей записи более чем на 1.
Получаешь отрезки между которыми пустоты. Размножаешь до нескольких записей как хочешь.
Тебя видимо тоже сбило что в моем примере числа идут подряд. Это не точно. Числа это айдишники и мне нужны те, которые есть в запросе, но нет в таблице. Пока вытаскиваю список тех что есть обычным запросом и потом уже на стороне скрипта сравниваю со списком из запроса и нахожу отсутсвующие
MINUS ?
>>159268
>>159293
Ебать вы завернули.
А нужен ПРОСТОЙ СОВЕТСКИЙ... https://dbfiddle.uk/GHpFWWjQ
RIGHT JOIN
>оптимизировал sqlite
>теперь отвечает на 5 секунд дольше
SQLite охуенная и даже безальтернативная штучка, когда тебе нужен SQL в каком-нибудь неожиданном месте типа БД приложения . Но для крудов не предназначена, для них лучше даже говнище MySQL, которое никогда бы не взлетело без говнища PHP, которое никогда бы не взлетело без говнища виртуальных LAMP хостингов.
к злому* быстрофикс
>в каком-нибудь неожиданном месте типа БД приложения
Ебал её рука.
SQLite это не отдельный сервер с базой, это просто либа для твоего языка, а "база" это просто файлы на диске.
Соответственно самое выгодное использование SQLite - это когда у тебя всего ОДИН клиент. Где такое? Да в любом приложении, которое использует один человек. Мобила, пекарня, чайник. Поэтому же и используют её для unit тестов - юнит тест по определению должен в изоляции проводиться.
А еще это католическое ПО, которое пишется по "Уставу святого Бенедикта". Поэтому в некоторых странах тебе за него башку отрежут.
TLDR;
SQLite используется там где нет КОНКУРЕНЦИИ между пользователями базы.
Там где нет возможности/желания поднимать и конфигурировать СЕРВЕР с базой.
Если ты богобоязненный КАТОЛИК.
Добавлю что это нужно если данные у тебя уже в БД. Если их надо парсить в процессе чтения с файлухи, то это можно и вне бд сделать.
Сформулируй задачу поточнее. Где лежит твой текст и что ты хочешь получить на выходе?
У меня сперва отдельный слой это хеш (слово: айди слова). Айди слов я кодирую по принципу UTF-8. но конечно эти айди вылазят за пределы стандарта юникода. Ну то есть я в принципе просто кодирую массивы чисел по UTF-8. Чтобы это парсить для фуллтекста, нужно на сях мускул немножко закастомить.
Никак.
У тебя что, блядь, какой-то другой английский язык?
А если ты собрался серьезно работать с языком, тебе все равно нейросетевой поиск нужен в 2024 -то, году.
Дело в том, что через джва месяца с 21 июля закончатся экзамены в шараге у меня, и я пойду в мухосранскую вебстудию на стажировку фуллкакера ларавел вью.
Подскажите, пожалуйста, как sql выучить за ровно джва месяца от корки до корки?
Только не говорите всякое типа хи-хи-хи мы отправим тебя стажироваться в Задний Новгород или что у тебя не получится.
Просто скажите как джва месяца учить си ку эль? Реально надо на сайте sql exercises прошивать джве тысячи раз упражнения? Я ж не успею джве тысячи раз за джва месяца.
Сколько из шапки материалов я успею прочесть за джва месяца.
Очень прошу извинить за такие глупые вопросы, но для меня это вопрос жизни и смерти. Поймите, пожалуйста, меня. А если не поняли, то поймите.
Да знаем мы таких хуесосв.
Вместо того чтобы завалить ебало, читать литературу и решать задачи, ты доебываешь всех дебильными вопросами, лишь бы нихуя не делать.
Чтобы выучить sql за ДЖВА МЕСЯЦА надо поменьше пиздеть и делать озабоченное ебало. А побольше РАБОТАТЬ, ПАХАТЬ СУКА.
А теперь пшел нахуй отсюда.
Перестань искать ответы на такие вопросы. Открываешь браузер заходишь на Metanit или w3school, изучаешь там основы SQL. Потом в любом онлайн портале типа sql-ex ru порешай штук 100 задач. Готово, глубже уже на проекте изучишь.
Не знаю чего там 2 месяца учить? Для мухосранской-то вебстудии?
Вот
https://www.tutorialspoint.com/sql/index.htm
>как sql выучить
ну, учить, применять, как еще?
>Можно ли с ним развернуть реальный CRUD проект
Конечно
>стоит ли вообще?
Зависит. Если ты в компании - лучше делать на стандартных технологиях компании. Если для себя - конечно.
Буквы
>до корки?
то есть в том числе фунции процедуры индексы оптимизация блокировки изоляции управления ошибками ну и все такое
или просто селекты уметь хорошо писать?
Мой СКОЯТОЭЛЬ?
>просто селекты уметь хорошо писать
Лол. Как раз прочитать про блокировки и индексы много ума не надо. А вот СЕЛЕКТЫ ПИСАТЬ ХОРОШО. В этом-то самый цимес. Ты попробуй хотя бы ЧИТАТЬ СЕЛЕКТЫ научись.
Ты не корчи рожу и не брезгуй, просто хорошо писать запросы ага :))
За разработкой много раз переписывал запросы, потому что им нихрена не видно из своей тестовой среды, а у меня есть возможность запускать запрос прямо на проде/продлайке и узнать его истинную скорость исполнения.
Обычно все запросы проходят две-три итерации переписывания, потому что сначала его надо просто сделать и закрыть задачу, а потом уже сделать другую задачу по его ускорению кек
Очевидно, добавляет индексы. Планы надо всегда смотреть на живых данных.
Самая веселуха начинается, когда просто добавить индекс недостаточно и надо разбивать запрос на два, внутренний и внешний. Во внутреннем делаем пейджинг и сортировку, во внешнем подтягиваем всякое говно, которое надо для показать иконку в гриде. Приходится собирать запрос из кусков внутри хранимки, получаются эпические стены текста на пять экранов.
>разбивать запрос на два, внутренний и внешний
Такого уебанского названия подзапросов еще не видел.
Хранимки - это охуенная тема. В них можно собирать большие запросы. На них можно повесить права. Их можно тюнить независимо от кода и на живой базе, актуально когда сервак стоит хуй знает где и показывает слайдшоу через рдп. Никто не говорит писать бизнес логику в базе, но использовать хранимки как интерфейс к базе - это охуенно.
>Надо учиться писать селекты, это не просто
>хуясе у вас жопа зашорелась
>любой разработчик отсосет у аналитика данных
Ох уж эти проекции про хуи и отсосы.
Поправил твой шизоидный высер. Не благодари.
любой разработчик отсосет у любого аналитика данных, которые реально умеют писать хорошие и сложные селекты используя все возможности языка
а за что благодарить то?
ну да ты прав про любого. Но любому и не надо.
Поэтому аналитики данных, которые как раз крутят вертят данными оч хорошо знают как правильно писать запросы
А разрабам не особо надо. моя проекция как раз в этом, что нахуй ему до корки хубрить sql, все равно не пригодится
>Кто знает, тот знает. Кто не знает, тот не знает.
Че еще расскажешь, долбоеб? Как там вода? Еще мокрая?
А оно есть. Во всяком случае, понятно что имеется ввиду.
Подзапрос - это когда dependent query, а когда есть внутренний и внешний, все отлично оптимизируется.
ничего. ты все равно нихуя не понял. смысл долбится об стену?
Правильно называется вот так
https://dev.mysql.com/doc/refman/8.0/en/correlated-subqueries.html
Извинись.
>Beginning with MySQL 8.0.24, the optimizer can transform a correlated scalar subquery to a derived table
Ох ты же, ебать!
Конец света скоро...
это случайно не ты тут весь тред хуесосишь мускуль монгу и прочее не постгресное говно, а когда обосрался сразу принес свою желтушную справку от них?
правильно называется вот так: пикрил
а если ты нашел какую-то хуету, которую никто не использует, то используй ее про в своей параше и не позорся
что ты такой недружелюбный?
давай еще раз объясню что он имел ввиду:
часто запросы пишут гигантскими джоинами и набором полей.
Прием оптимизации заключается в том, чтобы выбрать маленький объем данных ВНУТРЕННИМ запросом, что-нибудь отфильтровать и отсортировать, а потом доджоинить ВНЕШНИМ запросом остальные поля ( в том числе это может оказаться все та же таблица)
Вот и все, вот и все!
>ВНУТРЕННИМ запросом
>давай еще раз объясню что он имел ввиду
Хватит семенить.
Это и называется "подзапрос". Сorrelated при этом подзапрос или нет вообще похуй, это определят только один раз этот подзапрос будет выполняться или несколько. CTE это тоже "подзапросы".
Терминология такая. Простая. А ты её не знаешь но лезешь с умным видом советы давать.
> тюнить на живой базе
Ты под мостом родился что ли?
Все эти тюнинги на живой базе до первых проёбанных данных клиента.
Угомонись, душнила. Анон все правильно написал. Когда говорят внутренний/внешний запрос, все прекрасно понимают, о чем речь. Твою хуйню про correlated subqueries не поймет никто.
>Когда говорят внутренний/внешний запрос
Семен Семеныч, только ты один так говоришь. Больше таких долбоебов не видел.
Начал курс по SQL выбрал почти рандомно https://www.coursera.org/learn/sql-for-data-science/home/info
Вот там деваха сказала что будет преподавать синтаксис SQLite - я пострел что в принципе востребовано и к тому же на моей федора 40 уже установлен. Так что решил - ладно буду изучать лайт, потом на пост гре пересяду.
Вопрос: у меня траблы с работой в терминале. DB Browser for SQLite видит базы данных и их структуру, но команда sqlite3 .databases ничего не отображает. Если открыть базу данных и CREATE TABLE то таблица создается. .scheme отображает изменения. DB Browser for SQLite так же отображает.
Однако если в терминале INSERT INTO, то выйдет ошибка что такой таблицы в базе нет.
Чел.
Это конечно неприятно слышать. Но.
Нихуя хорошего из твоей затеи не выйдет. Это сразу видно человеку с опытом. С первого взгляда. И по тому о чем спрашивают, и по тому как спрашивают. Тебя либо развели/наебали, либо ты сам себя наебал.
Твоя "проблема" это на самом деле не "проблема" - это то как выглядит твоя будущая работа. Пердолинг это как дышать. Или моргать. Этому нигде не учат, но это часть твоей работы. Если ты это не умеешь, то тебе будет плохо всегда. Потому что не работать будет всегда. Что-то всегда будет не так.
Теперь по вопросу.
1) Почему ты спрашиваешь здесь, а не у своей девахи? Какой бы ни был ответ - это повод задуматься нахуй тогда вообще нужен этот курс.
2) Ты даже не можешь сформулировать что ты вообще изучаешь. "буду изучать лайт" что это по твоему должно значить? Есть ЯЗЫК SQL, у этого языка есть куча диалектов и стандартов, с разными возможностями. Есть RDMS - DATABASE MANAGEMENT SYSTEM. Это куча различного софта, очень сильно отличающегося и достаточно сложного чтобы на изучение каждой системы потратить годы. CREATE TABLE это конструкция языка, sqlite3 .databases это команда системы. Команда CREATE TABLE для sqlite, mysql и postgres может сильно отличаться.
Так ЧТО ТЫ ИЗУЧАТЬ ТО СОБРАЛСЯ? Диалект SQL для sqlite? Как работает сама sqlite? Зачем тебе это нужно?
3) "выйдет ошибка" Текст команды? Текст ошибки? То что тебя нужно об этом спрашивать, говорит о том что нужно учить не SQL, а повышать компьютерную грамотность. Даже моя бабуля знает, что чтобы найти решение проблемы нужно знать конкретное название этой проблемы. Старушка как никак десть лет кампудахтером пользуется - опытный пользователь пк. А ты - нет.
Теперь попробуем подрубить телепатию.
Чтобы что-то найти, нужно сначала определиться что ты потерял и где ты это потерял. Где твоя база? Ты когда запускаешь sqlite из питона, ты указываешь путь до файла с базой. Где этот файл? Он там где и должен быть? Как твоя консоль должна узнать какой путь ты указывал в питоне?
CREATE TABLE cars
(id INTEGER PRIMARY KEY AUTOINCREMENT,
make TEXT NOT NULL);
CREATE TABLE suppliers
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
phone_number INTEGER NOT NULL);
CREATE TABLE cars_suppliers (id INTEGER PRIMARY KEY AUTOINCREMENT,
cars_id INTEGER NOt NULL, suppliers_id INTEGER NOt NULL,
FOREIGN KEY (cars_id) REFERENCES cars(id),
FOREIGN KEY (suppliers_id) REFERENCES suppliers(id))
INSERT INTO cars(make) VALUES ('Chevrolet'), ('Ford'), ('Honda'), ('Mazda'), ('BMW'), ('Volvo'), ('Audi');
INSERT INTO suppliers(name, phone_number) VALUES ('General Motors', 189456123), ('Ford Motor Company', 155577745), ('Honda Motor Co., Ltd', 451577878), ('Mazda Motor Co.', 484846454), ('BMW Group', 512365498), ('Volvo Cars', 912398726), ('Volkswagen Group', 625825632);
SELECT suppliers.name FROM cars_suppliers
JOIN cars ON cars_suppliers.cars_id = cars.id
JOIN suppliers ON cars_suppliers.suppliers_id = suppliers.id
WHERE suppliers.name = 'General Motors';
"Получить список всех автомобилей конкретного поставщика;
Получить количество автомобилей каждого поставщика"
Ошибок нету, но ничего не выводит.
CREATE TABLE cars
(id INTEGER PRIMARY KEY AUTOINCREMENT,
make TEXT NOT NULL);
CREATE TABLE suppliers
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
phone_number INTEGER NOT NULL);
CREATE TABLE cars_suppliers (id INTEGER PRIMARY KEY AUTOINCREMENT,
cars_id INTEGER NOt NULL, suppliers_id INTEGER NOt NULL,
FOREIGN KEY (cars_id) REFERENCES cars(id),
FOREIGN KEY (suppliers_id) REFERENCES suppliers(id))
INSERT INTO cars(make) VALUES ('Chevrolet'), ('Ford'), ('Honda'), ('Mazda'), ('BMW'), ('Volvo'), ('Audi');
INSERT INTO suppliers(name, phone_number) VALUES ('General Motors', 189456123), ('Ford Motor Company', 155577745), ('Honda Motor Co., Ltd', 451577878), ('Mazda Motor Co.', 484846454), ('BMW Group', 512365498), ('Volvo Cars', 912398726), ('Volkswagen Group', 625825632);
SELECT suppliers.name FROM cars_suppliers
JOIN cars ON cars_suppliers.cars_id = cars.id
JOIN suppliers ON cars_suppliers.suppliers_id = suppliers.id
WHERE suppliers.name = 'General Motors';
"Получить список всех автомобилей конкретного поставщика;
Получить количество автомобилей каждого поставщика"
Ошибок нету, но ничего не выводит.
INSERT INTO cars_suppliers(cars_id) VALUES (1), (2), (3), (4), (5), (6), (7);
INSERT INTO cars_suppliers(suppliers_id) VALUES (1), (2), (3), (4), (5), (6), (7);
Ну ок. Все равно какая-то 🌶ня..
С NOT NULL ошибка
>Какая книжка по БД самая уважаемая?
Самая уважаемая "Database Systems: Design, Implementation, & Management" от Cengage. Они её обновляют каждый год. Сейчас уже 14-ое издание. Там красочные описания, картинки, чё тебе ещё собака надо. 800 страниц мелкого текста. По ней по-моему даже в вузе преподают.
>Я хз для кого эта серия.
Для вкатунов. Там вся база про виды баз данных, нормальные формы, sql, транзакции, блокировки.
мимо-читал
Я читал про устройство компьютера. Там по верхам все. И без практики оно вообще не запоминается.
А я читал олдфишера. Там все про русачков и гойских матерей, про кампудахтер вообще ничего нет.
Объебышь, нахуй ты сюда срешь своей шизофазией про книги, которые не читал?
Потому что хочу и могу. А еще потому, что такой одинокий и тупой анимудебил, как ты, вынужден это терпеть, гореть и вытирать слюни с экрана потом. Еще будут вопросы?
Я тоже его читаю иногда.
Oracle SQL.
Почему на некоторых articles пишут что, мол, надо переменные декларировать с "@" (собакой), чтобы показать что это переменная.
Также, "@" перед переменной типа говорит что это локальная переменная в процедуре/функции и будет недоступна после её выполнения (на текущую сессию), это так?
А разве не любая переменная объявленная в процедуре будет таковой, например?
CREATE PROCEDURE remove_emp (employee_id NUMBER) AS
tot_emps NUMBER;
BEGIN
DELETE FROM employees
WHERE employees.employee_id = remove_emp.employee_id;
tot_emps := tot_emps - 1;
END;
/
Так зачем нужна "@" перед переменной?
Я знаю что в другом использовании:
select * from tb1@abcd;
--"abcd" - обозначает другую базу, не в текущей с который ты это ранишь (run).
И еще, кажись на других СУБД, говорится про "$" перед переменной.
В Oracle SQL, она тоже типа placeholder?
Можно пример как она может использоваться?
как тут код вставлять? не вижу нужной кнопки
Oracle SQL.
Почему на некоторых articles пишут что, мол, надо переменные декларировать с "@" (собакой), чтобы показать что это переменная.
Также, "@" перед переменной типа говорит что это локальная переменная в процедуре/функции и будет недоступна после её выполнения (на текущую сессию), это так?
А разве не любая переменная объявленная в процедуре будет таковой, например?
CREATE PROCEDURE remove_emp (employee_id NUMBER) AS
tot_emps NUMBER;
BEGIN
DELETE FROM employees
WHERE employees.employee_id = remove_emp.employee_id;
tot_emps := tot_emps - 1;
END;
/
Так зачем нужна "@" перед переменной?
Я знаю что в другом использовании:
select * from tb1@abcd;
--"abcd" - обозначает другую базу, не в текущей с который ты это ранишь (run).
И еще, кажись на других СУБД, говорится про "$" перед переменной.
В Oracle SQL, она тоже типа placeholder?
Можно пример как она может использоваться?
как тут код вставлять? не вижу нужной кнопки
чем ерундой страдать, лучше бы по теме ответил
>Никак не пойму.
>Oracle SQL.
>Почему на некоторых articles пишут что, мол, надо переменные декларировать с "@"
Пушо ты еблан.
Где это пишут? Где в документации это написано? Не используется в оракл для объявления переменных "@".
Слепошарый дегенерат, ты вообще читал что постишь? А ответы ты читал?
И вообще, насколько нужно быть угашенным, чтобы ТЕКСТ ВОПРОСА НА СТАКЕ БЛЯДЬ объявлять как " на некоторых articles пишут".
>чтобы ТЕКСТ ВОПРОСА НА СТАКЕ БЛЯДЬ объявлять как
да есть article, просто потерял сайт
ну да ладно, хорошо что есть данный тред где можно разъяснить такие вопросики
теперь знаю
а кстати, что то дает "@" перед переменной?
Ну и пользуясь случаем.
Что за "" звездочка (asterisk) перед переменной?
Нашел тут:
https://docs.oracle.com/cd/A97385_01/appdev.920/a96584/oci05bnd.htm
ename, *job;>text
И вообще что за фрукт такой, эта функция OciBindbyName, ну т.е. я прочел что она типа нужна когда передаешь параметры какой-то вызванной процедуре/функции
>An OCI application could complete the binds for this statement with a single call to OCIBindByName() to bind the :some_value placeholder by name. In this case, the second placeholder inherits the bind information from the first placeholder.
Что за OCI application? Зачем мне эта функция? Она мне пригодится вообще?
Если я хочу получить от пользователя input для variable, чтобы потом значение этого variable передать как параметр процедуре, как это сделать?
Вот например:
CREATE OR REPLACE PROCEDURE remove_emp (employee_id IN NUMBER) IS
tot_emps NUMBER;
employee_id_input_temp NUMBER;
BEGIN
SET SERVEROUTPUT ON
accept employee_id_input NUMBER prompt "enter employee id to remove: ";
employee_id_input_temp := &employee_id_input;
remove_emp(employee_id_input_temp);
DELETE FROM employees
WHERE employees.employee_id = remove_emp.employee_id;
tot_emps := tot_emps - 1;
END;
/
Только не пойму куда функцию DELETE связанную с Data Manipulation Language впихнуть в код.
В общем тут, "&" обозначает адрес переменной в памяти, да? Типа так нужно присвоить значение для employee_id_input_temp
>чтобы ТЕКСТ ВОПРОСА НА СТАКЕ БЛЯДЬ объявлять как
да есть article, просто потерял сайт
ну да ладно, хорошо что есть данный тред где можно разъяснить такие вопросики
теперь знаю
а кстати, что то дает "@" перед переменной?
Ну и пользуясь случаем.
Что за "" звездочка (asterisk) перед переменной?
Нашел тут:
https://docs.oracle.com/cd/A97385_01/appdev.920/a96584/oci05bnd.htm
ename, *job;>text
И вообще что за фрукт такой, эта функция OciBindbyName, ну т.е. я прочел что она типа нужна когда передаешь параметры какой-то вызванной процедуре/функции
>An OCI application could complete the binds for this statement with a single call to OCIBindByName() to bind the :some_value placeholder by name. In this case, the second placeholder inherits the bind information from the first placeholder.
Что за OCI application? Зачем мне эта функция? Она мне пригодится вообще?
Если я хочу получить от пользователя input для variable, чтобы потом значение этого variable передать как параметр процедуре, как это сделать?
Вот например:
CREATE OR REPLACE PROCEDURE remove_emp (employee_id IN NUMBER) IS
tot_emps NUMBER;
employee_id_input_temp NUMBER;
BEGIN
SET SERVEROUTPUT ON
accept employee_id_input NUMBER prompt "enter employee id to remove: ";
employee_id_input_temp := &employee_id_input;
remove_emp(employee_id_input_temp);
DELETE FROM employees
WHERE employees.employee_id = remove_emp.employee_id;
tot_emps := tot_emps - 1;
END;
/
Только не пойму куда функцию DELETE связанную с Data Manipulation Language впихнуть в код.
В общем тут, "&" обозначает адрес переменной в памяти, да? Типа так нужно присвоить значение для employee_id_input_temp
>да есть article, просто потерял сайт
Нет такой статьи, ты просто по английски читать не умеешь.
>а кстати, что то дает "@" перед переменной?
И с чтением по русски проблемы.
>Не используется в оракл для объявления переменных "@". >>191935
>text ename, *job;
Это язык какой? Причем тут SQL вообще?
>И вообще что за фрукт такой, эта функция OciBindbyName
Ты к чему документацию читаешь, чучело?
>The Oracle Call Interface (OCI) is an application programming interface (API) that lets you create applications that use the native procedures or function calls of a third-generation language
>third-generation language
>OCI supports the datatypes, calling conventions, syntax, and semantics of C and C++.
Речь блядь об апи НА ДРУГОМ ЯЗЫКЕ, а не на SQL. Ну ты внатуре пенек осиновый. Ты типа гуглишь случайную хуйню в интернете и тащишь сюда?
>Если я хочу получить от пользователя input для variable, чтобы потом значение этого variable передать как параметр процедуре, как это сделать?
Сервер SQL баз данных принимает только один инпут: ЗАПРОСЫ НА ЯЗЫКЕ SQL. Отправляешь SQL серверу запрос, который вызывает твою процедуру и не ебешь людям мозги.
>Причем тут SQL вообще?
т.е. это
https://docs.oracle.com/cd/A97385_01/appdev.920/a96584/oci05bnd.htm
не относится к Oracle pl/sql?
>Ты типа гуглишь случайную
Да не, я обычно всегда "oracle sql" вставляю в query гугла, а там что выйдет читаю
ну типа, если база данных на ОС oracle стоит, а oracle использует pl/sql
то я вот подумал что там когда буду создавать процедуру или функцию, это будет relevant
типа это можно будет использовать...
теперь буду знать, благодарствую
а так что насчет моего вопроса с процедурой тут >>192186
как там правильно объявить prompt который потом передавать процедуре
и это все в одной процедуре сделать?
типа когда jobs'ом заранишь процедуру (ну или вручную), типа он сразу будет спрашивать чтоб пользователь ввел employer id значение?
я так понимаю в pl/sql нету понятие как "pointers"? хотя вроде же вон есть "&" знак, вроде используется, видел в разных кодах...
кстати, я вот сколько гуглю, никак не могу найти команду которую можно было бы в строке SQL plus(?) (NEW -> SQL WINDOW) заранить (F8) чтоб получить информацию об определенной таблице (description)
команды describe нет встроенной
SELECT * from USER_TAB_COLUMNS where table_name = 'my_table';
возвращает пустые колонки (TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER и.т.д.)
А то сейчас приходится вручную в интерфейсе слева, в директории "Tables" искать и открывать нужную таблицу чтоб посмотреть инфу о таблице.
если что я начинающий (стажер в банке), поэтому прошу понять и простить
>Причем тут SQL вообще?
т.е. это
https://docs.oracle.com/cd/A97385_01/appdev.920/a96584/oci05bnd.htm
не относится к Oracle pl/sql?
>Ты типа гуглишь случайную
Да не, я обычно всегда "oracle sql" вставляю в query гугла, а там что выйдет читаю
ну типа, если база данных на ОС oracle стоит, а oracle использует pl/sql
то я вот подумал что там когда буду создавать процедуру или функцию, это будет relevant
типа это можно будет использовать...
теперь буду знать, благодарствую
а так что насчет моего вопроса с процедурой тут >>192186
как там правильно объявить prompt который потом передавать процедуре
и это все в одной процедуре сделать?
типа когда jobs'ом заранишь процедуру (ну или вручную), типа он сразу будет спрашивать чтоб пользователь ввел employer id значение?
я так понимаю в pl/sql нету понятие как "pointers"? хотя вроде же вон есть "&" знак, вроде используется, видел в разных кодах...
кстати, я вот сколько гуглю, никак не могу найти команду которую можно было бы в строке SQL plus(?) (NEW -> SQL WINDOW) заранить (F8) чтоб получить информацию об определенной таблице (description)
команды describe нет встроенной
SELECT * from USER_TAB_COLUMNS where table_name = 'my_table';
возвращает пустые колонки (TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER и.т.д.)
А то сейчас приходится вручную в интерфейсе слева, в директории "Tables" искать и открывать нужную таблицу чтоб посмотреть инфу о таблице.
если что я начинающий (стажер в банке), поэтому прошу понять и простить
ну ок
допустим Oracle это database management system
а что тогда pl/sql developer? типа графическая оболочка?
ну я знаю что pl/sql называется диалект языка программирования sql
но когда я захожу в базу, я делаю это через иконку pl/sql developer, и там в интерфейсе в окне тоже пишется pl/sql developer
pl/sql это програмка созданная Allround Automations
а есть просто
SQL Developer : A free software tool developed by the company Oracle which could be used for working with SQL in Oracle databases. It is an integrated development environment particularly useful for writing and managing SQL / PLSQL codes.
на нем можно создавать процедуры/функции? или pl/sql типа лучше?
Разницы нет никакой, что pl/sql developer,что sql developer. Процедуры/функции все равно в базе хранятся. Можно их также создавать и компилить через SQLPlus в режиме командной строки, это чисто графические удобные интерфейсы.
>>192443
По сабжу, @ видел только в sql скриптах которые запускаются через SQLplus. Он после запуска запрашивает значения для переменных для подмены. Ну и это все используется в процедурном коде.
`script.sql`
exec var v = @a
begin
-- Чета делаем
end;
sqlplus script -- Вызываем из терминала, и он просит ввести значения чтобы подменить переменную @a
Могу ошибаться, на Oracle уже год не программировал
1280x720, 0:02
>когда я захожу в базу, я делаю это через иконку pl/sql developer
А если на иконке будет написано ХУЕСОС И ПИДАРАС, то ты съебешь отсюда в /ga со своей шизофренией?
Если я хочу получить от пользователя input для variable, чтобы потом значение этого variable передать как параметр процедуре, как это сделать?
CREATE OR REPLACE PROCEDURE remove_emp (employee_id IN NUMBER) IS
tot_emps NUMBER;
employee_id_input_temp NUMBER;
BEGIN
SET SERVEROUTPUT ON
accept employee_id_input NUMBER prompt "enter employee id to remove: ";
employee_id_input_temp := &employee_id_input;
remove_emp(employee_id_input_temp);
DELETE FROM employees
WHERE employees.employee_id = remove_emp.employee_id;
tot_emps := tot_emps - 1;
END;
/
Только не пойму куда функцию DELETE связанную с Data Manipulation Language впихнуть в код.
В общем тут, "&" обозначает адрес переменной в памяти, да? Типа так нужно присвоить значение для employee_id_input_temp
ты походу в sql не разбираешься... там нужна чтобы уже была таблица в базе данных... откуда онлайн это знает
короче, кто разбирается в sql должен быстренько суметь ответить, вопросик то простой
Зависит от диалекта, если pl/sql - то тебе нужны OUTPUT параметры
https://www.tutorialsteacher.com/sqlserver/stored-procedure-parameters, в SQL ты не можешь получить адрес переменной в памяти
Ебать ты тупой.
Разумеется создается таблица. И заполняется данными. https://dbfiddle.uk/4hcEn4lw
Ты таблицы создавать не умеешь?
Есть таблица на ~500млн записей, у которой есть колонка A с типом Array(String). Сам массив может содержать произвольное кол-во значений (не больше нескольких десятков). Есть необходимость делать 2 типа запросов с использованием этой колонки:
1) поиск записей, у которых колонка A содержит конкретное значение (с использованием функции has)
2) поиск записей, у которых колонка A содержит хотя бы одно значение (с использованием функции notEmpty)
Чтобы не совершать фуллскан, стал смотреть в сторону data-skipping-индексов. Наткнулся на гайд от altinity по использованию bloom_filter (https://kb.altinity.com/altinity-kb-queries-and-syntax/skip-indexes/skip-index-bloom_filter-for-array-column/). Индекс хорошо показал себя в первом типе запросов, но не покрывает второй кейс. Решил посмотреть на индекс с типом set(0), протестил - он покрывает оба кейса (в первом он скипает ровно то же кол-во записей, что и bloom_filter). Но обратил внимание, что кол-во засечек у set больше, чем у bloom_filter - почему так?
Нормальная ли вообще практика использовать set-индекс при работе с массивами? И можно ли каким-то образом увидеть, что он хранит: отдельные значения (строки) из массивов или сами массивы (предполагаю, что второе)? Возможно, стоит вообще как-то изменить структуру таблицы? Если где-то подобный кейс разобран - буду очень благодарен, если кинете в меня ссылкой
Repeatable read (повторяющееся чтение)
Уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны. При этом никакая другая транзакция не может изменять данные, читаемые текущей транзакцией, пока та не окончена.
Как я понял, предложение "Уровень, при котором читающая транзакция «не видит» изменения данных, которые были ею ранее прочитаны. " означает, что сначала читающая транзакция прочитала какие-то данные, потом кто-то изменил их, но т.к. читающая транзакция все еще открыта, то она не видит этих изменений. Но вторая часть текста смущает меня. Как я понял, она говорит следующее: если какая-то транзакция читает какие-то данные, то другая транзакция не имеет права изменять их до тех пор, пока читающая транзакция не закроется. Но это противоречит тому, что я понял в первом предложении. Так как все-таки правильно?
1) Сразу пиши базу и её версию.
Делать больше нехуй высматривать это на твоих скриншотах.
2) Сразу пиши свой запрос здесь https://dbfiddle.uk/S9ZOHCkV
Так не только легко понять что ты делаешь, но еще и легко что-то ПОКАЗАТЬ уже тебе.
У тебя в запросе используется correlated subquery - подзапрос, который использует данные из наружного запроса. Этот подзапрос выполняется по разу для каждой найденной строки из person_order.
Короче: запрос хуйня полная. Здесь раписал все подробно: https://dbfiddle.uk/GMz-Uf_G
Я простой ДЕ город ДС, зп 250к, были оферы из банков на большую сумму, но я пока не принял.
Крч, я щас задумался, что текущее положение дел меня устраивало раньше, но сейчас не особо. Хочу апнуться по зп, хотя бы на х3, по возможности работать на барина из Эмиратов и лутать свою зп в долларах ну или хотя бы в юанях.
Есть ли у меня возможность к этому прийти не меняя ИТ область, я даже наверное хадупы и спарки освоить готов, но пиздец как не хочется.
Крч, дайте совет, есть ли возможность и если есть, куда хотя бы примерно двигаться, чтобы достичь своих финансовых целей.
Бля, как к вам вкатиться можно, если опыт работы с БД есть, но он ущербный? Я сам всю эту хуету двх етл знаю, но хз как попасть на работу такую.
Бля, ебаната кусок, сходи - узнаешь, тревожник ебучий.
челы
вот когда делаешь подзапрос
select a.id, a.col1, a.col2, b.col1, b.col2 from ( select cl.col3, cl.col4 from table clients cl order by cl.date desc)gr1 table 1 a, table 1 b
where a.id = b.id
and a.col1 = 'some condition'
and b.col1 != a.col1
and a.col2 = gr1.col3
каким образом уменьшит нагрузку на процессор? и вообще когда есть подзапрос, как тот же oracle с ним поступает?
он сначала берет все результаты которые возвращает подзапрос, или он сначала подсовывает
and a.col2 = gr1.col3
где gr1 относится к подзапросу и ТОЛЬКО ПОТОМ, из тех мелких результатов уже делает:
order by cl.date desc
\или же он сначала берет все с таблицы clients, пытается все результаты отсортировать по дате
и только потом фильтрует по:
and a.col2 = gr1.col3
?
Делает CROSS JOIN удваивая таблицу, потом correlated subquery делая по запросу на КАЖДУЮ УДВОЕННУЮ СТРОКУ, потом несет какую-то шизу про цпу.
Тебе не похуй? Ты итак уже всю таблицу пару раз в память прочитал, память забил и вселенную нагрел.
Офигенно анон, спасибо! Что это за тулза такая?
Чем отличается seq scan от index scan? Есть мб какая-нибудь тулза которая визуально показывает этот процесс или видос?
Какая тулза? Ты про EXPLAIN? Открой юттаб и посмотри любого протыка. https://www.youtube.com/watch?v=P7EUFtjeAmI
Ты как вообще работу с базой изучаешь? По трещинам на потолке? Даже если по тиктокам учиться эта тема будет обязательно.
так обычный inner join также удваивает
разве что если select distinct делать?
>Делает CROSS JOIN удваивая таблицу, потом correlated subquery
а вот это - печалька
почему oracle не предусмотрели возможность сначала select в подзапросе отфильтровать ... или стой, а если так буду делать:
select a.id, a.col1, a.col2, b.col1, b.col2 from ( select cl.col3, cl.col4 from table clients cl where cl.col3 = a.col2 order by cl.date desc)gr1 table 1 a, table 1 b
where a.id = b.id
and a.col1 = 'some condition'
and b.col1 != a.col1
может oracle тогда сначала посмотрит...
ну я понимаю что это сложновато, but hear me out for a sec,
что если oracle сначала отфильтрует по условиям:
where a.id = b.id
and a.col1 = 'some condition'
and b.col1 != a.col1
table1, table2
а потом, будет подзапрос отфильтровывать, т.е. посмотрит на результаты с table1, table2
и такой: "аха, ну вот беру первое попавшееся значение в a.col2 из результата с table1, table2, и пытаюсь найти совпадение в clients таблице
нашел совпадение, все отличненько, теперь иду дальше, беру следующую строку из результата с table1, table2, и опять ищу по нему совпадение в таблице clients, и уже потом буду как надо слеплю этот результат с результатом с table1, table2"
т.е. ORACLE, вместо того чтобы сначала ВЫГРУЗИТЬ всю таблицу clients (где может быть несколько миллионов строк), и только ПОТОМ по этой выгрузке пытаться находить совпадение с результата с table1, table2
ну - так себе
ну типа в первом случае же он не выгружает всю таблицу, да? когда он по одному берет значения колонки a.col2 с результата с table1, table2 и пытается найти нужно строку в таблице clients?
т.е. по сути что если ты как юзер заранил бы вот так:
select cl.col3, cl.col4 from clients
where cl.col3 = 'literal string'
и так по несколько раз, подставляя литералы и ищя совпадения
а то мне кажется что oracle делает как во втором случае
сначала выгражает всю таблицу, и потом matching:
select cl.col3, cl.col4 (select cl2.col3, cl2.col4 from clients cl2)cl
where cl.col3 = 'literal string'
и так по нескольк раз, где 'literal string' будет разным.
надеюсь все понятно, по идее если давно знаком с SQL, то должно быть понятненько что я пытаюсь донести
так обычный inner join также удваивает
разве что если select distinct делать?
>Делает CROSS JOIN удваивая таблицу, потом correlated subquery
а вот это - печалька
почему oracle не предусмотрели возможность сначала select в подзапросе отфильтровать ... или стой, а если так буду делать:
select a.id, a.col1, a.col2, b.col1, b.col2 from ( select cl.col3, cl.col4 from table clients cl where cl.col3 = a.col2 order by cl.date desc)gr1 table 1 a, table 1 b
where a.id = b.id
and a.col1 = 'some condition'
and b.col1 != a.col1
может oracle тогда сначала посмотрит...
ну я понимаю что это сложновато, but hear me out for a sec,
что если oracle сначала отфильтрует по условиям:
where a.id = b.id
and a.col1 = 'some condition'
and b.col1 != a.col1
table1, table2
а потом, будет подзапрос отфильтровывать, т.е. посмотрит на результаты с table1, table2
и такой: "аха, ну вот беру первое попавшееся значение в a.col2 из результата с table1, table2, и пытаюсь найти совпадение в clients таблице
нашел совпадение, все отличненько, теперь иду дальше, беру следующую строку из результата с table1, table2, и опять ищу по нему совпадение в таблице clients, и уже потом буду как надо слеплю этот результат с результатом с table1, table2"
т.е. ORACLE, вместо того чтобы сначала ВЫГРУЗИТЬ всю таблицу clients (где может быть несколько миллионов строк), и только ПОТОМ по этой выгрузке пытаться находить совпадение с результата с table1, table2
ну - так себе
ну типа в первом случае же он не выгружает всю таблицу, да? когда он по одному берет значения колонки a.col2 с результата с table1, table2 и пытается найти нужно строку в таблице clients?
т.е. по сути что если ты как юзер заранил бы вот так:
select cl.col3, cl.col4 from clients
where cl.col3 = 'literal string'
и так по несколько раз, подставляя литералы и ищя совпадения
а то мне кажется что oracle делает как во втором случае
сначала выгражает всю таблицу, и потом matching:
select cl.col3, cl.col4 (select cl2.col3, cl2.col4 from clients cl2)cl
where cl.col3 = 'literal string'
и так по нескольк раз, где 'literal string' будет разным.
надеюсь все понятно, по идее если давно знаком с SQL, то должно быть понятненько что я пытаюсь донести
Пчел. https://dbfiddle.uk/Wh4zpMKJ и оракл посмотрит. Смысл твойих фантазий? Выполняй запрос и смотри. "Кажется" ему, охуеть вообще.
а как pl/sql посмотреть?
мне сразу же общий результат показывается
ну или просто ответьте на вопрос и все...
например я не вижу
DBMS_HPROF
package, хотя по поиску:
SELECT * FROM all_source
where UPPER(TEXT) like UPPER('%hprof%')
он выскакивает, в первом столбце (owner) написано "SYS"
я хотел посмотреть сколько по времени stored procedure занимает runtime'а
Так профилируй у себя, уебище. Нахуй ты сюда срешь своими стенами того как тебе че-то там кажется? Отпрофилируй свой запрос и все. Кретин ебучий.
в общем ты предлагаешь разделить на две процедуры, где одна первая процедура передает параметр второй (вызываемой)?
> у меня обычный доступ
А должен быть доступ к тестовой среде, где все варианты отладки и профилирования работали бы
Ну тип почти по трещинам. А как ты изучал, посоветуй материалов по postgre
Ананасы, я простая макака, пишущая простые бекенды, SQL я по сути не знаю, всегда пользовался ORM (TypeORM, Prisma). Где мне максимально быстро и удобно прокачать минимальную базу по базам данных и по SQL чтобы не обсираться на серьёзных собеседованиях?
Существует множество онлайн-курсов и ресурсов, которые помогут Вам освоить базы данных и SQL. Некоторые из них включают Codecademy, Coursera, Udemy, Khan Academy и W3Schools. Кроме того, Вы можете найти множество бесплатных учебных материалов на YouTube и в блогах. Рекомендуется также практиковать навыки SQL на практических примерах, поскольку это поможет Вам лучше понять и запомнить материал.
Если ты ничего кроме SQL не в состоянии запомнить - становишься датаинженером
А тебе надо потом будет активно искать или апдейтить записи по отдельным полям или ты сохраняешь и загружаешь всё целиком по id?
Не надо. Заказ, к нему чек. Можно ли чек хранить внутри заказа
Апдейтить кстати надо. Отдельно апдейт заказа, отдельно чека
Если нет специальных требований - делай как проще
>Если я хочу получить от пользователя input для variable, чтобы потом значение этого variable передать как параметр процедуре, как это сделать?
Для этого тебе вообще не нужно вообще никакие тем переменные и получения адреса, удали employee_id_input_temp := &employee_id_input; и передавай напрямую employee_id_input куда надо
А нахуя тебе ЦЕЛАЯ ТАБЛИЦА?
Ну сделай всего одну таблицу, в ней одну jsonb колонку, и в каждой строке храни ВСЕ сущности сразу. Подумаешь был json массив двойной вложенности, а стал тройной. Зато все в одном месте и на таблицах сэкономили. СМЕ-КАЛ-ОЧКА
Можно и все строки хранить в одном json-файле. Был массив тройной аложенности, а стал четверной, подумаешь. И на СУБД сэкономил.
А все файлы хранить в числе π. Всего-то нужно знать с которого знака твой файл начинается. Теперь вместо файлов на диске только один json со списком отступов.
/s/
Репорт.
Вот есть у меня таблица:
create table foo (id integer primary key autoincrement);
Есть другая таблица:
create table bar (id integer primary key, foreign key (id) references foo(id) on delete cascade);
Мы заведомо знаем, что foo и bar относятся один к одному и данный bar без данного foo смысла не имеет, хотя обратное неверно.
У нас так сделано в паре проектов, там целая иерархия из таблиц, почти как с наследованием в ООП. Модель данных специфичная, есть несколько десятков типов сущностей, у каждого типа свои атрибуты. Полёт нормальный, но для вывода списка всех записей для отображения юзеру надо писать трёхэтажный селект с джойнами и юнионами.
>но для вывода списка всех записей для отображения юзеру надо писать трёхэтажный селект с джойнами и юнионами.
Джойны, юнионы, груп_конкаты - это я привык всё, да. Просто у меня собственный автоинкрементный айдишник дочерней таблицы по сути и не используется нигде, джойны эти все цепляются по внешнему ключу от родительской таблицы, а юзеру он нахуй не нужен, ему из основной таблицы первичный ключ надо. Вот я и подумал совместить их в одном поле, он всё равно уникальным будет. Ну раз нормально - значит, так и сделаю, спасибо.
А нахуя? Ну кроме "кажется" и "захотелось"? Нахуя делить одну таблицу на две? Какой профит? Так ведь если это "выгодно" можно для каждой колонки по таблице сделать.
Сущность Б также является сущностью А, но обратное неверно. Иметь для каждой сущности А колонки, специфичные для сущности Б - нелогично. Вот исходя из такой логики и придумал это всё. Вряд ли это "выгодно" с точки зрения производительности (хотя джойны по праймари кеям работают достаточно быстро и значительной разницы не будет), но чуть меньше путаницы получается.
Хуятно. Вот щитпостишь ты на сосаче, где все треды - это посты, но не все посты это треды. Значит, что-то отличает тред от регулярного поста, и это не только нулевой родитель. У треда дохуя метадаты - закрыт не закрыт, прикреплён не прикреплён, достигнут ли бамп-лимит, когда был последний бамп, etc. Надо для каждого поста колонки pinned и closed держать? А как проверять данные на апдейтах и инзертах? Ведь если это тред, то все обязательные для треда поля должны быть не пустыми, а если не тред, то все должны быть пустыми. Ебанутые жирные checkи для каждой колонки городить? Или на уровне приложения валидаторы говнокодить будешь?
Мудила, гороховый, мне тебе тут википедию по нормальным формам зачитывать? Ну не знаешь ты нихуя. Ну не читал ты нихуя. Нет у тебя образования по теме. Ну нахуй ты пиздишь тогда? Нахуя ты ебло свое разеваешь?
>Ясно
Понятно?
Впитал мудрость? Вот так надо вас слепошарых, ленивых долбоебов учить. Википедию блядь ему почитай. Мамка почитает, за тарелочкой борща.
>думает я открывал ссылочку
Так ты будешь пояснять, где я неправ, или нахуй пойдёшь, жирнота?
Так я тебе даже конкретный пример привёл, зачем это нужно, мудило. Всё, что ты, чепушило с ОБРАЗОВАНИЕМ, смог родить высрать в ответ -- нууээээыыы пукмням нормальные формы. Иди нахуй, короче, зелень ебаная.
Какая разница зачем тебе это нужно? Спроси любого долбоеба зачем он делает тупую хуйню, и он ответиит тебе что ему "нужно".
>зелень ебаная
Конечно это я зелень, а не ты, пидор тупой, не способный открыть википедию и прочитать чем ты блядь вообще пользуешься.
И снова никакой конкретики от жирного хуйла. Всё, твой лимит моего внимания исчерпан.
Наебал, запутал, затралел.
Ну ты внатуре дебил? Ты че ждешь, что я тебе нахуй тут составлю курс по реляционной теории? Что такое отношения, избыточность, нормальные формы? Первый семестр, второй?
Открой свои залитые стекломоем шары и прочитай хоть что-нибудь из шапки по теме, дегенерат ебучий. Просто охуеть. С каждым годом все более тупорылые дифиченты лезут.
Тупорылый, дырявый кретин.
Данные в реляционной базе хранятся в виде отношений колонок к первичному ключу. Поэтому, сука ты проткнутая, база называется РЕЛЯЦИОННОЙ. Колонки относящиеся к первичному ключу 1 к 1 образуют таблицу. Если отношение 1 к n, то это уже другая таблица.
Это можно выразить рядом предикатов, каждый из которых формирует факт о записи в таблице. Если предикаты относятся к записи через конъюнкцию, то эти предикаты относятся к одной таблице фактов. А если через дизъюнкцию, то к другой.
Так вот нормальные формы и формируют правила построения таблиц с непроитиворечивыми фактами. Не может блядь в реляционной модели быть одновременно истинным предикат "это пост" и "это тред". Между ними должна быть диъюнкция "это пост или это тред". И это блядь значит что пост и тред - это разные таблицы, гандон ты использованный.
>ну нада сделоть копипасту две почти одинаковых таблицы и в одну чуть больше полей напихать уминя АБРАЗАВАНЯ яскозал а ты дурак
А завтра сосака захочет переделать сосач в реддит и решит, что треды могут идти лесенкой вплоть до энной или бесконечной вложенности. И что теперь, базу мигрировать, все посты тредами делать и таблицы ворочать?
Пчел, если у тебя не реляционные данные - не используй реляционную базу.
Ты просто не умеешь пользоваться инструментом. А когда тебе об этом сказали, вместо того чтобы пойти почитать какого-нибудь дейта, ты порвался и залил весь тред говном.
>ты порвался
Эта мощная проекция чмони, изливающегося отборной желчью вот уже второй десяток постов и неспособного ответить на элементарный вопрос, лол. Интересные у тебя аутотренинги.
>не используй реляционную базу.
А альтернатив условному sqlite и нет особо, щито поделать.
Да, и ты тоже иди нахуй.
Это вопрос скорее к Entity Framework, чем к базам данных, лучше спрашивать в профильном треде про шарп. Вероятно, строка подключения неправильная.
Ок.
ЕОТ(есть одна таблица postgres), в ней колонка numeric(38)( хз почему, но в ней значения строго ограничены по факту 1-5).
Стоит btree индекс на колонке.
Когда использую запрос col != 4, и делать explain, то пишет, что перебор идет.
Я попробовал заменить col > 4 and col < 4, тут начинаются приколы.
Когда запускаю col > 4, то индекс применяется.
Когда запускаю col < 4, то перебор.
Итого col > 4 and col < 4 перебор.
Я не знаю как быть, блин.
Ну это видимо потому что тип numeric, то есть произвольной точности (я бы предположил). Попробуй в integer переделать
450x360, 0:10
Ну так и где explain? Может быть миллион причин почему индекс не используется. Может у тебя col < 4 это почти вся таблица, и если ты селектишь не только индекс, то и нахуй индекс тогда использовать, если все равно всю таблицу читать нужно?
Раз за разом одно и то же. Ебучий черный ящик. Сделай сниппет https://dbfiddle.uk/S9ZOHCkV создай в нем таблицу, заполни и напиши запрос. Только тогда можно будет что-то конкретно сказать и показать. А то ни таблицы, ни запроса, ни эксплейна, нихуя. Что в черном ящике?
А в нижнем в корне также 3 ключа, но уже 4 дочерних узла - но диапазоны немного другие, + значения корневых ключей не включаются.
Никак не могу найти именно разницу, везде описывается либо первый кейс, либо второй. А как на самом деле то блять?
Вопрос скорее не про базы данных, а про структуры данных как таковые.
Дочерний узел может не включать ключ из родительского узла, ключи дочернего узла просто должны соответствовать диапазону, т.е., если написано "от 4 до 32", то 4 не обязательно должно присутствовать в узле, узел может начинаться и с 5, и с 6.
Потыкай эти визуализации, может, станет понятнее:
https://www.cs.usfca.edu/~galles/visualization/BTree.html
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
>в интернете гуляет два вида дерева
Куда они нахуй гуляют? Вдоль по улице? Открываешь ютуб, пишешь b-tree и тебе миллион протыков в прямом эфире все строят и объясняют.
А по поводу количества нод.
Ты определение b-tree читал? Это СБАЛАСНИРОВАННОЕ блядь дерево. Как сбалансированное? Да как угодно, так как нам надо блядь. По ситуации епты. В базах надо чтобы деревья было быстро и удобно с диска читать, под это и балансируют. Глубина поменьше, нод побольше. https://habr.com/ru/articles/783012/
С деревьями каша в голове даже у ученых моченых. Помню скопипиздил алгоритм удаления с балансировкой из книги VB algorithms, а там баг был стремный, который только при определенной конфигурации узлов проявлялся. Потом я с ебалом пикрил три дня сидел. Так что ты там осторожнее.
Вот есть у меня маленький проект на python+postgres.
Я хотел бы подготовить контейнер, при запуске которого сервис сразу же начал бы работать. Но что-то я явно делаю неправильно.
Пытаюсь делать как в туториале, но консоль ругается.
Вопрос:
docker run --name habr-pg-13.3 -p 5432:5432 -e POSTGRES_USER=habrpguser -e POSTGRES_PASSWORD=pgpwd4habr -e POSTGRES_DB=habrdb -d -v "/Users/ivahrusev/src/useful-sql-scripts/running_pg_in_docker/2. Init Database":/docker-entrypoint-initdb.d postgres:13.3
в папке 2. Init Database (Это из туториала. У него явно все прокатило) скрипты на каком языке должны лежать?
В моем случае результат выглядит так: docker: Error response from daemon: error while creating mount source path '/Users/user/Desktop/projects/horses/horsebot/table/init': mkdir /Users: file exists.
Типа что? Я хочу инициализировать базу данных файлами sql по пути, а он мне существует директория
docker: Error response from daemon: error while creating mount source path '/Users/user/Desktop/projects/horses/horsebot/table/init': mkdir /Users: file exists.
Ну и напиши этому долбоебу что у него туториал хуевый. Нахуй ты нам это пишешь?
data scince, data engineer скоро тоже станут не нужны сантехниками, как и обычные кодеры?
Типа chatGPT их всех заменит?
Не кидайтесь пжлста говном в меня. Вопрос действительно интересует.
Гопота советовала дропнуть все foreign key constraints и руками UPDATE сделать. Но мне не захотелось ебаться с миграциями джанго туда сюда, и там было на самом деле 5+ таблиц которые зависели от основной.
Как мне сейчас кажется там таблица Автор должна иметь id автоинкремент pk, и другие уже на этот id подписываются не я изначально модели создавал. Тогда бы изи можно было обновить поле в Автор и похуй было бы, правильно же?
> таблица Автор должна иметь id автоинкремент pk, и другие уже на этот id подписываются
Да. ID как раз для того и придуманы, чтобы не возникало проблем как у тебя. Правильнее всего будет добавить ID и сразу сгенерировать значения для существующих записей. Хз, как это делается в джанге, но в нативном SQL это делается так: https://stackoverflow.com/questions/2944499/ . Ну и доработать форенкеи в других таблицах.
Можно, конечно, и по-тупому выключить констреинты, проапдейтить и опять включить только делать это придётся каждый раз при изменении имени.
Спасибо
При проектировании миграций при разработке архитектуры новых таблиц баз данных, я всегда ставлю индексы на те колонки, которые, на мой взгляд, будут часто использоваться при поиске, например, на email в таблице пользователей.
Также я ставлю индексы на все колонки с _id, которые участвуют в соотношениях, т.к. в reference или связях, один ко многим, допустим.
Допустим, order_id, user_id и т.п, потому что такие колонки всегда участвуют в поиске с джоинами какими-нибудь.
Но несколько дней назад мне в голову сказали, что такой подход не правильный, и нужно всегда смотреть на время выполнения запросов и на их частоту, и брать для индексов колонки только оттуда.
Я понимаю, что и такой подход верный, т.е. если в логах есть, например, колонка с created_at в запросе, который длится 20 секунд, то ее нужно добавить в индекс тоже, но почему нельзя ставить индексы всегда на колонки с _id ?
Вот я создаю таблицу, почему ставить сразу индекс на user_id не верно?
Ты никогда не угадаешь, как планировщик построит запрос, а лишние индексы только тормозят базу. Надо смотреть план запроса на живых данных. Где table scan - туда индекс, где table lookup на одно-два поля - добавляешь эти поля в индекс как include, не напрямую. Снова смотришь план, если не помогло - откатываешь. В особо тяжелых случаях с пейджингом разделяешь запрос на внутренний и внешний.
>нужно всегда смотреть на время выполнения запросов и на их частоту, и брать для индексов колонки только оттуда.
Ну так тебе логи и скажут что нужно по колонке с внешним ключем индекс делать.
>если в логах есть, например, колонка с created_at в запросе, который длится 20 секунд, то ее нужно добавить в индекс тоже
Железная логика. Добавляешь все поля из селекта в индекс и кайфуешь. Нахуя только тебе сама таблица при таких раскладах, непонятно.
>Вот я создаю таблицу, почему ставить сразу индекс на user_id не верно?
Не почему.
Ставить индекс верно если он снижает нагрузку на базу, и не верно если повышает. Если речь о нагруженной базе, то у тебя не будет времени собирать статистику - твой запрос забьет доступ к диску и она блядь ляжет вся. Поэтому башкой надо думать заранее.
>Ну так тебе логи и скажут
Не роляет, если у тебя много разных инсталляций продукта. Даже если инстанс один, то ты не можешь угадать когда добавить нужный индекс. Каждый индекс - это тормоза на запись
>Не роляет, если у тебя много разных инсталляций продукта.
И? База то у тебя на сервере. Или ты имеешь ввиду что у каждой инсталяции своя база? Это настолько редкий случай, что смысла его обсуждать нет. Там и без базы ебли куча.
>Даже если инстанс один, то ты не можешь угадать когда добавить нужный индекс.
Получается тогда что все индексы в мире созданы от пизды и на самом деле снижают производительность, потому что "даже угадать нельзя".
Ну или ты написал какую-то невероятно тупую хуйню.
>Каждый индекс - это тормоза на запись
Ноу щит, шерлок. А запросы без индекса - это тормоза на чтение. И чего? Выводы какие?
Ты просто очередной крудошлеп, который лепит репазитарий в спрэнг фримверке со своими файндБайИмэйлЭндЮзерСтатус, а потом бежит лепить миграцию на бд, чтобы воткнуть два новых индекса. Поэтому таких лепил и попускают на собесах и дрочат вопросами из кабанчика
Предлагаешь тянуть соплю из монад IQueriable<T> через весь код до самого контроллера?
Предлагаю прочитать хотя бы кабанчика и не называть себя сеньором хотя бы следующие лет 15-20
Что ты там собрался читать? Кабанчик - это тупо обзорный справочник. Бывают базы такие, а бывают другие, ну заебись, дальше что? Всей командой прочитали кабанчика и заменили кафку на кафку.
>кафку
Чел... У вас не те масштабы проекта. Просто пуляешь в базюльку, а потом по крону дрочишь селект из базы - ВСЕ!
Расскажи, какие масштабы у вас в епаме.
>Ставить индекс верно если он снижает нагрузку на базу, и не верно если повышает.
>кабанчик
Ебанарий, ты в кабанчике прочитал что это не так? Или тебя на собесах выдрочили?
Анон, у тебя на картинке B+ и B-tree, это немного разные вещи
Чекни тут -> https://neerc.ifmo.ru/wiki/index.php?title=B%2B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE
зато есть всякие Скуфские Мудрости про уазик
Есть сайт с книгами.
Там есть таблица book_chapters c полями:
book_id (ID книги) | title (Название главы) | content (Текст главы)
Текст главы (поле content) может быть ОЧЕНЬ ОГРОМНЫМ, вплоть до несколько мегабайт.
Так вот, много где используется запрос SELECT title FROM book_chapters WHERE book_id = XXX только лишь для того, чтобы вывести список глав, оглавление книги, но тексты не нужны.
Скажите, может лучше разделить таблицу на две, где в одной таблице будет список глав:
book_title (id, book_id, title)
а в другой - текст к этим главам:
title_text (title_id, content)
?
Чтобы запрос для получения только оглавления был к отдельной легкой таблице без текста
Колонка, которая не используется в запросе, никак на его производительность не влияет.
Хм, хорошо если и так.
Просто у меня где то в памяти висит текст какой-то статьи, забыл уже, что то типа "когда ищется в строке с большим размерами, то требуется больше оперативной памяти и больше времени, даже несмотря на то, что я ограничил SELECT легкими полями."
Не всегда.
Я больше склоняюсь оставить одну таблицу, но хочется ознакомится с мнениями бывалых, чтобы утвердится хоть в каком-то мнении.
А я не работяга даже, чисто хобби, никаких опытных знакомых нет.
>когда ищется в строке с большим размерами
Чушь. База не так работает.
>Не всегда.
Если ты прямо сейчас не можешь показать сниппет с примером, то это "не всегда" настолько редкое, что на него похуй всегда.
А разве не так работает.
Ну типа сделал запрос select title from book_chapters where book_id=1555.
Хоть я и ограничил по title, все равно внутри выгрузятся все строки, чтобы оттуда потом извлечь только title.
Например, нашлось 10 глав с текстами общим размером 5 мегабайт. То есть аж 5 мегабайт выгрузилось в память, вместе с названиями глав, и текстами этих глав, но мне нужно только главы, которые занимают в общей сложности ну примерно 500 байт. Эдак память быстро забьется.
Выполнил, все норм. Все же по индексам ищется, какие могут быть проблемы. Но как мне например инсценировать что тысячи человек могут откроют страницу где выведены десятки книг с главами. Я не тестировщик, я не умею
>А разве не так работает.
А разве на каждый запрос не вся таблица стразу грузится? Хоть ты и граничил по id, все равно внутри выгрузятся все строки, чтобы оттуда извлечь только твою.
Чел, хуйню не неси. Ты спросил - тебе ответили.
>Но как мне например инсценировать что тысячи человек могут откроют страницу где выведены десятки книг с главами
Похуй. Не будет никаких тысяч человек.
>выгрузятся все строки
Чел, таблица весит 5.6 гигов на данный момент. Ясное дело, что она не выгружается целиком. Там все явно не так работает.
Да не пизди. Когда тебе нужна одна колонка, то всю строку грузит, а когда тебе нужна одна строка всю таблицу не грузит что-ли? Надо на хабре спросить обязательно.
Не знаешь, какой стул выбрать - спроси.
Если нет утвердительного ответа - значит, можешь выбрать любой, значит, у каждого стула есть плюсы и минусы.
А вот если большинство утвердительно говорит - вот этот стул нужен - то этот стул и бери.
Иногда и правда бывают такие ситуации, когда нет единого идеального решения - тогда можно выбрать любой стул.
Однако, если ты выбрал стул "А", то могут налететь поклонники стула "Б". Но в этом случае ты не один, у тебя будут сторонники стула "А", а это твоя поддержка, твоя личная армия - вот и страви их.
innodb_file_format=barracuda
Не так.
В тысячный раз сообщаем :
SQL - декларативный язык. Ты никогда не можешь быть уверен в том какой способ обработки выберет сервер.
Да и не нужно это тебе.
Да, при некоторых условиях загрузит все пачкой без индекса. Добиться этого непросто, но точно возможно. Иди нахуй, не буду ради тебя это делать.
Шиз, так с двумя таблицами вместо одной все то же самое будет. Точно так же будет возможно насрать себе в штаны.
Ну ты блядь и кретин канеш.
Это всего лишь зеркало. Можно похлопать упоротым, которые заводят там пуллреквесты. Туда же ядро Linux.
Сунь-Цзы, ты?
Бля реально ВСЁ. Можно хоть на луну полететь. Вкатывайся в трейдинг опционами и будешь иметь хоть миллион рублей в неделю, работая по полчаса в день. А айти - это просто наёмная работа. Это не "кнопка бабло", которую нажал и бабло посыпалось. Это не наебизнес. Сверхзарплат здесь не так чтобы много. Если ты хочешь именно сверхзарплату, то вкатывайся в инвестиции, трейдинг, венчурные инвестиции, открывай свою фирму, и будет тебе и ламборгини и всё остальное.
я хочу зп 150к с перспективой в 500к. При этом не жить на работе и работой.
И удаленку хочу.
Нет. А ты хотел услышать да?
Хоти дальше. Чел, наёмная работа - это продажа времени в обмен на деньги. Не стоит твой час 500к / 5 дней x 2 часа х 4 недели = 12,5к рублей/час. Ты же не Вероника Степанова и не Бейонс. Рассмотри вышеприведенный вариант с опционами/фьючерсами. Там выхлоп прямо пропорционален вложенным средствам. Если ты дохуя вложил, то дохуя можешь и получить. Мало вложил, значит и маленький будет выхлоп. И работай хоть по 5 минут в день.
А книги читал?
Хочу эту тупую работу передать psql да и в целом начать в нем работать, но как загрузить эти вордовские таблицы не знаю, на РАБоте спросить не у кого, c трудом excel понимают.
Уже скачал pgAdmi 4 и докачиваю dbeaver.
Буду рад любой инфе.
Готовых тулз не знаю, я бы прогуглил что-то в стиле word table to sql, если не получится, то прогуглил бы как каком-нибудь питоне (там скорее всего есть тулинг) распарсить вордовский док и написал бы на нем скрипт, который будет парсить доки, доставать данные из табличек и писать в бдшку. прогуглил на английском парсинг, по первой ссылке есть что-то похожее на нужное тебе https://stackoverflow.com/questions/58254609/python-docx-parse-a-table-to-panda-dataframe
Если у тебя объемы данных небольшие и история с прошлых файлов не нужна, то и манипуляровать данными прямо в питоне удобнее будет, например, в том же пандасе.
Вообще, есть варик подключиться к постгресу прямо из ворда.
Есть специальный драйвер для микрософта https://odbc.postgresql.org/
Через него виндовский софт отлично коннектится к постгресу. У меня микрософтовский офис не стоит, но вот пикрелейтед libre office отлично коннектится.
А дальше с помощью VBA можно делать что-то вот такое https://www.youtube.com/watch?v=Hs6ALekQ0AM
>>262856
Похоже, не получится это сделать просто, как хотелось.
Если я правильно понял, это для готовых таблиц, а у меня куча символов, которые надочерез что-то пропустить, наверное пандас для этого и нужен.
В общих чертах понимаю механизм, а реализовать затрудняюсь, с питоном дел не имел.
>>262955
Крутое применение, но он вытягивает данные с сервера, а я наоборот хочу туда перенести, опять же, если я правильно понял что он делает
походу нужно какой-то язык программирования учить.
>он вытягивает данные с сервера, а я наоборот хочу туда перенести
Он выполняет запросы к базе. Шли запросы не SELECT, а INSERT и будет тебе наоборот.
>походу нужно какой-то язык программирования учить
Чел, кто ж тебе виноват что ты даже с вордом работать не умеешь. Эта хуйня так-то в школьной программе есть.
Всякие иконки можно в блобе хранить, так?
А всякие видео, галерею и тд в виртуальной папке или туда же?
В файловой системе.
> Где сайт/серверное приложение должно хранить тяжелые мультимедия-файлы?
Уж точно не в базе данных.
> Всякие иконки можно в блобе хранить, так?
Нет.
Ладно, спасибо.
Гугли S3 и его опен-сорс альтернативы
ПЕРЕКАТ >>3268780 (OP)
ПЕРЕКАТ >>3268780 (OP)
ПЕРЕКАТ >>3268780 (OP)
ПЕРЕКАТ >>3268780 (OP)