И снова это неиндексированный баз данных тред! Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках, Рассказываем, как работаем аналитиками и мечтаем стать разработчиками, Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя, Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ, Ищем ошибки в аббривиатурах MDX DMX XMLA, Доебываемся до эс - ку - элей наших же потенциальных конкурентов >Select id from tbl_table_with_id where id = (select max(id) from tbl_table_with_id) >ЧТО НЕ ТАК-ТО У МЕНЯ? Удивляемся, как за знания, приобретаемые за 4 месяца на sql-ex, могут платить по 100к, и бугуртим, что ниасилили и 100к не получаем. А так же: Постгре или постгрес? Май эс ку эль или мускуль? Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
Награда светит не посмертною медалью, отнюдь Это храм старого формата, так предали огню И скоптили небо старики, что слышны с Невской реки Мы видим дым от костра - "Да здравствуют базовики!"
>>1222346 (OP) Сразу вопрос. Каким образом можно удалить знаки препинания из строки? Есть ли что-то похожее? SELECT функция(атрибут, знак препинания) FROM таблица
>>1223234 У тебя полномочия администратора может быть? Как я помню там не из под рута, а из под ассоциативного пользователя необходимо заходить или из под mysql
Анон можешь дать пару советов и гайдов как вкатиться в sql? Из скилов только знания уровня дауна С++ типа решения не сложных задач, которые были получены 10 лет назад и успешно забыты. А сейчас короч мне нужно сделать базу данных для стоматологии похожую на оп пик, это реально ? скок времени это может занять?
>>1223927 спасибо анон > с кнопочками и свистоперделками на пике было бы то что надо >Откуда вообще тебе дали это дали по работе, подробностей пока нету тк сам их не знаю надо звонить
О чем они? Я про последнее предложение. Почему 4 бэкслэша? При single quote это был бы один слэш, т.к. их не надо эскейпить вообще, при E'yoba' пришлось бы написать 2 слэша, т.к. в Е строках \ значит начало escape sequence. Но откуда 4 то блять. В обычной 'строке' ? Это документация постгреса если че
Внимание, господа бездельники и позеры, есть всем известное хранилилище редис и для чего его только не используют из-за его производительности.
Собственно, у меня как раз таки проблема с его производительностью скорее не его как хранилища, а его сетевой подсистемы, есть такая необходимость, читать и писать в него в много потоков с разных инстансов, а так как спроектирован он как однопоточное приложение, о конкурентном доступе можно забыть.
Соответственно, вопрос к господам знатокам, а если ли концепиуально похожее, легковестное in-memory хранилище не имееющее такого врожденного недостатка, как блокировка всего сервиса, пока выполняется один запрос?
>>1223922 имея нормальные требования - проектирование бд где-нить день, лучше два, реализация бизнес логики, гуйни на веб технологиях html+js+css python/go/php неделя-две в плюсах и десктопных технологиях у меня нет компетенций для оценки сроков.
Но, так как нормальных требований не будет да и меняться они будут по сто раз на дню, то от полугода до бесконечности.
>>1224604 >tarantool оно может быть и подойдет, но не хотелось бы держать такого монстра в проде только ради по сути большой хеш-таблицы (опционально распределенной).
Сап, бигдаты. Я JS макака, вкатываюсь в бэкенд на node.js ага, я еще питон знаю - но это позже, да и не суть Хочу освоить SQL. Скажите с чего начать совсем нубарю? Какой учебник? Какая СУБД? Как мне облегчить жизнь и обучение себе? GUI какое юзать? Я вообще лошара в БД.
>>1225074 Иди скачай книжку ицыка бен-ган, основы T-SQL. Накати MS SQL, если нужно, напиши сюда, я скину тебе скрипт учебной базы лучше сам на торренте найди. После того как прочтёшь главу о подзапросах, пиздуй выполнять упражнения на сайте sql-exe. Дальше сам разберёшься. Если тебе нужна реляционная теория больше чем просто одна глава, то читай Дейта.
>TABLE "attachment" >TABLE "post_attachment" Зочем тут 2 таблицы? У тебя аттачменты всегда уникальные. Или ты собираешься проверять на уникальность при загрузке?
>>1228513 минимум - это хорошо знать SQL и уже можно начинать вкатываться.
если не знаешь БД вообще, то читать какие-нибудь основы (дейт или чо там) дрочить sql-exe.ru. Скачать какую-нибудь Oracle(лучше), MS SQL. Почитать их документацию, потыкаться в них. Знать какие индексы есть нахуа они нужны. (хотя они зачастую в DWH не нужны, но долбоебы любят спрашивать). Чем OLTP база отличается от аналитической. Про етль можно почитать в data warehouse etl tookit кимбалла. Но лучше это делать с практикой, просто так туго будет заходить.
Проще всего, если в Рахе, то с одним SQL вкатиться в интегратор. Они набирают на эту тему пиздюков толпами. И потом уже на работе читать ньюансы, хоть понятно о чем будет речь.
Если погромист в душе, то лучше вкатываться в жабу. Там больше бабла и разнообразия.
>>1228614 делаю в телекомах и банках. Разный оракел/ексадату/терадату и прочий mpp задорого. Просто быдлокодер. Получаю оклад 165к и если с премией через год, то средне в месяц будет 210+.
Но такие зп у обычных ETL почти не бывают. Не стоит обольщаться. Больше 200 это уже у архитекторов, погоняльщиков рабов, РП-шек. Можно полуперекатиться в банке на полубизнес - отчетность, фрод, розничная аналитика, риски. Сидеть по сути клепать те же отчеты, только со знанием прикладной области, называться типа директор направления и получать до 250к. Ну это если более менее софт скилы есть.
В целом работа не матан. Местами примитивная. Хотя есть места, где на экспертизе можно выезжать из толпы. Если сыч и чисто технарь, лучше вкатываться в general purpose языки. Там больше бабла и веселей.
>>1228963 35. Когда работаешь с двх так или иначе осваиваешь. Кто-то быстрее, кто-то нихуя.
Управлять рабами никогда не стремился. Если по тех стязе смотреть, можно стать арихтектором. Я им был некоторое время. Но он в банках в основном занимается тем, что долго хуесосится на митингах с дебилами, доказывая очевидные вещи. Пишет в ворд, рисует в визио и поверпейнт. зп 250-300к может быть. (столько может жаба кодер получать). Вакансий мало очень.
планы заниматься тем же за 200к. (основной план)
либо перекат в мл либо перекат в жабу (если схуято уволят, что очень маловероятно) либо перекат в гермашку
я хочу создать базу данных для сенсорных данных и классификаторов на них.
я создала entity сенсорные данные и entity классификатор, они соединены relationship "использует", n:m. У сенсорных данных свои свойства, а у классификатора есть ещё свойство "тренировочные данные", где я планирую сохранять список id использованных сенсорных данных. Как 'то пометить? И я правильно всё сделала?
Перешёл на новое место работы как data ANALyst. Сразу же посадили хуярить репортинг (используется mysql + excel, больше нихуя). И тут стало известно что будут имплементировать Zeppelin (т.к. просто и бесплатный). Установил дома на локалку, почитал документацию, остались такие вопросы: Насколько эта приблуда перспективна в плане отчётности и аналитики на уровне "мы вчера всё проебали\заработали"?
>>1232098 делал хд в 4 банках из топ 5 кроме колхоза, в двух телекомах. работал в 2х интеграторах, в штате 2х банков и в телекоме. Больше платят в сбере сейчас.
Хочу, по заветам пасты, написать свою борду. Насколько для каждого раздела обоснованно создавать свою таблицу? Вроде это и поиск ускорит, и еблю с айдишниками постов снизит значительно (для каждого раздела свой счетчик номера поста). Или лучше сделать составной первичный ключ из раздел+номер_поста?
Няши, поясните, а то сам не могу выбрать. Использую postgresql. Есть два стула: 1)Разбить все данные по схемам, в которых будет много-много небольших таблиц 2)Использовать одну схему, а данные разбить по таблицам, соответственно их будет не так много (несколько сотен), но они будут ОЧЕ большими - десятки (а то и сотни) тысяч строк. Что лучше?
>>1234559 > Насколько для каждого раздела обоснованно создавать свою таблицу? Отвратительно. Разделы с точки зрения постов абсолютно одинаковые.
Таблица Board. В ней все разделы. К каждому разделу цепляются правила раздела типа размера картинок и прочей дрисни что надо. Также к каждому разделу делается сиквенс чтобы новые посты их дергали. К Board один ко многим таблица Post. В ней суррогатный PK и номер поста в борде и FK к разделу. Это позволит делать нормальные ссылки на посты на других бордах без писек.
>>1235091 Можешь юзать разные схемы если у тебя разные приложухи и реально они не пересекаются. Если приложуха одна, то не еби мозг и делай одну схему с нормальными таблицами и нормализацией. > они будут ОЧЕ большими - десятки (а то и сотни) тысяч строк Это вообще не размер. Просто вообще. Шардирование для больших таблиц с идемпотентной аффинити-функцией от ключа если дорастешь до миллионов и миллионов, а на оракл денег не дают. Про бигдату же узнаешь если дорастешь.
>>1235108 > Это вообще не размер. Просто вообще. Для какой-нибудь компании - вполне возможно, а у меня приложение для личного пользования. И когда я вижу что постгрес жрет 90% проца и 6 гб рамы, мне становится печально. Но спасибо, не стал запариваться со схемами.
>>1235118 > 6 гб рамы У каждого второго браузер жрет больше. > постгрес жрет 90% проца Что у тебя жрет 90% проца? Селекты? Нехуй фуллсканы по неиндексированным колонкам делать. Исправь и будет нормально работать.
>>1235122 > У каждого второго браузер жрет больше. Ну так то на рабочем компе, где меньше 16 гигов по определению не бывает. А на домашний сервак, где и крутится дб, пришлось докупить еще 8 гб, а то он в своп уходил сразу же. > Нехуй фуллсканы по неиндексированным колонкам делать. В каком плане "неиндексированным"? У меня колонки как на пике, и когда я делаю самый обычный запрос типа "SELECT board, url, tag, notInteresting, dead FROM interesting_threads WHERE url = '"+num+"' AND board = '"+board+"';" хотя бы раз в секунду, начинаются просадки. Я конечно понимаю, что проблема еще и в том, что там стоит пень с 2 ядрами, но не на столько же все плохо должно быть.
>>1235127 > В каком плане "неиндексированным"? В чем у тебя проблема я написал и слова для гуглинга тоже написал. Пиздуй гуглить и тогда решить свою проблему или иди нахуй и страдай.
Анон нид хелп, это почти правильный код, где ошибки точно не знаю.он типа выдает результаты, но где то с нулами. Скажите на пальцах как это понимать и где можно посмотреть информацию по таким сложным техническим запросам или какие главы учебника почитать чтобы это понять и какого учебника? я проходил только лоу уровень где связь только 2 таблиц джоинами, а тут их много и еще вложенные селекты ... Это типа надо сделать отчеты для врачей по времени и по определенным случаем лечения, фотка задания на третьем пике. вторая это почти тоже задание только меньше столбцов и лучше видно таблицу сверху.
>>1222346 (OP) Аноны, работал кто-нибудь с монго дб? У меныя тут запрос, который делает много lookup'ов, сторонних коллекций в основную. К сожалению пока я их не могу убрать, так что ищу советов по по оптимизации. К счастью все эти лукапы не зависят друг от друга и могли бы выполняться параллельно. Я перепробовал несколько решений, пока единственное работающее было - через $facet, но оно оказалось в 2 раза медленнее обычной последовательности лукапов. Может кто помочь?
>>1237407 > У меныя тут запрос, который делает много lookup'ов, сторонних коллекций в основную. Ничего личного, но еще один пример когда ужа натягивают на ежа реляционные по природе данные натягивают в нереляционщину.
>>1237409 Сам знаю, но от осознания этого факта ничего не меняется. Изменение схемы данных займет слишком много времени и это никто не одобрит (да и насколько я вижу - это не особо возможно). ТАк что пока работаем с тем что есть.
>>1237514 для меня сложные, я 5 дней сикуэль изучаю. анон помоги плс, скажи где ошибки ? хм может использовать Coalesce, чтобы не считал пустые значение, это поможет ?
Платиновый вопрос: кого можно называть разработчиком SQL, а кого аналитиком?
Я вот вообще просто работаю СПЕЦИАЛИСТОМ в банке. Но по факту строю витрины данных, пилю скрипты на PL для правильного переноса из одной системы в другую, иногда заливаю данные с помощью sqlldr, разрабатываю функции всякий парсинг, pipeline, пилю мониторинг систем рассылки там на почту при пиздецоме, пару раз проектировал всякую ебанину для новых проектов в БД. Ну и конечно сопровождаю все что написал. Работаю на оракле. И кто я? Разраб или аналитик все таки?
И сколько получают в среднем в ДС разрабы SQL? На hh забанили, хочу услышать мнение анонов
Двощик, выручай! Есть постгрес установленный в сраный шиндоус. Тут вы меня захотите закидать тряпками, но это не я так хочу, юзер моего говнософта не сможет в линакс. Короче, я запустил инсталер, несколько раз нажал далее, инсталер сам создал юзера postgres, мой козырный пароль 1234, добавил в PATH каталог с бинарями C:\Program Files\PostgreSQL\10\bin. Теперь мне надо запилить тестовую базу данных шоб оттестировать работу на шинде, а она нихуя не создается. Двощик, помогай-выручай, что я делаю не так?
Прив. Я совсем нуб, вкатываюсь фронта JS. Развернул Microsoft SQL server, поставил SQL Server Management Studio. Кое как прицепил к ней какую то учебную базу. И нихуя не понял. Что куда и откуда. НА этапе установки базы я задал (а точнее дефолтное оставил ) некоторое имя: MSSQLSERVER. И где его юзать? Когда запускаю SSMS - появляется окошко "Соединение с сервером" - и там ток из вариантов имя моей учетки компа. Короче пустой сервер. Потом я подгрузил туда учебную базувыполнил скрипт ф5 нажал, лол и у меня во вкладке "Базы данных" появилась новая БД. Я не оч понимаю менеджмент баз. У меня один сервер называющийся по моей учетке, да? В него я могу подгрузить самые разные БД, и все они отобразятся в вкладке "Базы данных"? И все они независимы будут?
Всем привет. Какие вопросы по mysql вы можете задать, чтобы отличить сеньора от не-сеньора? Я пока придумал три. 1) В чём отличие движков разных БД? InnoDB vs Mysql (trollface), Mysql vs MariaDB и причём тут Postgres? В чём отличия каждого из них при репликации? 2) Как устроен внутри поисковый индекс? Как он работает? Как это связано с составными ключами? 3) Есть колонка в таблице, в ней численные значения (1,5,6,10,xxx). Написать запрос, который выведет отсутствующие промежутки (1-5,6-10).
>>1240842 Да бля, я тут с SELECT WHERE ковыряюсь. Большего пока не нужно. На работке есть большая база на 5 млн. лиц. Моя работа прямо связана с работой в этой базе, и прогой что ею управляет. В перспективе я должен овладеть мастерством SQL, но жопу никто не жжет, поэтому вкатываюсь равномерно. Лучше скажи - у меня на nodejs сайт есть, учебный. Хочу к нему прикрутить базу. MS SQL Server чет монструозно для этих целей выглядит. ЧТо легкое юзать?
Анон, как в PostgreSQL замутить следующее: Есть article и article_tag. Есть поисковик статей по тэгам. Нужен запрос, чтобы найти статьи, у которых присутствуют все выбранные тэги.
Например: article1 имеет tag1, tag2, tag3 article2 имеет tag1, tag2 в поисковике выбраны tag1, tag3
через оператора IN найдется и 1 и 2 статья, но у второй нет tag3, ее надо исключить.
Давайте. Раз уж зашёл такой кутёж, то поделюсь тем, что я читал и советую всегда.
Мат.часть: Гарсиа-Молина Г., Ульман Дж. Д., Уидом Дж.-Системы баз данных. Полный курс есть книга "Проектированные Объектно-Ориентированных баз данных"
Oracle Книги Тома Кайта ( есть книги для совсем новичков, есть книги про тонкости)
Gupta S. - Oracle Advanced PL SQL Developer Professional Guide
Хочешь обмазаться Oracle по полной и не замараться в говне и своих ошибках? Фейерштейн С., Прибыл Б. - Oracle PLS.QL. Для профессионалов
Для богатеньких, и чтоб совсем обмазаться: Покупайте книги Burleson'а ( потому что в интернете их обычно нет, особенно новых и самых нужных ( типа Advanced Oracle SQL Tuning))
Postgress: Bartolini G., Ciolli G., Riggs S. - PostgreSQL Administration Cookbook ( средненькая такая книга для тех кто хочет обмазаться бэкапами и тонкими настройками)
>>1245178 >Давайте. На Тома Кайта дрочат в основном в рахе. Так как в издательстве пидер его стали певодить и выкидывать на развалы вот эти вот книжки в мягком переплете. В мире он просто какой-то Том. Нигде такой дрочи на него на англоязычных сайтах не видел. Хотя книги, наверное, неплохие.
Бурлесон это чувак со свинорылой аватарой, у которого его дрочь сайт почему-то вылезает в результатах гугола по запросу оракла. На сайте на тривиальные даются так себе ответы. У чувака образование - психолог. (это написано на его сайте же). Всегда считал его и его сайт каким-то смешным недороразумением в интеренте.
С Pavel Luzanov я работал в одном интеграторе. Он был манагером по какому скажут ИТ. Ничего о его великих познаниях в БД не слышал. Может он их скрывал. После того как он устроился в постргепрофешнл к Бартунову, стал вот книги писать. Ну ладно чё.
зы. Сам(я) ни одной книги по Ораклу не читал, кроме документации и интернетов. Мимокрокодил 200+к, был в том числе архитектором.
>>1245290 половина новичков надрачивает на Кайта, так как у него есть сайт asktom и он неебаца интегратор оракла был, потом стал каким-то директором в корпорации.
Свинорылый Бурлесон не сам пишет свой сайт, у него же целый комплекс идиотов, которые пишут ему и консультирует других, я Бурлесона не очень люблю, но иногда у него есть нужный материал.
Я вот не добавил, но можно добавить русскоязычные ораклдба и прочее, хотя сайты уже давно убил рак.
>>1245525 >потом стал Кайт уволился из Оракла два года назад. Был он там типа вайс президентом - таких там штук двести может быть. На сайт асктом он не пишет лет десять. Его ведут какие-то нанятные редакторы из левых стран.
Оракл хотя и пока силён, теряет позиции. Могу говорить за двх. Его место медленно но верно занимают мпп, ин-мемори системы и прочие богомерзкие хадупы.
>>1245600 Аноны-ораклисты, а доводилось писать хранимки на Java? Уж больно стремный этот PL\SQL. Как там в 12 версии, работу с XML ускорили? Не нужно больше сохранять XML во временную таблицу чтобы он пободрее шевелился?
Анонче, я в тебя верю OCCI кто-нибудь курил? Нужен способ реализации bulk collect для clob в ResultSet::setdatabuffer - а то некрасиво фетчить 5+к строк по одной и обрабатывать каждую.
В гугле полторы статьи и те для апдейта строк. Или это делается через getvectorofclobs? Если да, то как в этом разобраться? Он же принимает строку коннекта, а не запрос.
Единственный случай в моей практике, когда в документации оракла нихрена нет практически, а приложениями на плюсах для оракла, видимо, три извращенца вроде меня занимаются, потому не могу найти годных примеров использованияя дурачок и не хочуне могу в джаву
>>1246218 Про 18с слышал, но заказчик сидит на 11g.
На PL/SQL пишу много лет, я не говорил что он страшный - он стремный и примитивный, не развивается. Вот и стало интересно, есть ли у кого опыт использования встроенной Java. Но ты прав насчет дауна, вроде и опыт нормальный, но о 200+к я могу только мечать
В двух словах - если делать запрос из PL/SQL переменной xmltype, то он будет в разы медленнее чем запрос, который получает предварительно сохраненный xml из таблицы с колонкой xmltype.
Вот результат для XML из 5000 записей на 11g:
Запрос из переменной: 00:00:03.953000000 ------------- Запрос из таблицы: 00:00:00.062000000
В этом примере для таблицы время вставки не учитывается, с учетом вставки оно работает вдвое дольше, но все равно на порядки быстрее запроса из переменной.
>>1246142 Даже мелкобанки которые не даже в ТОП 100 по капитализации тоже на Оракле. Ебаться с постгресами нет времени и сил, когда есть обтесанный напильником Оракле.
>>1222346 (OP) Господа, а есть ли встроенный в эскуль способ сделать так, чтобы каждое значение в определённой таблице повторялось не более двух раз? Мускуль, если это важно.
>>1251871 Блджад, InnoDB не поддерживает инструкцию CHECK? О таком, чёрт побери, надо большими красными буквами поверх названия писать, зря только ебался. Придётся на уровне приложения реализовывать. Ссаное говно.
Сап аноны, есть одна сущность таблица. Там есть два атрибута столбца. Один - действие, второй - отмена действия. Подскажите алгоритм, который выведет последнее неотменённое действие.
Анонче, на первом пике процедура, на втором запрос к ней. Вопрос, что это за конструкция такая N'O'? Я в sql не особо шарю просто, но нужно к этой процедуре через entity framework обращаться, и поэтому нужно понять, как работает. Подскажите, пожалуйста.
>>1252768 Сразу об этом надо писать, я откуда знаю, что тебе с группировкой надо. Если оракл - то keep first агрегатный или row_number(). Если нет - то группировка по людям с having count = max (count) с условием cancel is null.
Что значит твое "действие может быть не отменено"? Не отмененное действие - null в строке, такой гарантированно будет как минимум один для человека, судя по твоей таблице, потому что назначение действия соответствует null. Если ты слегка перепутал клавиши и "действие может быть отмененно" в последней строке, то я не вижу проблемы - либо ничего не надо выводить (фильтрацию по null вводишь запросом сверху), либо надо вывести предыдущее - тогда ничего не надо менять.
Анон, помоги написать запрос. Я только только вкатился и никак не могу написать запрос под такое задание: Нужно вывести информацию о велосипедах у которых 6 скоростей И на которых можно ездить вдвоем. Высрал примерно следующее, но естесна это не работает: SELECT DISTINCT FROM Tab1 JOIN Tab2 ON Tab1.ID = Tab2.CarID WHERE Count = 6 AND EXISTS (SELECT ID, COUNT() FROM Tab1 GROUP BY ID) = 2)
Есть табличка в excel'е, там sheet примерно такого вида (пик). Много колонок, много строк. Каждый день приходит выхлоп, который туда заносится в новую колонку.
Хочу все это дело перенести в sqlite. Использовать собираюсь python и pandas.
Нужно будет запрашивать инфу по номеру и рисовать графики. Например: сегодня у нас в 0098 g123, а месяц назад было g87, нарисовать график того, как изменялось за месяц в 0098, сколько номеров с выросшим g за 3 месяца и пр. Или Вывести список номеров где вчера было g меньше 100, но у которых в названии есть Test.
1) для каждого номера table (0023, например), внутри rows с date, и columns с распарсеной инфой (num, name, ip etc) 2) для каждого числа table, а внутри уже данные?
Как в панде сделать индексом первую row колонки?
Времени читать книжу о том как дизайнить базы правильно нет.
Анончик, а есть какие-то отказустойчивые SQL решения, но что бы это не овердорогущий Oracle, и не дорогущий MS SQL Server?
Наш заказчик очень хочет что бы у него было всем прям мега отказоустойчивым, поэтому сует Кассандру в каждую дырку, аргументируя это тем, что она спокойно переживает внезапные падения узлов. Но хранить в кассандру данные, для которых явно нужна реляционка - та еще боль. Пикрилейтед.
Посему вопросец: если ли какие-то реляционные решения, толерантные к падению? Вот что бы прям можно было потерять узел, и не заметить этого с точки зрения клиента. Посгрес и мускуль не имеют нормальных мастер-мастер связок. А для варианта мастер-слэйв, насколько я знаю, нужен сторонний механизм мониторинга и переключения узлов, что как бы тоже анально.
Постройте отказоустойчивый кластер с живой миграцией. Делов то. Только придется потратиться на vmware esxi, vCenter и кучу другого. Либо на попен сорсе выезжать, но там боль.
>>1256847 >если ли какие-то реляционные решения, толерантные к падению Посмотри в сторону индеец зажигай. Поддерживает реляционку, джоины (как локал, так и дистрибьютед) и как кассандра мастер-мастер хуячит. Фактор репликации решаешь для каждого кэша (таблицы) сам, хоть полный репликейтед. И в отличие от кассандры нет диких проблем, что должно быть 50% свободного места быть, или рипейр фейлед. Ну и порешали проблемы с получением неконсистентных данных при развале кластера.
Но это все же не оракл и не поддерживаются констрейнты и если у тебя ехал джоин через джоин по сабквери, то лучше потеститься.
Алсо можешь посмотреть в сторону тараканбд, но не юзал.
Поясните пожалуйста где я не прав в 16 упражнение на sql-ex Вот пишу такое, на первой бд проходит, но второй нет. select p.model, k.model, p.speed, p.ram from pc p inner join pc k on p.speed = k.speed and p.ram = k.ram and k.model < p.model Прочитал их хелп топики, но там ничего толком не сказано.
>>1260417 Да уж, от жса меня сначала знатно перекосоебило. Но я про подходящие модели данных. Не могу представить ни одной, где не нужна реляционность.
>>1260641 >где не нужна реляционность Там где данные, внезапно, неоднородны. Например, хранение метаданных (ключ-значение) у некоторых сущностей. Не, накрутить реляционность можно и в таком случае. Но нужно ли?
Двош помоги. 1 как происходит добавления новых индексов? Они же типа хранятся отсортированные и получается чтобы добавить новый нужно смешать все остальные? 2 если в таблицы поменять один тип колонки на другой который требует больше места ( int - bigint например ) происходит смещение данных во всей таблицы? Поясните за эти вопросы аноны или дайте где почитать
>>1260757 > Двош помоги. 1 как происходит добавления новых индексов? Они же типа хранятся отсортированные и получается чтобы добавить новый нужно смешать все остальные? Да, потому вставка в таблицы с несколькими индексами замедляется, потому что приходится перестраивать его сегменты >2 если в таблицы поменять один тип колонки на другой который требует больше места ( int - bigint например ) происходит смещение данных во всей таблицы? Поясните за эти вопросы аноны или дайте где почитать Думаю, зависит от реализации - оракл, например, не даст тебе сменить тип данных не пустого столбца (следовательно - у не пустой таблицы). А так - да, скорее всего перестроит начальный сегмент таблицы, чтобы запись влезала в блок
Есть у меня база MSSQL с таблицей с кучей говна данных, порядка 1488 GB. Структура Id, A int, B bit и куча других. Так вот, мне нужно сделать поиск говна данных по A, у которых B = 1. Я добавил индекс на A, есть ли смысл делать его и на B? Или нужно сделать один индекс, который включает в себя два столбца? Помогите, с меня как всегда нихуя
Тип у пустого столбца можно спокойно менять в непустой таблице:
create table yoba as select cast (null as number) a, level b from dual connect by level < 11; -- Add/modify columns alter table YOBA modify a varchar2(12);
>>1222346 (OP) Посоветуйте с чего начать изучать базы данных? Какие книги? Важно ли изначально определиться с СУБД или это не так важно? Может курсы есть какие-нибудь?
Анон, есть таблица, в которой около 150 столбцов. я делаю из нее селект и потом должен сформировать строку аля "UPSERT INTO "tabl"."prod" VALUES (values for record 1); ... UPSERT INTO "tabl"."prod" VALUES (values for record n); " Как мне это все дело перебирать? Нашел курсор, но там нужно ему задать столбцы, по которым идет переборка, а мне 150 вручную бить не охота. в sql полный ноль, всю жизнь на шарпе писал, а сейчас решили процедуру для говнонода заебошить.
ЧЯДНТ? хочу создать таблицу, занести в нее пару значений, вывести все в аутпут. код пикрилейтед. пишет "саксесфулли", нихуя не происходит. (рефреш таблиц делал)
>>1263294 пиздец, скобки после varchar не поставил. блять это невыносимо. нет ли какой нибудь номальной проги чтобы с пострес работать? эта даже синтаксис не проверяет блять ссука.
Есть два select-a которые возвращают таблицы с одинаковыми(кроме последнего) столбцами, которые надо объединить в одну таблицу сгруппированную по полю name. Пикрелейтед - результат выборки, результат второго селекта такой же, только там "col_2" вместо col_1.
Пикрелейтед 2, то что я получаю используя FULL OUTER JOIN second_table ON first_table.name = second_table.name , но проблема в том что оно джоинит не все записи из второй таблицы (т.е. есть строки где col_2 = <nul> но нету где col_1=<nul>, а они должны быть), где я проебался, не тот join использую или что ? Бд - postgresql
Помогите, пытаюсь выбрать максимальное значение из таблицы, но их там несколько, и sql выбирает только первое максимальное, на остальные ему пофиг, как это можно поправить?
>>1266304 Ну например есть столбец text varchar 512. В нем фразы по типу 'Сап, двач'. Эта фраза состоит из букв, символов(,) и пробелов. Буква "ч" в слове двач- конец фразы, потому что после нее нету ни пробела, ни буквы, символа.
В общем, долблю сайт в задний конец на PHP. Есть таблица с пользователями, таблица некоторых актов, связанных с этими пользователями, и рейтинги участия пользователя в акте, идущие отдельной таблицей. Подскажите, к можно на Секелях выбрать среднее значение рейтинга для конкретного пользователя и отсортировать их по нему?
>>1269371 >таблица с пользователями - d_usr (id, name) >таблица некоторых актов - d_act (id, name) >рейтинги участия пользователя в акте - t_usr_act (usr_id, act_id, usr_rating) >SELECT >u.id, >u.name, >avg(ua.usr_rating) as avg_usr_rating >FROM d_usr u >LEFT JOIN t_usr_act ua ON u.id = ua.usr_id >GROUP BY >u.id, >u.name >ORDER BY avg_usr_rating DESC
Базач, помоги оптимизировать запрос. Есть запрос с двумя JOIN, который отрабатывает за доли секунды. Понадобилось мне еще одно поле из другой таблицы, дописал еще LEFT JOIN по двум полям. Запрос стал выполняться 25 секунд. Все таблицы небольшие, по 2000-5000 строк в каждой. В результирующем наборе 5к строк.
Был запрос такой, быстрый: SELECT ma.answer_id, m.date, ma.percentage FROM measuring_answers ma INNER JOIN answers a ON a.poll_id = АЙДИ_ОПРОСА AND a.id = ma.answer_id LEFT JOIN measurings m ON m.id = ma.measuring_id ORDER BY date;
Стал такой, медленный: SELECT ma.answer_id, m.date, ma.percentage, mp.votes FROM measuring_answers ma INNER JOIN answers a ON a.poll_id = АЙДИ_ОПРОСА AND a.id = ma.answer_id LEFT JOIN measurings m ON m.id = ma.measuring_id LEFT JOIN measuring_polls mp ON mp.measuring_id = ma.measuring_id AND mp.poll_id = a.poll_id ORDER BY date;
Я с базами на вы, поэтому во всех базах первичный ключ - это просто id. Теоретически в таблице measuring_polls первичным ключом может быть связка measuring_id + poll_id - эта комбинация всегда уникальна. Но я такое еще не умею, и не знаю, будет ли так быстрее.
>>1269782 Эх, спасибо за удочку. Убил джва часа, но разобрался с explain, почитал про индексы, настроил логирование медленных запросов. Сделал CREATE INDEX measuring_id_polls ON measuring_polls(measuring_id, poll_id); и теперь запрос выполняется за десятую долю секунды.
Аноны, разбираюсь с бд, конкретно с postgresql. Вот у меня есть таблица с id пользователей в базе (допустим, это мои друзяшки из вкшки, которых я вчера вытащил из апи). Сегодня я, допустим, часть их удалил, часть добавил, вот я снова вытаскиваю список id из api и хочу его актуализировать в базе. Как это лучше сделать? Удалить все записи и внести их заново? Или вот я хочу удалить часть записей каких-то с определенными id. Как это лучше сделать? Тупо в цикле по запросу на id? Или писать один запрос, а в него подставлять в цикле по условию на id, чтобы результат был типа ... WHERE user_id = 1 OR user_id = 2 и т.д. Гуглю и не могу найти таких примеров что-то, только по диапазону идентификаторов.
>>1270117 >Удалить все записи и внести их заново? Очевидно, глупое решение. В целом, если у тебя вкшный id - PRIMARY, либо хотя бы UNIQUE, то можешь просто добавить всех друзей заново в существующую таблицу. Старые просто не добавятся, ибо такой id уже существует. Новые - добавятся. В случае же если требуется еще сделать UPDATE старых друзей (например, мало ли сменилось имя), то делаешь UPDATE, если INSERT закончился неудачей.
Анчоусы, у меня опять траблы с производительностью. Я настроил логирование медленных запросов (более секунды), и периодически вижу там COMMIT, занимающий 3 секунды, или даже простой INSERT INTO measuring_polls (measuring_id, poll_id, votes) VALUES('чиселко', 'чиселко', 'чиселко'), занявший полторы секунды. За COMMIT скрывается около десяти простеньких INSERT, типа такого, что повыше. Инсерты идут из цикла foreach, потому что похапешный PDO не умеет мультиинсерт на массиве неизвестной длины, как я понял. Некоторые заканчиваются фейлом из-за дублирующегося UNIQUE, так было задумано. Далеко не каждый коммит и тем более инсерт попадает в лог, только некоторые. Это как-то фиксится или это просто лаги жесткого диска при записи?
>>1270347 До пизды (в т. ч. со скобками, в которые берётся подзапрос):
> #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около '(SELECT MAX(номер) + 1 FROM Хуи)' на строке
>>1270240 > Очевидно, глупое решение. Да я тоже не в восторге, но это первое что пришло в голову. > просто добавить всех друзей заново в существующую таблицу. id уникальные, но не primary. С добавлением всё более-менее понятно, только вот при конфликтах primary key инкрементируется всё равно. Почитал интернеты, оказалось, что так и задумано, только вот не понял, стоит ли с этим бороться или забить. Вопрос больше про то, как лучше удалить сразу несколько записей по id, которые не идут друг за другом. Пока вот такую конструкцию придумал: > DELETE FROM friends WHERE friends.user_id IN (SELECT * FROM unnest(%s)) И вторым аргументом в execute() список id пользователей, которых хочу из таблицы убрать. Он лист преобразует в array постгрес и подставит в запрос. Вроде работает, но правильно ли так делать?
>>1270432 Представь себе, не похуй. Потому что dml запрос будет выполнять движок, который о ddl знает ровно столько же, сколько ты о базах данных. Естественно он нижняя тебе не посчитает и пошлёт нахуй с ошибкой синтаксиса.
Еще вопрос: вот у меня есть таблицы: > users: id (pk), vk_id, name > artists: id (pk), name, genre > users_artists: user_id, artist_id, tracks_num То есть, я собираю таблицу с друзяшками, таблицу с исполнителями из аудиозаписей всех друзяшек и таблицу, в которой содержится инфа у какого пользователя какие исполнители в аудиозаписях и сколько треков этих исполнителей. Естественно в последней таблице ни одно поле не является уникальным, но уникальным зато является сочетание (user_id, artist_id). Я хочу при одновременном совпадении обоих полей обновлять поле tracks_num, но INSERT ON CONFLICT выдает ошибку > there is no unique or exclusion constraint matching the ON CONFLICT specification Я так понимаю, ON CONFLICT работает только с теми полями, у которых есть аттрибут UNIQUE. Помоги, анон, пожалуйста. Никак не могу сообразить как в моем случае написать запрос, чтобы не было дублирующихся сочетаний. То есть, если в последней таблице уже есть пользователь с id n и у него уже есть исполнитель с id m, то не вставлять еще одну запись, а у существующей обновить поле tracks_num.
Сап, аноны. Не пинайте сильно, поясните, будьте добры, за принципы ACID в бд.
Если происходит транзакция, допустим на изменение, затрагивающая множество связанных данных, и в этот момент параллельно происходит запрос, допустим на чтение, какого-то подмножества из этих данных, что должно происходить
1) Запрос на чтение будет ожидать окончания транзакции? -- 1.1) А если транзакция выполняется ну пиздец как долго (в теории), часы-сутки-недели? 2) Запрос на чтение не будет ожидать окончания транзакции и -- 2.1) Окончится ошибкой -- 2.2) Получит данные, которые были до начала транзакции
Тупой вопрос от новичка. Есть две таблицы: FUNDS с полями id, name, comment BALANCE с полями id, fund, balance Поля BALANCE.fund и FUNDS.id связаны по primary-foreign key (в балансе fk, в фунде - pk) не могу найти, как мне делать селеет так, чтобы в запросе типа SELECT fund,balance FROM BALANCE у меня вместо айдишников было FUND.name. Я подозреваю, что это какой-то типа JOIN но я тупой и не могу составить запрос. Возможно ли это вообще? PostgreSQL, есличо
>>1273071 Этого более чем достаточно! Огромное тебе спасибо, добрый анон! Я пока ковырялся, пришел к такому вот решению: SELECT id,(SELECT name from funds where funds.id = balance.fund) as balance FROM balance; Так нельзя сделать? Чем Join лучше?
>>1273162 Вообще в оракле, например, построится план запроса как для джойна обычного - то есть что ты сделаешь через поздзапрос, что через левое соединение - разницы не будет
Только твой вариант упадет, если вдруг нарушено ограничение целостности в таблице funds и найдется несколько записей на один id
>>1273156 Так как у тебя свзяка pk/fk ничем, план скорее всего одинаковый построится, но вообще, такие подзапросы могут возвращать не одну строку, а несколько, и тогда всё поломается. Плюс он более трудный для понимания.
Сап, pr Может кто-нибудь простым языком объяснить суть уровней изолированности объяснить, чтобы решать такие задачи как на пикрил. Ну и посоветовать годноту по теории, конечно. Пиздец блядь, 2 года с базами работаю, а теорию не знаю, стыдно.
>>1274129 >>1274124 Не слушай его. От СУБД зависит то, какие поддерживаются уровни изоляции, но теория - она одна.
Очень просто. Грязное чтение(read uncommitted) - твои изменения видны всем в любой момент, даже если они не зафиксированы. Обычное чтение(read committed) - всем видны только зафиксированные данные. Повторяющееся чтения(я бы сюда и фантомные отнес, repeatable/phantom reads) - если в пределах транзакции ты делаешь агрегированный запрос в момент времени т1, потом другая транзакция в момент т2 меняет какие-то данные и фиксирует их, то если ты запускаешь этот же запрос в момент т3, ты должен получить такой же результат, будто никаких изменений не было. Фантомные чтения - то же самое, только без агрегации: селект всех строк в т1 и в т3 абсолютно идентичен, даже если в момент т2 кто-то добавил новую строку и закоммитил инсерт. То есть одна штука за апдейты отвечает, вторая за инсерты, а смысл один - во время транзакции одинаковые селекты в разное время дают одинаковый результат. Сериализованные транзакции - всегда пишут, что якобы транзакции выстраиваются в ряд и система становится однопользовательской, а все зависит от базы. Оракл, например, образно говоря, делает тебе снэпшот базы на момент начала транзакции и кто бы что не делал, ты будешь видеть ее только в таком виде до конца транзакции, но нюансы связаны с оракловской реализацией, так что в общем сказать не могу. Притом, если две транзакции не будут трогать одни и те же строки, то вставка в таблицу на основании ее же данных становится очень интересной, инфу об этом я нарыл вроде в оракловской документации.
Вроде понятно описал, если что - постараюсь объяснить подробнее и понятнее.
Столкнулся с тем, что надо будет перетягивать базу оракла в mssql раз в неделю. Какой самый простой путь? Сделать пакет шоб тащил, думаю несложно, но на сервак наверное кучу аддонов надо нахуярить? (2014 стоит). Алсо, можно ли в оракле права доступа на селект для сервака с мс прописать?
>>1274208 Представлять то, о чем написано. Открылась транзакция, поменяла данные и до коммита две другие транзакции читают эти же данные. Read uncommitted увидит единицу, а read committed увидит ноль. Почему - я расписал выше.
>>1274372 Какой наиболее простой по нагрузке способ в MSSQL заменить значения на выводе, если они меньше X? Насколько использование CTE для повышения читаемости тормозит запросы? Стоит злоупотреблять?
>>1274460 Мои собственные изыскания показали, что на бигдату перекотиться можно только по случаю и по знакомству. Я так пони, что в Мск биг дата тема хайповая, и тут половина людий сами не знают что за биг дата и что с ней делать. Я, в итоге, забил на бигдату и покатился в фулстак.
Торадиционного варианта с "читни книг катай видосы" тут нет, хотя бы потому, что БИГ дату ты у себя на коферарке дома не поднимешь. Для БИГ даты нужны БИГ компании. А им, в свою очередь, нужны готовые спецы которые будут делать работу сдесь и сейчас, а не чуваки которые может и перспективны, но на отрезке полгода-год.
Обзаводись знакомствами, гоняй на семинары и конференции, может через расширение круга знакомств ты и придешь к успеху.
>>1274447 Что значит "заменить значения на выходе", обизян, а? Учись внятно формулировать свой вопрос; правильно
составленный вопрос -- половина ответа на него. >Насколько использование CTE для повышения читаемости тормозит запросы? Стоит злоупотреблять?
Зависит какое ЦТЕ. Лично я считаю, что использовать ЦТЕ "для повышения читаемости" ебаное дно.
ЦТЕ нужно для очень конкретных вещей, например для рекурсии. Если ты что-то другое хочешь делать через ЦТЕ, остоновись и ПОДУМОЙ почему. Если ты делаешь это не внутри инлайн фунции, с вероятностью 99% ты делаешь это напрасно.
В оставшемся проценте случаев ты пишешь ЦТЕ, потому, что задачу вменяемо можно решить только через него.
>>1274510 >если сравнивать подхапросы и cte, то это одно и то же. Я включу зануду, и отмечу, что для протокола. С огромной долей вероятности интерпретатор построит для НЕРЕКУРСИВНОГО ЦТЕ и для соответсвующего подзапроса абсолютно одинаковые планы. Но бати пишут, что бывают случаи, когда планы получаются разные. Лично я с таким эффектом не встречался, по краней мере не помню, чтоб были какие-то спецэффекты, которые заставили бы меня делать выбор между цте и подзапросом.
Есть тут спецы по DB2? Имеется множество таблиц и один MQT. Этот MQT построен на джойнах этих таблиц. Поставили в продакшен, и теперь, если обновляется одна из таблиц, входящая в MQT, то этот MQT не обновляется сам.
Собсна, 2 вопроса.
1. Какого хрена не обновляется и зачем эта фича тогда вообще нужна? 2. Как решить проблему? Неyжели нельзя просто сделать виртуальную таблицу, которая обновляет информацию вместе с реальными?
Прошу прощения за неровный почерк, я не дб админ, а всего лишь ДЖЕЗВА девелопер.
Аноны, есть таблица в БД, и мне нужно добавить к 2 столбцам ON DELETE SET NULL;. Как мне это сделать не снося таблицу к хуям и не создавая заново? p.s. PostgreSQL 10. p.p.s. Хотя бы подскажите как загуглить ибо ничего не нашёл.
>>1276171 Данных немного, но они постоянно в движении, новые приходят/уходят и т.д. Короче разобрался как сделать. ALTER TABLE ..... ALTER CONSTRAINT ...и тут вот определил ON DELETE SET NULL;
1 В одной базе около 10 таблиц, в них содержится dbo.users, dbo.items, dbo.something, dbo.else и тд
2 Во второй базе около 9000 таблиц, названия которых содержат: dbo.users, dbo.items429219_0, dbo.items231452_1, dbo.items23125252, dbo.items_myitem и так далее
>>1276825 Так у тебя во втором случае партицированые таблицы, как я понимаю? Там же доступ к ним ничем не отличается от обычных, это просто вопрос хранения, не?
>>1276849 Читать планы запросов, мониторить нагрузку на систому ввода вывода, переписывать свои ебаные селекты чтобы они вменяемо работали, ИНДЕКСЫ накрутить Делать ПРЕДРАСЧЕТЫ
Ты сейчас реально очень глубокий вопрос задал, в режиме "хочу чтоб было заебись"
Что за пользователи, что за каналы связи? Что за хранилище данных?
>>1276852 >Читать планы запросов, мониторить нагрузку на систому ввода вывода, переписывать свои ебаные селекты чтобы они вменяемо работали, ИНДЕКСЫ накрутить >Делать ПРЕДРАСЧЕТЫ > >Ты сейчас реально очень глубокий вопрос задал, в режиме "хочу чтоб было заебись" > >Что за пользователи, что за каналы связи? Что за хранилище данных? MSSQL standalone :) Каналы 100мбит\с Пользователи - макаки
>>1276866 > >Не,я не кокнретно хотел ответ услышать. Мне там похуй какие у тебя каналы. > >И вообще может у тебя и сто мегабит, а читаешь ты с ебаного китайского харда с иолатчем 70 > >Или крутится твой стандалоне на каком нибудь пентиум ммх > >Я просто тебе хотел ПОКАЗАТЬ, что вопрос "ой чет у нас медленно , а надо быстро" требует пиздец какой глубокой проаботки > >Но вообще, начни вот с чего > >Ебани аналитику от Глена Берри по отсутствующим индексам и статистике топовых ЗАДЕРЖЕК системы > >http://sqlcom.ru/dba-tools/express-diagnostic-ms-sql-server/ > Спасибо, за вечер не разобрать. ._.
Если говорить о МС скульсервере, есть задачи, которые принципиально не решить без триггера.
Прежде всего это всяческое логирование.
Но вообще взрослые дяди стараются свести использование триггеров по минимому, потому, что это все довольно непрозрачные механизмы. Особенно те,которые INSTEAD OF
В общем, административные задачи в триггеры _можно_ если иначе никак. НУ например DDL логи.
Все остальное лучше делать без триггеров. Особенно все то, что относится к модификации данных.
О! Есть еще один хитровыебанный кейс, когда ты делаешь механизм, который позволяет прервать и откатить батч по свистку, типа IF (1=2) EXEC dbo.AbortAll
Перепощу из ньюфаг-треда, может, кто-то сможет ответить, и да, я осознаю, что этот тред о SQL, но он единственный тематический.
Изучаю NoSQL на PouchDB, что-то не очень понимаю, как работают коллекции. Давайте с простым примером и-магазина, есть коллекции заказов и товаров, разумеется, они должны быть связаны, и насколько я понимаю, в документах заказов уже имеет смысл хранить товары, потому что заказ без товаров сам по себе бесполезен. Я правильно понимаю, что в NoSQL БД не существует некоего волшебного механизма, который при изменении документов товаров автоматически обновит документы в коллекции заказов? В RxDB и Mongoose есть population, если знаете, как это работает (в поле документа одной коллекции указывается отсылка на конкретные документы в другой коллекции, и при конкретном запросе БД их подтягивает в первую коллекцию), но я не уверен, что правильно так делать.
Вот я хочу добавить запись вида (первое поле, второе, третье). Но оно добавится, только если первое поле уникальное. Как можно сделать такой запрос? И, если желательно, в одну строку.
SELECT T1.WannaBeDistinct as Field1 , T2.Field2 , T3.Field3 FROM Table1 T1 ... Table2 T2 ... WHERE NOT EXISTS ( SELECT 1 FROM Table1 TT WHERE TT.PkID = T1.PkID )
>>1281803 Еще вопрос все по тем же СУБД Могу ли я создать таблицу, где Person будет выводиться как конкатенация FirstName и Surname из другой таблицы? Если да, то как это сделать?
DROP TABLE PERSONS IF EXISTS CASCADE; CREATE TABLE PERSONS ( ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL, FirstName VARCHAR(20) NOT NULL, Surname VARCHAR(20) NOT NULL, PRIMARY KEY (ID) );
DROP TABLE BOOKS IF EXISTS CASCADE; CREATE TABLE BOOKS ( BID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL, PersonNumber BIGINT NOT NULL, Person VARCHAR(40) NOT NULL, /PERSONS.FirstName + PERSONS.Surname/ PRIMARY KEY (BID), FOREIGN KEY (PersonNumber) REFERENCES PERSONS(ID) ON DELETE CASCADE );
>>1282424 Не можешь ты сделать таблицу такую. Сделай вьюху из 2 своих таблиц.
Если извращенец, то напиши функцию, которая по айдишнику персоны достает из таблицы персон нужные тебе фио и создать в саоей таблице вычислимое поле на основе айдишника персоны и этой функции. Но работать все будет медленно.
>>1283072 Инмана и Кимболла, конечно же. А так - что ты хочешь узнать из их утверждений? Реальное хранилище не будет полностью повторять описанную структуру. Чтобы понять, нужно знать, что есть транзакционная система, данные из которых ты грузишь в хранилище и преобразуешь к такому виду, чтобы бизнесу было удобно их читать. А как ты их там держишь - это уже полет твоей фантазии, хоть в нереляционной базе или переписываешь на бумажки и отправляешь ящиками в архив.
Если серьезно - один предлагает хранить данные в ядре в нормализованном виде и отдавать бизнесу в денормализованных витринах(читай: OLAP-кубы), а второй - в денормализованные витрины грузить из OLTP систем.
На самом деле, можно что-то среднее между теориями Инмана и Кимболла использовать - грузить данные сразу в нормализованные витрины.
Аноны, а подскажите, что почитать, чтобы быстро выучить основы бд? Так вышло, что прогал не используя бд вообще, а сейчас на любой вакансии их требуют. Алсо хотелось бы разобраться в разнице sql и nosql, когда какие стоит применять и тд.
>>1283631 >Главным отличием sql и nosql является соответствие ACID. >sql должен соответствовать всегда, nosql может соответствовать "в перспективе" (данные доедут, но потом).
Мне бы понять разницу в применении. Условно говоря, для каких задач можно только nosql, для каких только sql, для каких оба подходят, но что-то больше
Анонасы, вопросик есть. Вот написал я небольшое веб-приложение Java+Spring+Hibernate с постгресом, БД и таблицы создавал в pgAdmin. Ну и по стандарту сделал application.properties и в нём прописал url/username/password. Запуск с IDE и jar-ника у меня работает нормально.
Но что делать другому человеку, который скачает мой репозиторий и захочет у себя из IDE запустить? Что мне нужно прописать в таком случае? Ему ведь нужно будет изменить url/username/password на свои, но ведь у меня есть таблицы, а у него, получается, их не будет? Я немного не понимаю этот момент.
>>1283753 Не в том треде вопрос задаешь. В доке по спрингу все расписано https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html Hibernate может создать таблицы автоматически hibernate.hbm2ddl.auto=create, но это НЕ рекомендуется делать на реальных проектах (хотя я делал в своей говнокоторе ибо всем похуй). Можно просто положить в ресурсы файлик schema.sql, если используешь spring boot. Можно использовать инструменты миграции такие как Flyway или Liquibase.
>>1283603 Ну после института взяли подмастерьем в банк, там стал более менее скуль погромистом, потом двигался от конторе к конторе, растил скилл и кругозо по предметным областям. Мотал на ус как разные айти конторы решают определенные спектры задач.
В 2006 работал за 45 в 2009 за 65 в 11 зв 85 ну и так далее до посейчас за 160+- четотам. Пошел на проект где людям надо было поднимать КХД, убедил их что справлюсь, ну и вот ...
Репост из реквест треда, потому что тут фундаментальных дедов побольше. Вот есть разные вебфреймоврки. Но все они так или иначе реализуют шаблон MVC. Вопрос. Можно ли что то изучить непосредственно по мвс, оторванное от конкретной реализации, что бы потом было менее болезнено менять технологию? Вообще что можете посоветовать изучить что бы смена языка, фреймворка, или технологии была менее болезнена. Так то заметил что ООП везде более или менее одинаково. Структуры данных почти везде одни и те же. Алгоритмы вообще от языка не зависят и им десятки лет. Может есть какой то фундаментальный труд который опишет все от и до как в ойти устроенно с технической точки зрения, аки капитал маркса?
>>1284147 >Можно ли что то изучить непосредственно по мвс, оторванное от конкретной реализации, что бы потом было менее болезнено менять технологию?
И конкретно на этот вопрос, ответ скорее всего нет. Потому, что зависит, что считать за "безболезнено".
Вот к примеру React реализует MVC и Angular реализует MVC, и MVC-проект на дотнете реализует, но с одного на другое переходить я ебал.
Вот со скуля на скуль (например с мускула на т-скул) переходить будет просто потому,что это, грубо говоря, реализация одного стандарта. А вот в мире веб макак никакой стандартизации нет, и там каждый дрочит как хочет. Поэтому ты конечно можешь (и должен) подсекать на уровне понимания концепций чо такое там синглтон сервис, что такое фасад, что такое МВЦ, но на уровне конкретной реализации это будет всегда попоболь.
>>1284158 Реакт просто для внещнего вида библиотека. А ангуляр да. Просто меня пугают эти истории "Вышел новый фреймворк - 100 тыщ ссмузихлебов потеряли работу потому что не смогли пересеть." Хотя по факту они там будут строить тот же МВС и теже самые вебморды, просто средствами фреймворка.
>>1284155 Да, про паттерны в курсе, просто думал есть талмуды охватывающие все.
>>1284270 Алсо >о с одного на другое переходить я ебал.
Так просто я получаю опыт на питоне, и собираюсь вкатываться вджангу. Но мне очень нравится си #, в будущем хотелось бы работать на нем. Но сейчас надо учить джангу для карьеры.
>>1222346 (OP) Ребят, нужно ли чего-то там нормализировать или можно подзабить пинуса и повторить структуру xml/json? Речь о БД, которая будет пользоваться тупо для хранения данных и изредка отчётов-поисков. Можно ли postgreSQL заставить автоматом повторить набор элементов того же xml а потом закинуть в него все подходящие файлы как строки?
>>1284147 Прогугли хорошие талмуды по ЯП и CS, но для энтрилевельных. На русском даже не думай смотреть. Там вполне будут описания именно того что хорошее-доброе-вечное. Ну, или так будет подано что когда с новым столкнёшься то сам поймёшь где тут каких плюшек наделали.
Но это вопрос не фреймворков, а более серьёзных абстракций. Как те же структуры данных.
У фреймворков одна задача обычно стоит, которую реализуют через IoC. Переход с конкурирующих фреймворков и даже просто библиотек - это всегда боль. Ты либо наткнёшься на две хорошие реализации, но которые зачем-то годами не приводят к обоюдопонятному стандарту, либо с тем что у одних есть хорошая писька, а у других такого даже в проекте не предвидится, либо огрызок какой-то позорный. Да и бестпрактисы порой разнятся, в том числе и из-за внутренней кривизны фреймворка.
Возвращаясь к фундаментальному - читай теорию ЯП и как вообще компьютер работает. Если ты поймёшь как v8 работает, то это даст тебе куда больше понимания нодоблядства, чем дрочение очередного бичпакета из npm.
>>1284528 Я вообще по ораклу, но там с национальным символами есть нюансы: помимо того, что в твоей базе должна быть такая кодировка, ещё и твой клиент (чем ты вставляешь строку в таблицу) тоже должен иметь этц кодировку. То есть если база у тебя с win1251, клиент с win1251, а ты хочешь в нее с этого клиента воткнуть символ в utf8, то он приведется к win1251 и вставится в базу. И всякие там a, B, C и прочие в базу влезут нормально, а вот символы, для кодирования которых нужно два и больше байт, в нее нормально не вставятся. Проверь, может, у тебя тоже есть что-то в таком роде.
>>1285126 Спасибо, и правда есть. Но почему так медленно работает? И вообще весь гуи медленный какой-то. Пека вроде на воркстешн тянет. Или надо сразу учиться все через консоль пилить?
сап, делаю гуи для работы с бд. Не могу придумать, как сделать адекватную реализацию удаления: при удалении может вылететь ошибка >UPDATE или DELETE в таблице "таблица_нейм" нарушает ограничение внешнего ключа "ключ_нейм" таблицы "таблица2_нейм" как можно проверить, можно ли удалять элемент, чтобы обработать эту ошибку? в голову приходит только сделать SELECT по всем таблицам, у которых внешний ключ содержит эту таблицу, но чувствую, что изобретаю велосипед.
>>1287210 Как же я надеюсь, что не стан тобой в 25. Мимо 23х летний sql разработчик АЛСО, господа, скажите, пожалуйста, что более перспективно - DBA или DBD.
>>1287229 Бери питон и Java/Scala и ради своего блага вкатись в бигдату дата-инженером или бигдата-аналитиком. Да, это хайп и баззворды, но постепенно, маневрируя между расплывчатыми вакансиями и должностями, ты сможешь получить более-менее интересную работу. Главное не сдаваться и не бояться брать сложные задачи, где ты не знаешь больше половины используемых технологий.
Что бы там не говорили, бигдата в лице связки дата инженер+дата саентист никуда не денется. Я дата инженер, ебашу на спарке в основном. Если говорить про дата инжиниринг, то это концептуально похоже на pl/sql или типа tsql разработку. Но ощущения у меня лично всё-таки другие, метафизический хуй немного вырос от осознания того что делаю. Но это так, личное
>>1287229 востребованы спецы по конкретным субд, в основном в банках, телекомах, госструктурах и тех кто выполнят для них заказы. Я бы рекомендовал на хайпе и баззвордах вкатиться в дата инжиниринг, пока это возможно.
>>1287283 >>1287284 Ты вроде один человек, так что отвечу а два поста сразу. Я так понимаю, что мне нужно прямо сейчас начинать учить какую-нибудь статистику и R python? По каким словам вакансии искать, чтобы я хоть немного оценил стек, трудозатраты и личный интерес?
>>1287285 Короче смотри - недавно(буквально на днях) собеседовался для поддержания тонуса и "разведки" в нескольких местах: модный смузи-стартап, унылая "традиционная" компания и средняя компания по разработке мобильных игр. Вывод таков: блогеры были правы и действительно сформировалось разделение ролей, а именно - дата саентист и дата инженер. Ознакомься с этими ролями, почитай, поищи. Потом выбери.
Теперь = все написанное ниже нужно воспринимать с оговоркой на конкретные вакансии. ОЧЕНЬ ПОДРОБНО РАССПРАШИВАЙ ПРО СТЭК И ДОЛЖНОСТНЫЕ ОБЯЗАННОСТИ. Ты теоретически можешь попасть в компанию, где саентисты и инженеры - по сути просто sql-разработчики. Это реальность. И вообще все это основано только на моем скромном опыте.
Если ты хочешь быть дата инженером, то статистику, R, эконометрику и т.п. можно знать поверхностно или вообще не знать. Тут такова - ты помогаешь саентистам, аналитикам и другим товарищам создавая им "инфраструктуру данных", т.е. пайплайны(как традиционные etl-процессы, так и риалтайм фильтрация-аггрегация и так далее). Это значит, что тебе будет легче делать свою работу, если ты хоть немножко понимаешь нахуя люди от тебя это хотят. Питон ты испольуешь чтобы пользоваться спарком(pyspark), поглощать данные со всяких источников - API соцсетей, API каких-то приложений, всякие логи, всякие Кафки, всякие БД, и чтобы использовать модные планировщики вроде Airflow и Luigi. Java/Scala - когда требуется риалтайм(хотя питон и здесь начинает быть актуальным) и/или крутая производительность(pyspark всё же проигрывает). Кроме того, все инструменты бигдата экомистемы написаны на JVM языках; это значит, что ты лучше их сможешь понимать, если сам ориентируешься в таких языках.
Если ты хочешь быть саентистом, то из ЯП необходимо знать только питон, опционально - R, а также углубленные знания статистики и машинного обучения. Грубо говоря, нужно уметь выбирать модели, понимать плюсы-минусы для конкретной ситуации. Где хватит линейной регрессии, а где нужна нейросеть. Тут я тебе меньше советчик, могу просто рассказать только то что со стороны видел.
>>1287299 Как я уже написал, всё дико зависит от вакансии и от реального положения дел в компании.
Ты можешь поднять себе ЗП, получив хайповую должность, а по сути делать то же самое, т.е. sql запросы. Т.е. стагнация,поскольку когда захочешь пойти дальше, уже будут всё-таки ожидать от тебя, что ты прошаренный или по бигдате, или по дата саенсу, или по и тому, и тому.
Поэтому основная сложность сейчас - это правильно себя поставить, отожрать тебе интересные задачи, которые тебя реально разовьют.
>>1287300 И напоследок чутьчуть конкретики, а именно - вкратце что спрашивали на собесе в той компании где я сейчас нахожусь
1. базовые знания python, bash; например, как работать с файлом если он слишком большой чтобы зажрать его в память целиком 2. базовые знания написания хранимых процедурок - естно говоря не знаю нахуя, редко всплывало потом. 3. базовое понимание бигдаты - говорили про хайв, хадуп, кафку, спарк. Я рассказал как разворачивал у себя локально миникластер из одного узла и что я там делал
Дали потом задачки на дом, там был парсинг апи Твиттера, филтрация, трансформация этого датасета, затем загрузка в реляционную базу данных, написание sql-запросов.
Затем был вопрос - как бы ты решал эту задачу, если бы твитов было бы в 10,100,1000 раз больше.
>>1287299 >>1287300 >>1287307 >>1287308 Спасибо тебе большое. >могу просто рассказать только то что со стороны видел Я бы почитал, если я тебя этим не сильно отвлеку. АЛСО, было бы интересно почитать про твой предыдущий бэг грунд.
>>1287307 >Дали потом задачки на дом, там был парсинг апи Твиттера, филтрация, трансформация этого датасета, затем загрузка в реляционную базу данных, написание sql-запросов. А более подробное ТЗ ты скинуть можешь?
>>1287311 >>1287310 саентисты пришли с бэкграундом а-ля "я делал линейную регрессию в SAS и прошла курсы на курсере". Выросли из аналитиков, разработчиков, sql-чуваков. Так что это реально.
А сейчас их рабочий процесс такой: ставится задача, например - сделай мне модель по предсказанию оттока наших B2B клиентов. Начинается выясняловка: че за клиенты, че за данные у нас есть, какие мы можем получить новые данные и из каких источникво; короче брейншторм, какие у нас будут фичи(т.е. переменные). Исследовательный процесс. Написание скриптов на питоне - 10% времени.
У меня бэкграунд был в основном PL/SQL+Python(отжал себе задачку написать простенькое десктоп приложение для нанесения патчей на БД)+ETL-инструменты вроде Информатики. Все что с бигдатой связано, изучал дома сам. Установил вирутальную машину убунту, скачал хадуп, скачал спарк, кафку. Развернул все это дерьмо, попутно учась писать башскрипты. Поделал туториалы.
>>2410511 Запусти fs_usage в терминале да полюбуйся как оно даже когда ничего не "чистит" лазит у тебя по диску Ах да, ты наверное даже терминал открыть не сможешь, ведь ты и есть целевая аудитория таких программ
Есть вопросик. Вот БАЗА ДАННЫХ. В ней много таблиц от документов до пользователей. В каждой таблице есть поле created типа Дата, куда заносятся дата создания строчки в таблице. Вообщем вопрос. Имеет ли смысл выносить даты в отдельную таблицу, и проверять просто при содании записи, есть ли в этой таблице такая дата, и присваевать в нужной таблице айди этой даты Это же нормализация, да? Или это излишний заеб и нинужно?
>>1287578 Зависит от задач. Есть вообще EAV модель когда ты делаешь одну таблицу для сущностей. Другую для атрибутов сущностей. Третью для значений этих атрибутов, и толькой айдишники вставляешь по такой иерархии. Кошмар если нет Нормальной ORM а чистый SQL, но дает возможность тебе написать информационную систему где заранее неизвестно сколько будет сущностей, сколько у них буедт атрибутов, и каких будут типов их значения. Это все можно переложить на пользователя. Пусть своим сранным сапогам в своем сранном интернет магазине хоть сто характеристик отдельно напишет,цвет, размер, запах, какого цвета была жопа у той твари с которой кожу содрали для этих сапог, итд. А в соседнем товаре аля Шарф этих характеристик не будет.
Аноны-sqlщики, подскажите по ситуации плиз. Сам учусь примерно полгода уже, чтоб работать в анализе данных, из последнего вот только что закончил курс по sql на юдасити. Немного рассылал резюмеху, в итоге получилось так, что прошел собес на должность инженера техподдержки 2 уровня, и как я понял надо будет много ворочать sql, потому что перед тем как берут на работу, компания (it компания видимо среднего размаха в ДС/ДС-2 и Европе) они короче сначала гонят тебя на оффлайн курс по SQL от них, который идет 40 часов и растянут на пару недель.
Короче скоро начинаю ходить на эти курсы, и мне интересно короче кто что думает про такую тему. Опыта работы у меня нет в IT, и хоть это будет и не работа аналитиком, но по идее вход в индустрию уже будет после такой работы? И sql полезная штука как я понимаю в анализе ведь
И по курсу, насколько наличие в резюме такого интенсива будет ништячно? Я так думаю за 40 часов можно ух нагоняться, ни у кого не было подобного опыта?
>>1287850 > >(2994Кб, 1920x1080) > >Аноны-sqlщики, подскажите по ситуации плиз. Сам учусь примерно полгода уже, чтоб работать в анализе данных, из последнего вот только что закончил курс по sql на юдасити. Немного рассылал резюмеху, в итоге получилось так, что прошел собес на должность инженера техподдержки 2 уровня, и как я понял надо будет много ворочать sql, потому что перед тем как берут на работу, компания (it компания видимо среднего размаха в ДС/ДС-2 и Европе) они короче сначала гонят тебя на оффлайн курс по SQL от них, который идет 40 часов и растянут на пару недель. > >Короче скоро начинаю ходить на эти курсы, и мне интересно короче кто что думает про такую тему. Опыта работы у меня нет в IT, и хоть это будет и не работа аналитиком, но по идее вход в индустрию уже будет после такой работы? И sql полезная штука как я понимаю в анализе ведь > >И по курсу, насколько наличие в резюме такого интенсива будет ништячно? Я так думаю за 40 часов можно ух нагоняться, ни у кого не было подобного опыта?
когда получишь работу, попробуй РЕАЛЬНО прокачаться в sql и брать себе побольше сложных задач связанных с его использованием.
SQL - основная рабочая лошадка аналитиков, это факт.
>>1287876 и все пробелы, которые не охватил выполняя работу, заполни сам. Грубо говоря, основной багаж знаний - это джойны, работа с NULL(есть нюансы, например тот факт что любое сравнение null с null это false, и то как null себя ведёт при попадании в сумму), подзапросы (когда селектишь из другого селекта), мудрое использование стандартного пакета агрегирующих и неагрегирующих функций и аналитические/оконные функции.
Эзотерику вроде grouping sets можешь игнорировать, она не очень часто используется. Вопросы на sql-собеседованиях, даже на продвинутые позиции, на моей практике все упираются в хорошее понимание того что я упомянул выше.
Если знаешь англ, читай англоязычные туториалы и из упражнений рекомендую sqlzoo.
>>1287881 > >>>1287876 >и все пробелы, которые не охватил выполняя работу, заполни сам. Грубо говоря, основной багаж знаний - это джойны, работа с NULL(есть нюансы, например тот факт что любое сравнение null с null это false, и то как null себя ведёт при попадании в сумму), подзапросы (когда селектишь из другого селекта), мудрое использование стандартного пакета агрегирующих и неагрегирующих функций и аналитические/оконные функции. > >Эзотерику вроде grouping sets можешь игнорировать, она не очень часто используется. Вопросы на sql-собеседованиях, даже на продвинутые позиции, на моей практике все упираются в хорошее понимание того что я упомянул выше. > >Если знаешь англ, читай англоязычные туториалы и из упражнений рекомендую sqlzoo. > и ещё не забывай про повсеместность excel. Все аналитики,с которыми я работал - настоящие визарды экселя и это им реально помогает, т.к. их "клиенты" как правило результат труда хотят в виде красиво оформленной экселины.
>>1288049 Хуитектор, id-шник тоже в отдельную таблицу занеси, а то что это они в разных таблицах одинаковые? Это не нормализация, а хуйня, и вопрос зачем даже не стоит.
>>1288061 Ты ебанутый совсем? Тебе говорят про ограничения домена
У тебя есть справочник городов
1 Москва 2 Урюпинск 3 Саратов
Соответственно, все поля "Город" будут ограничены доменом городов? Ок? Поменял по id 3 Саратов на Saratov, у тебя во всех представлениях, процедурах, функциях подтянется обновленное зхначение, без необходимости править _каждую_ таблицу с полем "Город"
Ровно тоже ты можешь сделать с датами. Вопрос только в том- нахуя?
>>1288063 Ровно тоже ты можешь сделать с id-шниками. Или с возрастом людей или счетчиком скачиваний или %любое поле-значение%. И это очевидный пиздец, как и с датами. Так что ебанутый здесь только ты. Ну и ещё тот идиот, что это предложил, но он хоть архитектором себя не называл.
>>1288090 Какой пул значений ты в датах создания записи узрел? Это же не праздники, например, которые ограничены и на них это бы работало. Дата создания может быть любая. Любая. Ты понимаешь это? И это архитектор. Говно ты, а не архитектор.
>>1288696 Для какого разного, одаренный ты наш? Ситуация обозначена: >В каждой таблице есть поле created типа Дата, куда заносятся дата создания строчки в таблице. Ты утверждаешь что можно (не в смысле физической возможности) эту дату вынести как отдельную сущность. Я утверждаю, что это полнейшая глупость и не имеет смысла. Так что заканчивай манёвры, архитектор хуев, и иди пиши заявление по собственному, пока контора не накрылась от твоего профессионализма.
>>1288727 Сука пидарас, ты мне это в лицо сказать сможешь, ГАНДОН блядь ебаный?? Давай нахуй встретимся и ты блядь ответишь за свой гнилой базар, гнида! Ты где живёшь нахуй?
Привет, нужен небольшой совет. Предположим есть таблица с двумя полями на внешние ключи - адрес магазина и тип товара ну и разные другие. Надо собрать другую таблицу где для каждой пары адрес-тип будет количество товаров, т.е. просто количество строк в той таблице. Я это могу сделать в лоб в приложении, но может есть какой-то быстрый способ в sql это сделать? Тут декартово произведение получается как никак.
>>1222346 (OP) Не подскажите в чем дело может быть? Поставил MS SQL server. Захожу в студию. Жму там Создать новую базу данных SQL server... Но кнопка Обновить не показывает мне мой сервер. Ну ладно. Ввожу руками название. Жму подключить. Он появляется. Жму треугольник, чтобы раскрыть список. Жму еще раз и этот треугольник просто исчезает. Создают новую таблицу, заполняю там все, сохраняю. Обновляю базу данных. А там рядом с словом Таблица даже нет этого треугольника для раскрытия списка. Че делать?
>>1290475 А вот через вкладку Обозреватель объектов SQL server все работает. И подключение к серверу там уже есть. А через вкладку Обозреватель серверов не работает. В чем разница между этими вкладками? И почему так?
Антоны, привет, я умею немного в питон и JS. И вот вкатываюсь в SQL. Вкатываюсь так что АЖ ТРИСЕТ! Не пойму общую логику запроса. Вот допустим есть три таблицы: Таб1, Таб2, Таб3. Как в SQL сделать допустим так: Если в Таб1 в Столбец1 значение = 1 - то обновляется строка в Таб2, если же в Таб1 в Столбец1 значение = 2 - то обновляется строка в Таб3.
Я могу делать примитивные дискретные запросы к одной таблице. Пересечения JOIN разных таблиц. Подзапросы.
Но не понимаю как выполнить сразу несколько инструкций SELECT/UPDATE и т.д., что бы они выполнялись в условиях IF допустим, и как передавать между этими запросами переменные данной итерации.
>>1291193 На SQL так сделать нельзя. Это не язык программирования, а язык запросов.
Т.е. надо или триггеры или процедуры, или программу на языке программирования. Лучше - программу. Также, сама постановка задачи выглядит как-то подозрительно.
>Удивляемся, как за знания, приобретаемые за 4 месяца на sql-ex, могут платить по 100к Это действительно так ? О себе: Я раньше работал в бухгалтерии, а потом перекатился работать в банк. Перекат был из-за большей зп, но приходиться работать с клиентами (милд офис), что уже вызывает нервоз из-за тупости и наглости клиентов, если с тупостью я рад помочьНу типа пох как-то, то с наглостью БЛЯТЬ СУКА БЛЯТЬ КАК ВСЕ ЗАЕБАЛО БЛЯТЬ ИДИ НАХУЙ Я уже просто мечтаю о работе с документами и залипании работы в Excel. На НН вижу вакансии с хорошей зп (работа с отчетностью или аналитик), где требуют знание Excel + SQL, если Excel я ещё дрочил в вузе + когда работал в бухгалтерии, то с SQL сейчас хочу посмотреть что и как тут. Хотел спросить, у пня 27 левл при изучения sql-ex, на какую работу есть шансы претендовать, и какие именно обязанности придется выполнять ?
>>1292839 знание предметной области и экселя может скомпенсировать твои пробелы в sql. Знаю аналитиков которые не знали sql до текущей работы, а им точно за тридцать.
Единственное, я не понимаю откуда такое горячее желание убивать свой мозг дроча sql-ex вместо sqlzoo. Пожалуйста, начни с sqlzoo. Там на английском, но зато там очень плавно тебя ведут от самых простых селектов к более сложным вещам.
Что придётся делать - если речь идёт об отчетности, то на мой взгляд процесс будет такой: поступает просьба запилить отчёт. Просьба сформулирована скажем так "бизнес-языком", с использованием терминов предметной области. Вот тут ты можешь использовать знание предметной области, чтобы понять какие таблиы задействовать, какие фильтры логично наложить, где ссумировать, а где взять среднее и может даже предугадать и слегка додумать за "клиента" его требования. Дальше ты используешь технические навыки, проверяешь качество данных на всякий случай, и строишь отчетик - пишешь запрос, сохраняешь в эксельку результат. Если нужно, в эксельке добавляешь всякие няшные финтифлюшки. Отправляешь резалт клиенту.
Мой взгляд правда слегка со стороны. Меня иногда просят сделать ad-hoc запросы/отчеты, но я больше парюсь по инфраструктурным вопросам, бигдате всякой etc
>>1222346 (OP) >ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ Пролистал тред, ответа не нашел
>Рассказываем, как работаем аналитиками и мечтаем стать разработчиками На самом деле нет, аналитиком быть кайф. И в бизнес погружаешься, и поковырять всякие хадупы можно. Но у меня вопрос - куда развиваться аналитику чисто в техническом плане, без привязки к конкретной области, и не уходя в разработку, архитектуру бд?
>>1293708 >куда развиваться аналитику Поясню. Ну чтобы можно было придти в любую контору и сказать "вот я умею это и это, работал с этим и этим, прошел такие-сякие курсы". А то уже третий год работы идет, а из навыков программирование на уровне парсинга твиттера, бд на уровне СЕЛЕКТ АПДЕЙТ, математика на уровне линейной регрессии. Ну да, еще я умею выгружать все что угодно в excel, знаю что такое PowerPivot (и DAX соответственно), чем медиана отличается от моды, работал с ms sql, postgres, clickhouse, hadoop, teradata, sas и черт знает еще чем. Но это все как-то поверхностно что ли, а хочется какой-то ГЛУБОКОЙ аналитики, если вы понимаете о чем я.
>>1293712 > >>>1293708 >>куда развиваться аналитику >Поясню. Ну чтобы можно было придти в любую контору и сказать "вот я умею это и это, работал с этим и этим, прошел такие-сякие курсы". А то уже третий год работы идет, а из навыков программирование на уровне парсинга твиттера, бд на уровне СЕЛЕКТ АПДЕЙТ, математика на уровне линейной регрессии. Ну да, еще я умею выгружать все что угодно в excel, знаю что такое PowerPivot (и DAX соответственно), чем медиана отличается от моды, работал с ms sql, postgres, clickhouse, hadoop, teradata, sas и черт знает еще чем. Но это все как-то поверхностно что ли, а хочется какой-то ГЛУБОКОЙ аналитики, если вы понимаете о чем я. >
Дата саенс это наверное и есть та самая глубокая аналитика. Если ты знаешь статистику то подучи её ещё немного, порубай на kaggle, выучи всякие питон либы вроде numpy,scipy,tensorflow, для визуализации что-то. Люди говорят этого недостатчно ну может недостаточно чтобы в их глазах быть труъ но вообще можно прийти с такими знаниями и уже работая реально вглубь развиться. Тут уже дело удачи и того факта что нужно очень много подавать заявок и активно искать везде, не просто открыть профиль на хедхантере и ждать.
>>1293739 Если тебе нужно знать о возможности удаления до попытки удаления, то есть такие варианты:
1. Вычислять наличие дочерних записей в главном запросе - это будет медленно. 2. Проверять наличие дочерних записей в момент выбора строчки - дополнительным обращением к базе (можно селектом, а можно и удалением с отловом исключения и если его нет, то делать rollback и показывать кнопку реального удаления. Если есть исключение - кнопку не показывать) 3. Проставлять в родительской таблице флаг наличия дочерних записей при вставке или удалении в подчиненные таблицы - триггерами или через хранимые процедуры, но и внешний ключ не отключать.
Но я особого смысла в этом не вижу, блокирование кнопки не очень понятно для пользователя (почему не горит кнопка? Нет прав? Где именно находятся дочерние записи и сколько их?), а если написать вменяемое сообщение на исключение (с указанием в каких таблицах есть подчиненные данные и их количество), то все будет нормально.
К тому же если у тебя будет работать больше одного человека, то предварительная проверка может быть неактуальной к моменту реального удаления.
>>1293970 Сейчас делаю удаление с лиловом исключения, но мне кажется, это плохая практика. Про флаг не совсем понял, но на ум пришла идея завести столбец-счётчик зависимостей в родительской таблице - при удалении/добавлении в дочерней таблице декрементировать/инкрементировать соответствующее значение. Или я хуету несу?) >>1294038 Твой способ тоже вроде бы классный.
Жаль только, что мне для крайне нежелательно редачить
Соответственно, на добавлении связываемых вещей срёшь в этот справочник.
Дальше вообще изейше.
Пользователь встает на ЛЮБУЮ запись у тебя в системе, жмет делет, ты лезшь в справочник, SELECT TOP (1) FROM MyHierarchy WHERE ID =@ID AND OwnerID IS NOT NULL => водишь пользователю вялым по лицу
>>1294061 Бля кекнул с вялого. А это не будет считаться говняным костылем? >>1294065 Хотел запросами это сделать. > Можно селектом поднять зависимости? Этого я как раз не ебу. Нуфаг-вкатывальщик
>>1294081 >Бля кекнул с вялого. А это не будет считаться говняным костылем?А почему будет? Раз у тебя появились сомнения, остуановись и ПОДУМОЙ какие минусы у такого подхода, какие плюсы.
>Этого я как раз не ебу. Нуфаг-вкатывальщик Ну так прочитай доки, мудила, няш!
Двач посоветуй что-нибудь почитать о бд пожалуйста. Только не талмуды по 2к страниц они вообще нечитаемы. Что-нибудь доходчивое, но не справочники по sql а именно про бд. Где и теория есть и примеры из реальной жизни.
>>1294051 Отлов эксцепшона - единственная нормальная практика.
Любые проверки до удаления могут стать неактуальными в момент фактического удаления - Вася встал на запись, которую вроде можно удалить и пошел пописать, Петя в другом городе в это время добавил к записи дочерние записи. Вася поссал и жмет УДОЛИТЬ - твои действия? Поэтому только форинкеи, только хардкор.
>>1294439 Спасибо, конечно. Первая выглядит прям как по заказу, о блядь, как такие талмуды читать. Да я ее пол года в лучшем случае буду читать. Времени не так уж много. Ну, буду пытаться по главам смотреть. Спасибо
анончики, если прошел двухнедельный оффлайновый интенсив по sql, куда его в hh лучше вписывать, чтоб повиднее было? просто в пройденные курсы как то затеряется среди всех, может в стаж, так сказать? или типо тесты/экзамены?
Сейчас я то дела через python и кучу запросов в цикле вида :
SELECT ask_open FROM EUR_USD_M1 WHERE timestamp in (SELECT timestamp from EUR_USD_M1 WHERE timestamp >= 1420149600.0 AND timestamp < 1420149600.0 + 3*60;
В общем вложеные циклы, двумерные списки и прочие радости, убиващие производительность + почти 300 строк лишнего кода. Реально ли сделать таку подготовку данных силами СУБД?
>>1297179 - добавь колонку с порядковым номером записи (или генерируй его на лету, если sqlite это поддерживает). - делай два джойна с самим собой по a1.row_number = a2.row_number + 1, a2.row_number = a3.row_number + 1
На работе сказали, что на новом проекте придётся вместо постгреса юзать MS SQL. Там много различий? Создать новую бд, а в ней таблицы и смотреть что там да как через аналог pgAdmin возможно или такого нет?
>>1297426 > Там много различий? Даже с ораклом меньше. Ну ты понял. Хотя судя по твоему вопросу, сомневаюсь. > Создать новую бд, а в ней таблицы и смотреть что там да как через аналог pgAdmin возможно или такого нет? Это можно с почти любой из ныне живых СУБД через какой-нибудь dbeaver.
>>1297494 >Даже с ораклом меньше. Эх, так не хотелось вникать особо, надеялся что обычными SQL командами обойдусь и ладно. Придётся тогда ознакомиться.
>>1297402 Решение громоздкое конечно (окно нужжно куда шире, 20-25 размером, столько же примерно и дойнов надо), но это хотя бы что то. А как индекс - таймштамп годится, и уникальный и интервал равномерный. Попробую. Нефти тебе анон.
>>1297612 B получу не 20 последовательных значений, а только 1е и 20е ? Или я тебя не так понял ? Пока получил то, что надо способом, как советовал анон выше.
>>1291827 >>Трисет тебя потому Уже меньше трисет, вкатываюсь по тихоньку. Чуть перестроил мышление с програмиссткого подхода в базоданновый. >>Этого не слушай, тащить за собой данные можно. Например в курсоре. О курсорах, представлениях и виртуальных таблицах уже имею некое понятие. И они и правда далеко не всегда нужны.
У меня такой вопрос - какие фильтры выполняются первыми при объединении таблиц - те что в инструкции INNER JOIN tab1 ON ... = ... AND.... Или те что после WHERE .... установлены?
>>1295774 Ну вообще, если уж присмотреться, то DML не является подмножеством DDL и никто сомневается, что это разные вещи А вот селект (ну ладно, DQL) - это как раз подмножество DML. Ну и при выполнении DML тебе необходимо читать данные с диска - оперировать данными - а селект тоже делает именно это. Вот тебе и DML. да что с этой капчей
>>1300486 При внутреннем джойне - однохуйственно. При внешних - для основной таблицы правила как при обычном джойне, а для присоединяемой - сначала on, потом where.
>>1222346 (OP) Мимокрокодил и наткнулся на https://habr.com/company/mailru/blog/266811/ К БД отношения почти не имею, так что не обосцывайте. 1. " Например, нам нужно в таблице объединить две колонки: «фамилия» и «имя». Благодаря статистике БД знает, что в ней содержится 1 000 уникальных значений «имя» и 1 000 000 — «фамилия». Поэтому база объединит данные именно в таком порядке — «фамилия, имя», а не «имя, фамилия»: это требует гораздо меньше операций сравнения, поскольку вероятность совпадения фамилий гораздо ниже, и в большинстве случаев для сравнения достаточно брать 2-3 первые буквы фамилии. "
Вопрос - почему и о каких операциях сравнения идет речь?
2. Еще где-то видел(ну или я дебил так подумал), что писать: SELECT FROM TABLE1 JOIN (SELECT FROM TABLE2 WHERE CONDITION) ON TABLE1.ID = TABLE2.REF_ID1
Нету смысла, и эквивалентно по скорости работы
SELECT * FROM TABLE1, TABLE WHERE ID=REF_ID AND CONDITION
Хотя для меня это не очевидно. Казалось бы, вначале отфитровал вторую таблицу, откинул часть данных, и потом сделал join - должно быть быстрее, чем сначала сджойнить кучу данных и потом фильтровать
>Вопрос - почему и о каких операциях сравнения идет речь? Мимо с 2005 кодирую на скуле. Я так понимаю, он говорит про создание Cartesian product. (Вася, Петя) * (Иванов, Петров, Сидоров) => (Вася Иванов, Вася Петров, Вася Сидоров, Петя Иванов, Петя Петров, Петя Сидоров)
Если у тебя в таблице слева (Вася, Вася, Вася, Петя) а в таблице справа (Сидоров, Сидоров, ........ Сидоров) то статистика подсказывает какой физический вид джойна выбрать, и какую таблицу брать "входной" если выбран nested loop , а при такой разнице размеров будет выбран скорее всего он.
> Еще где-то видел(ну или я дебил так подумал), что писать: Гуглируй последовательность выполнения инструкций СЕЛЕКТА, если мы говорим о MS SQL
>>1302333 > какую таблицу брать "входной" если выбран nested loop Какая разница, что брать в качестве внешнего, а что в качестве внутреннего цикла, в обоих же случаях O(n*m) (я про наивную реализацию, само собой)
Все равно, не понимаю о каких операциях сравнения идет речь. Если о сравнении таплов в целом (Вася, Иванов), (Вася, Петров) сравнить стоит дороже чем (Петров, Вася) (Иванов, Вася) - то это ясно, нок чему это все сказано - не понятно
>>1302460 Потому, что когда ты делаешь деКартево произведенее, тебе надо умножитьб всё на всё. Логично ОДНО из этого всего сжать до distinct значений, чтоб лишний раз в булочкную не бегатью.
Посоветуйте книгу, чтоб основательно и все разжеванно. А не вот таблички, вот связи, вот запросы пишем, конец. На таком уровне SQL я знаю, интересуют именно подробности, чтоб с джоайнами, ордерами и оптимальными запросами. На чистом SQL не пишу, но Рейлс запросы транслируются в него, и получается ужас, не ожидал такой огромной разницы между pluck и select.
>>1302662 Нет. Скорость доступа прямопропорционально затратам по памяти. Если в СУБД ты используешь индексы, и чем больше индексов, тем выше и скорость и оверзед, то же самое и с ФС. Отображай свои структуры на структуры фс и никакой движок кроме чтения списков файлов\самих файлов и записи файлов\создвния тебе не нужен. Но и затраты по памяти будут очевидно выше.
ФС это тоже БД. Иерархическая БД. У нее уже есть движок. Без движка и нет никакой ФС.
Сап програмач, помоги. Пишу сайтик с MSSQL. Есть таблица, в которой нужно хранить две JSON строки, притом что одна из них может быть около 5-10 тысяч символов. Что-то мне подсказывает что просто хранить их в столбцах не вариант ( размер может быть и ещё больше). Подскажите как всё сделать хорошо.
Есть одна база, ЕОБ, в ней одна таблица а в ней 100 миллионов строк-фраз. Мне нужно делать выборку по длииииинному списку тысяч на 10-20-30 из неё. То есть мне нужно делать выборку по данным из другой таблицы единоразово. Я сделаю индексацию, но не шарю в синтаксисе. Я чета делал JOIN - он мне выдает полные совпадения - типа apple - apple, а мне нужно apple -> green apple, karasique appletini и т.д. (нужен только итоговую выборку сохранить в файл).
Короче, выручайте - скину на мороженку. А то я с grep'ом буду ждать до морковкиного заговенья. Знающие люди пишут, что нужно колдовать с функциями - т.е. я так понял, циклом пробегаться по второй таблице и чекать первую.
select a.yoba_name, b.yoba_name from yoba1 a join yoba2 b lower(b.yoba_name) like '%'||lower(a.yoba_name)||'%' where a.yoba_name in ('apple', 'double', 'triple')
Lower нужен если у тебя в разном регистре данные, если это так, то индекс по yoba2.yoba_name нужно строить по lower(a.yoba_name) и в запросе к полю обращаться с функцией, указанной в индексе. Для yoba1 тоже строишь индекс по yoba_name, если необходимо - с lower. Если значения гарантировано уникальные - делай уникальные индексы, будет быстрее.
>>1305151 Братишка, спасибо. Но мне нужно не по apple - это я для примера же привел. Мне нужно вообще по всем значениям из второй таблицы. Во второй таблице искомые слова, а в первой большой многомиллионный список, откуда выбираем. Вот так.
>>1305220 Ну так тебе анон и написал. В одной таблице у тебя данные, во второй - справочник с нужными значениями. И по его запросу ты получишь все строки из первой таблицы, которые так или иначе содержат в себе какое-либо слово из второй таблицы. Только учти, что в итоге ты для строки "Вася и Петя" и наличия во второй таблице строк "Вася" и "Петя" получишь дубли. Потому тебе нужно что-то вроде SELECT DISTINCT a.yoba_name FROM ...
Не особо шарю в сукиэле и базах данных так что помогите пожалусто. Тип есть 2 бд, в одной список стульев в другой список хуёв, хуи разные все кароч, и допустим у каждого стула свой набор хуёв, собсна их нада записать в бд, а как блять? У меня в голове только к полю id и name добавить поле dicks_id где через запятую указать id хуёв.
как хранить оценки, например, по шкале от 1 до 10? на ум приходит создать таблицу с возможными оценками, но это как будто костыль какой-то ебучий. как сделать шобы нельзя было ввести число больше 10, меньше 1? postgresql
>>1307033 На самом деле справочник оценок в отдельной таблице - нормальное решение.
Можно сделать историчность оценок - например, оценка "1" действовала с 01.01.1900 по 12.12.2017, а оценка "3+" - с 01.01.2005 по 02.02.2013. Можешь сделать так, чтобы по физкультуре, к примеру, были 10-балльные оценки, а по музыке - 3 балльные.
А можешь просто check_constraint сделать типа yoba_mark between 0 and 10. Но в этом случае будь готов к всяким граблям, которые неизбежно вылезут если систему оценок нужно будет хоть немного модифицировать/расширить.
хочу скопировать чужую бд, для этого мне нужно запустить дамп этой бд (не уверен, что правильно называю, короче .sql файл, который создает таблицы и инсертит данные в ниХ) , а там везде вместо одинарных кавычек ' стоят ` . как быть? postgres
>>1308323 Я думаю, что оба ответа - "да". Первый: это логично, черт возьми. Чтение с диска - всегда боттлнек для базы, потому тот же оракл выделяет у себя в SGA горячие блоки, чтобы не читать лишний раз с диска. Второе: определенно. Сервер же должен считать данные и как-то их сохранить, чтобы показать тебеу меня так коллега случайно съел 340 гигов оперативы. Или же сохранить промежуточные данные для выполнения запроса.я, почти случайно, таким образом съел 304 гига оперативы
>>1308335 У меня база предполагается 60 гигабутов, самый максимальный запрос по индексам сможет выбрать 6 млн строк для обработки, это 6 гб примерно, так что оперативка вряд ли забьется, если хоть 8 гб будет
Привет, анон. Вопрос о противостоянии производительности и поддержки кода в oracle pl/sql.
Есть цикл, на каждом шаге которого вызываются процедуры, которые создают записи в определенных таблицах, каждая процедура работает со своей таблицей. Ключи, по которым можно найти созданные записи определяются на каждой итерации. В конце итерации нужно проверить, создалась ли хотя бы одна запись хотя бы в одной таблице. Можно тупо делать select count(1) from t where rownum = 1 and key_val = :0 для каждой таблицы. Но я реализовал процедуры таким образом, что одним из исходящих параметров является флаг, который каждой процедурой переводится в true, если была создана хотя бы одна запись своей таблицы. В каждый вызов процедуры передается одна и та же bool-переменная, назовем ее b. Т.е. в начале итерации b=false, любая процедура может сделать b=true. В конце итерации проверяем значение b.
Насколько мой подход оправдан? С одной стороны не нужно делать лишние селекты на каждой итерации, хоть и быстрые, с другой приходится вводить "глобальную" по отношению к процедурам переменную.
Всем добрый вечер я сегодня завалил экз по бд в своей шараге и решил быренько догнать программу, прошёл курс на sololearn, почитал лекции и решил поделать задания, на которые весь семестр забивал болт. И вот собсна одно из заданий, если кто-нибудь сможет мне объяснить почему нихрена не работает, буду сверхблагодарен
>>1312709 Ну, во-первых, в последнем подселекте у тебя фром склеился с ауткамом. А во-вторых - в первом селекте у тебя два поля, а в последующих - по одному. Как ты собираешься сделать юнион? Список полей и их типы должны соответствовать/быть приводимы друг к другу. В-третьих - у тебя в третьей строчке стоит точка с запятой, которая не даст захватить кусок с запросами ниже. В-четвертых - select point, date, from. Не хочешь после даты указать ещё одно поле или убрать запятую? Вот у тебя и парсер с ума сходит.
>>1312720 Спасибо за ответ, а каким способом мне тогда лучше объединить эти таблицы если не юнионом? по заданию, если я не ошибаюсь нужно вывести inc и out вдобавок к point и date
>>1312731 А что ты будешь делать, если у тебя был приход и расход в один день? Это full join, тут по-другому никак. Тебе нужны все даты и суммы из таблицы приходов, а вместе с ними - и все даты и суммы и таблицы расходов. Здесь тебе поможет nvl.
Честно говоря, я до sql-ex с SQL общался только в универе (не ходил на пары и списал на экзамене). Решил нужное количество задач + дополнительные (не с сайта) и работаю разработчиком, лул.
Аноны, есть два дампа одной и той же базы данных, с разнице в 3 недели. Структура таблиц не изменялась за это время, только добавлялись новые данные. Но с первым дампом всё работает отлично, а со вторым приложение крашится т.к. отсутствуют какие-то данные. Вопрос: Будет ли иметь смысл накатываение старого дампа потом нового(с дописыванием новых данных)? Если да, то как такое провернуть(какой командой ну или хотя бы как правильно спросить у гугла)?
Ну и накатить просто старый дамп и расслабиться я не могу т.к. за 3 недели появилось много новых данных.
>>1312790 Накати параллельно со старой работающей новую и просто напиши миграции из всех таблиц, в которых появились данные, из новой неработающей бд в старую работающую.
>>1313029 Дело в том, что таблиц там 610, и данные обночвились в 99% из них, поэтому ищу +/- готовый инструмент. И, да, я не спец в БД и редко пишу что-то сложнее обычных селектов/инсертов и прочего. Но я готов изучать литературу/документацию, главное знать бы какую и как искать
>>1313512 Дело в том, что приложение одно и тоже(CRM система). На продакшен-сервере оно отрабатывает корректно с той базой данных, которая есть. А вот это же приложение на дампе - падает, что на новом, что на старом(как оказалось, я просто тестил хуйово, и оно всё же падает, просто без глобальной ошибки, а вылазит небольшое окно с инфомрацией, после долгой загрузки), в одном и том же месте. К БД продакшен-сервера мне не дали подключиться и протестить с ней. А я и хуй забил.
Тут мы решаем ультраважные вопросы о том, как правильно хранить динамические атрибуты сущностей: в полях или в строках,
Рассказываем, как работаем аналитиками и мечтаем стать разработчиками,
Строим АНАЛИТИЧЕСКИЕ отчеты в экселе, выгружая по миллиону строк, а потом фильтруя,
Дружно не понимаем, ЗОЧЕМ ЖИ НУЖИН ОЛАП, ЕСЛИ И ТАК ВСЕ РАБОТАЕТ ЗАЕБИСЯ,
Ищем ошибки в аббривиатурах MDX DMX XMLA,
Доебываемся до эс - ку - элей наших же потенциальных конкурентов
>Select id from tbl_table_with_id where id = (select max(id) from tbl_table_with_id)
>ЧТО НЕ ТАК-ТО У МЕНЯ?
Удивляемся, как за знания, приобретаемые за 4 месяца на sql-ex, могут платить по 100к, и бугуртим, что ниасилили и 100к не получаем.
А так же:
Постгре или постгрес?
Май эс ку эль или мускуль?
Эс ку эль или сиквел?
В общем, это очередной баз данных тред, поехали!
Награда светит не посмертною медалью, отнюдь
Это храм старого формата, так предали огню
И скоптили небо старики, что слышны с Невской реки
Мы видим дым от костра - "Да здравствуют базовики!"
ПРЕДЫДУЩИЙ:
#sql #бд #базы данных