Это копия, сохраненная 31 января 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
в котором мы
-Выслушиваем, почему в шапке по-прежнему отсутствует инфа для вкативания
-Разбираемся, почему PostgreSQL - не Oracle
-Пытаемся понять, зачем нужен Тырпрайс, если есть бесплатный опенсурс
-Обсуждаем, какие новые тенденции хранения данных появляются в современном цифровом обещстве
-Решаем всем тредом лабы для заплутавших студентов и задачки с sql-ex для тех, у кого завтра ПЕРВОЕ собеседование
-Анализируем, как работает поиск вконтакте
-Игнорируем конкаренси-шизика, не понимающего, зачем базы данных нужны
-И просто хорошо проводим время, обсирая чужой код, не раскрывая, как писать правильно
Поехали!
надо вспомнить курс бд и задрочить скл до среднего уровня, тихонько восседая в техподе. Нужна ультрагоднота: посоветуйте 1 книгу и 1 онлайн-ресурс для решения задачек. С меня нихуя.
Кстати
>-Разбираемся, почему PostgreSQL - не Oracle
Консенсуса еще нет?
Ну, кроме того, что постгрес бесплатнее.
Есть даже доступ к адски медленной тестовой бд на oracle
Анонасы!
Я старый пердун, который 20 хуярит на РДБМсах всех сортов.
Поскольку я старый пердун, мне тяжело для поиска информации пользоваться модными стильными молодежными сайтами-простынями, поэтому спрошу здесь:
В чем каеф от noSQL баз?
Где их уместно применить, и почему?
Про key-value мне можно не пояснять, тут все понятно.
Про "азазаза можно не учить сложный sql и можно не думать о структуре данных" тоже можно не пояснять.
Даже агитки про репликацию и кластеризацию можно не повтрять.
Мне интересна польза noSQL именно с точки зрения задач по обработке и хранению данных.
Что это за задачи такие?
Там, где мне насрать на какую-либо вменяемую структуру данных?
Там, где мне насрать на целостность?
Там, где мне насрать на гибкость и скорость выборки?
Там, где мне насрать на возможность развития системы в части схемы данных?
Я без подъебки спрашиваю, мне правдо интересно.
Боюсь, что консенсуса нет, так как большинство юзает просто то, что первое им под руку попалось.
На работе MySQL? Значит, MySQL топ за свои деньги.
Так вот, как раз, скорость выборки будет выше, когда ты просто объект по ключу забираешь.
"выбрать всех пидарасов по фамилии Петров"
Как там у тебя в монгодб будет со скоростью такой выборки?
По какому ключу ты там что будешь забирать?
понятия не имею про "1 книгу"
Почему вообще ты ограничиваешься 1-й?
https://www.geeksforgeeks.org/sql-tutorial/
и
http://www.sql-ex.ru/
Последний сделан людьми, которые не умеют в человеческий язык, поэтому там не всегда можно понять, чего они от тебя хотят.
Ну, тоже привыкай.
Но нет способа лучше, чем сделать какую-нибудь систему самому.
Придумай, набросай схему БД.
Напиши скрипт для ее генерации.
Напиши CRUDы для нужных тебе операций.
Ну и селекты.
Потом прикинь, какие бы ты хотел отчеты получить от такой системы. Вот тебе еще десяток хитровыебанных запросов.
Но мне интереснее обсудить этот вопрос с теми, ктро работал и с Ораклом, и с Мускл.
Мнение вчерашних школьников, натягивающих пхп-морду на очередной магазин сушеного навоза, сам понимаешь, стоит недорого.
Спасибо за ответ.
Вы дауны, можно все в текстовых файликах хранить.
Ты просто, видимо, не понимаешь, зачем нужны объектные БД.
Они не нужны для "where ... like ..."
Они нужны для того, чтобы быстро доставать объекты в уже подготовленной форме.
Например, достаешь ты юзера "a.petrov", а у него куча говна в виде документов, докторских степеней, дипломов и сертификатов.
Если бы ты работал с реляционной бд, ты бы писал несколько запросов
select
id, name
from user
where user_login = 'a.petrov'
select
from dociments
where user_id = ...
select
from sertificates
where user_id = ...
и .п.
А с объектной бд ты просто достанешь юзера и все, что к нему относится, сразу.
{
id: 1,
login: "a.petrov",
certificates: [ ... ].
documents: [ ... ]
}
Ты просто, видимо, не понимаешь, зачем нужны объектные БД.
Они не нужны для "where ... like ..."
Они нужны для того, чтобы быстро доставать объекты в уже подготовленной форме.
Например, достаешь ты юзера "a.petrov", а у него куча говна в виде документов, докторских степеней, дипломов и сертификатов.
Если бы ты работал с реляционной бд, ты бы писал несколько запросов
select
id, name
from user
where user_login = 'a.petrov'
select
from dociments
where user_id = ...
select
from sertificates
where user_id = ...
и .п.
А с объектной бд ты просто достанешь юзера и все, что к нему относится, сразу.
{
id: 1,
login: "a.petrov",
certificates: [ ... ].
documents: [ ... ]
}
какой формат файлика будешь использовать?
что будешь делать, когда несколько людей одновременно будут хотеть записать что-нибудь в файлик?
>Ты просто, видимо, не понимаешь, зачем нужны объектные БД.
Приглашаю тебя еще раз перечесть мой исходный пост.
В частности, там написано:
>В чем каеф от noSQL баз?
>Где их уместно применить, и почему?
Также, там написано:
>Там, где мне насрать на гибкость и скорость выборки?
Твой пример, похоже, дает утвердительный ответ на этот вопрос.
Но я не понимаю смысла.
Как часто тебе нужно ВСЕ брать неделимым куском, из которого хуй что вытащишь без последующей обработки?
Как частно надо хранить все единым кускому, в который не вставишь просто так какой-то кусочек, не заебавшись сперва все разбирать, а потом пересобирать?
Если что, то всякие materialized view и витрины всех сортов есть и в реляционных базах. Как раз, чтобы держать "объекты в подготовленной форме", которые не особо оперативно меняются. При этом, благодаря дроблению на куски и языку запросов, эти "объекты в подготовленной форме" можно-таки удобно подбирать и искать.
Объекты в подготовленном виде вообще не требуют базы данных. Это файловая система. Тебе для выбора нужна только ссылка на нужное место. "Вот этом месте лежит куча говна про a.petrov".
Ну, это в моем понимании.
Вот я и пытаюсь разобраться, в чем дефекты моего понимания.
Пока безуспешно.
Читал как-то, что ForeignKey тру-батьки не пользуются пушо тормозит чтение и запись, насколько правда?
>отдельная таблица для юзеров
я может конечно что то недопонимаю, может так быстрее, может это просто рофл. НО ЧТО ЭТО БЛЯДЬ ЗА ХУЙНЯ?
Бтв, раз уж это скл тред, самое время спросить пару вопрос:
Как проще всего получить 3 последних поста, привязанных к thread по полю parent, при этом еще получить сам тред и его пост, который я достал относительно поля post_id в треде, то есть итог : (Thread, Post, [3; Post]), используетсч лишь две страницы, чекал вакабу, тайниб, везде на каждый тред делается еще один запрос к дб, то есть на один запрос юзера получить все треды в борде, будет выполнено 101 запросов в дб, есть варианты как сделать лучше? ну кроме уж очивидного wherein
Стоит ли хранить количество ответов в треде в виде поля replies_count, или все же count(*) from posts where... лучше?
пик_рандом
Просто запустить минипрограмму которая будет читать из файлов и писать в файлы, засечь сколько ей нужно времни и потом сделать то же самое через програму разрабов. Думаю проблема в разрабах, так как ты себе даже не представляешь что за дауны работают в компаниях. Но не в бд. Отпидарашеная бд довольно быстро всё делает, по 0.002 секунды на операцию. Проблема в кривожопости самих разрабов и их мусорной проги.
Спасибо за ответ, братишка. Доступ к их серверу у меня ограниченный (там какой-то всратый русский дистр на основе Дебиана и они мне выделили порезанную учётку) + есть ещё средства мониторинга и анализа VMWare. Ну ладно, буду думать что да как.
Муська
Напиши структуру таблиц и входные параметры, по которым ты искать хочешь. Ни ухуя не понятно же.
>>04513
Кажется, что проблема в виртуалке. Плюс непонятно, что за диски.
Здорово, если под БД выделяется SSD, тогда все быстро работает.
>>03920
ForeignKey, конечно, замедляет, инсерт и делит, потому что перед инсертом прозводится необходимая проверка на наличие такого ключа в таблице, на которую ссылается вставляемая запись. При удалении аналогично - хочшеь удалить запись из справочника - а нельзя, ведь на него ссылаются миллиард строк в тысячи таблицах.
ForeignKey, Действительно, не всегда используют, потому что он еще и усложняет саму разработку, требуя производить каскадное удаление записей, например.
Например, при разработке хранилища данных не принято использовать Foreign key, чтобы не усложнять и без того тяжелые инсерты.
Но стоит помнить, что, чем меньше у тебя связей между таблицами, тем менее целостной будет твоя система.
>>03910
Что тут непонятного?
Есть у тебя юзер, у него есть сертификаты и, скажем, ученые степени, всё в разных таблицах лежит. Вот ты будешь либо писать 3 запроса, чтобы достать юзера, сертификаты и степени, либо все будешь доставать в одном, используя джойны.
А в противовес этому у тебя есть просто объект "Юзер", с кучей атрибутов-массивов, который ты достаешь одним запросом. Это будет работать однозначно быстрее.
Я вообще не уверен, что есть какие-то дауны, которые считают, что надо только объектные БД использовать, патаму что удобнее. Просто в некоторых случаях удобно взять объект по ключу, который когда-то ты сохранил, тем более, что это будет быстрее. Эта скорость можно не замечать, когда у тебя 20 юзеров. Однако, если у тебя 20000000 юзеров, то тут каждая наносекунда может оказаться решающей.
А в каких-то случаях удобно использовать реляционку, потому что там все твёрдо и четко. Никто комбинированные подходы не отменял.
Например, юзаешь ты google firebase, как объектную БД, на фронте, а для автоматизации основных процессов компании юзаешь SQL Server на бэк-е с констрейнтами и прочими блэкджеками.
Напиши структуру таблиц и входные параметры, по которым ты искать хочешь. Ни ухуя не понятно же.
>>04513
Кажется, что проблема в виртуалке. Плюс непонятно, что за диски.
Здорово, если под БД выделяется SSD, тогда все быстро работает.
>>03920
ForeignKey, конечно, замедляет, инсерт и делит, потому что перед инсертом прозводится необходимая проверка на наличие такого ключа в таблице, на которую ссылается вставляемая запись. При удалении аналогично - хочшеь удалить запись из справочника - а нельзя, ведь на него ссылаются миллиард строк в тысячи таблицах.
ForeignKey, Действительно, не всегда используют, потому что он еще и усложняет саму разработку, требуя производить каскадное удаление записей, например.
Например, при разработке хранилища данных не принято использовать Foreign key, чтобы не усложнять и без того тяжелые инсерты.
Но стоит помнить, что, чем меньше у тебя связей между таблицами, тем менее целостной будет твоя система.
>>03910
Что тут непонятного?
Есть у тебя юзер, у него есть сертификаты и, скажем, ученые степени, всё в разных таблицах лежит. Вот ты будешь либо писать 3 запроса, чтобы достать юзера, сертификаты и степени, либо все будешь доставать в одном, используя джойны.
А в противовес этому у тебя есть просто объект "Юзер", с кучей атрибутов-массивов, который ты достаешь одним запросом. Это будет работать однозначно быстрее.
Я вообще не уверен, что есть какие-то дауны, которые считают, что надо только объектные БД использовать, патаму что удобнее. Просто в некоторых случаях удобно взять объект по ключу, который когда-то ты сохранил, тем более, что это будет быстрее. Эта скорость можно не замечать, когда у тебя 20 юзеров. Однако, если у тебя 20000000 юзеров, то тут каждая наносекунда может оказаться решающей.
А в каких-то случаях удобно использовать реляционку, потому что там все твёрдо и четко. Никто комбинированные подходы не отменял.
Например, юзаешь ты google firebase, как объектную БД, на фронте, а для автоматизации основных процессов компании юзаешь SQL Server на бэк-е с констрейнтами и прочими блэкджеками.
Board:
id: integer unsigned primary key auto_increment not null
Thread:
id: integer unsigned primary key auto_increment not null,
board: id: integer unsigned not null,
post_id: integer unsigned not null //op post
Post:
id: integer unsigned primary key auto_increment not null
parent: id: integer unsigned not null // parent thread, 0 if it's op post
lasthit: timestamp not null
Вообщем надо получить все треды, к каждому по одному оп посту и еще 3 последних ответа к ним, отсортированных по lasthit.desc
А СУБД какая?
тред и 3 поста должны быть в разных строчках или нет?
Например, в разных:
1. id = 1, thread_id = 1, is_thread = 1
2. id = 1, thread_id = 1, is_thread = 0
3. id = 2, thread_id = 1, is_thread = 0
4. id = 3, thread_id = 1, is_thread = 0
Если не в разныъ, тогда 3 строчки:
1. id = 1, thread_id = 1
2. id = 2, thread_id = 1
3. id = 3, thread_id = 1
Как ты хочешь?
а вообще тут как раз парадокс, что хотелось бы все сделать максимально пиздато, но приходится изобретать велосипеды, хотя я понимаю что можно как то 4 раза на один тред вернуть
(одинаковые значения треда + разный пост) и потом отсортировать это самому
select
p.id
,p.id as thread_id
,lasthit
,1 as is_thread
from Post p
where p.parent = 0
union all
select
p.id
,p.parent as thread_id
,p.lasthit
,0 as is_thread
from (
select
t.id
,t.parent
,row_number() over (partition by parent order by lasthit desc) as
RN_post
from Post p
where p.parent_id <> 0
) p
where p.RN <=3
-- достаём только по-посты (треды)
select
p.id
,p.id as thread_id
,lasthit
,1 as is_thread
from Post p
where p.parent = 0
union all
-- достаем ответы
select
p.id
,p.parent as thread_id
,p.lasthit
,0 as is_thread
from (
select
t.id
,t.parent
-- пронумеруем ответы в порядке убывания
,row_number() over (partition by parent order by lasthit desc) as
RN_post
from Post p
where p.parent <> 0
) p
where p.RN_post <=3 -- выбрем по 3 ответа (или меньше) к каждому треду
Пофиксил наименования
-- достаём только по-посты (треды)
select
p.id
,p.id as thread_id
,lasthit
,1 as is_thread
from Post p
where p.parent = 0
union all
-- достаем ответы
select
p.id
,p.parent as thread_id
,p.lasthit
,0 as is_thread
from (
select
t.id
,t.parent
-- пронумеруем ответы в порядке убывания
,row_number() over (partition by parent order by lasthit desc) as
RN_post
from Post p
where p.parent <> 0
) p
where p.RN_post <=3 -- выбрем по 3 ответа (или меньше) к каждому треду
Пофиксил наименования
Я же даже прокомментировал, что это значит.
> пронумеруем ответы в порядке убывания
https://mariadb.com/kb/en/library/row_number/
ок спасибо анон
SQL и всё такое
С чего начинать и куда развиваться?
Стартовые характеристики:
27 лвл бизнесхуй
Образование - менеджмент
Шарю за ИТ на уровне админа локалки, эникея, линух-дрочера
Вкатывальщик тупит над задачей по СКюэЛь:
БД состоит из
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
____________
Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа) производителя B (латинская буква).
Мой солюшн:
SELECT CONCAT(PC.price, Laptop.price) AS price, CONCAT(
PC.model,Laptop.model) AS model FROM Product
INNER JOIN Laptop ON Laptop.model=Product.model
INNER JOIN PC ON PC.model=Product.model
WHERE Product.maker = 'B'
__________________
Результаты выполнения
Вашего запроса:
modelprice
правильного запроса:
pricemodel
1121850.0000
17501200.0000
Чую,косячу с иннер дойнами, по отдельности, вывожу по строчке.
Вкатывальщик тупит над задачей по СКюэЛь:
БД состоит из
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
____________
Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа) производителя B (латинская буква).
Мой солюшн:
SELECT CONCAT(PC.price, Laptop.price) AS price, CONCAT(
PC.model,Laptop.model) AS model FROM Product
INNER JOIN Laptop ON Laptop.model=Product.model
INNER JOIN PC ON PC.model=Product.model
WHERE Product.maker = 'B'
__________________
Результаты выполнения
Вашего запроса:
modelprice
правильного запроса:
pricemodel
1121850.0000
17501200.0000
Чую,косячу с иннер дойнами, по отдельности, вывожу по строчке.
судя по тому, что ты вхуярил concat, ты
1. не понимаешь, что тебе нужно сделать
2. не понимаешь, что ты делаешь
тут тебе не поможешь
Да он перепутал просто конакт и коалис
Что скажете за оптимизацию запросов в оракеле? Где есть нормальная документация?
А чем оптимизация в оракле отличается от оптимизации в sql-сервере?
Кури гайды по чтению плана запроса.
>ForeignKey, Действительно, не всегда используют, потому что он еще и усложняет саму разработку, требуя производить каскадное удаление записей, например.
Т.е. требуя не поломать целостность. Для этого FK и нужен. Больше ни для чего. Чтобы красноглазик не объебался, и не засрал базу непонятными данными.
Не могу себе представить рабочую OLTP-систему, в которой кто-то не создал FK constraint "потому что придется каскадно удалять" или "потому что медленно".
Если какой-то второй уровень уже, типа витрины или хранилища, куда данные выгружаются из заведомо целостной (потому что там есть ФК) базы, то могу себе представить, что не делают целый ряд вещей, без которых немыслимо первичное хранение.
>Но стоит помнить, что, чем меньше у тебя связей между таблицами, тем менее целостной будет твоя система.
FK это НЕ СВЯЗЬ!!!!!!!
>Есть у тебя юзер, у него есть сертификаты и, скажем, ученые степени, всё в разных таблицах лежит.
>....
>А в противовес этому у тебя есть просто объект "Юзер", с кучей атрибутов-массивов, который ты достаешь одним запросом. Это будет работать однозначно быстрее.
Но мне (да и тебе, уверен тоже) почти никогда не нужен ВЕСЬ объект Юзер.
Что, если тебе надо взять просто ФИО и дату рождения?
А что если только ПОСЛЕДНИЙ по дате сертификат?
А что, если тебе надо взять Юзеров, у которых есть такие же сертификаты как у Пупкина?
Т.е., очевидно, я понимаю, что один кусок достать одним куском проще, чем собрать по частям.
Но посмотри же внимательнее на мои вопросы:
что это за ситуации, когда все всегда нужно одним куском?
Мне не приходилось таких систем видеть.
Пидорасы, сэр. Кругом одни формошлёпы и асинхронные дрочеры.
Сам ищу чего бы почитать по логическому проектированию БД. Запросы писать умею, таблицы состряпаю, но хотелось бы чего-нибудь фундаментального.
И я бы хотел. Вон там чувак сверху писал
>Например, при разработке хранилища данных не принято использовать Foreign key, чтобы не усложнять и без того тяжелые инсерты.
Вот где прочесть как разрабатывать хранилища данных, чем эта абстракция или не абстракция? отличается от просто кучи таблиц в БД? НИПАНЯТНА
fk это constraint. ограничение.
правило, которое определяет, что может, а чего не может быть в поле.
Новичкам кажется, что fk определяет какую-то связь, которая что-то о чем-то говорит, и чем-то может помочь при селектах.
Но это не так. Где-то там, в эмпиреях, это, может, и связь. Но на уровне схемы БД, инсертов, апдейтов и делитов, это просто правило, которое определяет возможные значения и правила удаления.
Кто мешает тебе заглянуть хотя бы в википедию?
The data stored in the warehouse is uploaded from the operational systems (such as marketing or sales). The data may pass through an operational data store and may require data cleansing[2] for additional operations to ensure data quality before it is used in the DW for reporting.
Разница в том, что "куча таблиц в БД" заточена под оперативную обработку, в которой любая ошибка может привести к битым данным. Поэтому любой вменяемый архитектор обкладывает базу всеми возможными констрейнтами, чтобы говнокодеры не засрали базу.
Хранилище данных строится поверх оперативной БД. Если ты объебешься и зальешь кривые данные в хранилище, это не очень страшно. Потому что исходные данные все еще целостные и правильные. Исправишь ошибку и перезальешь свое хранилище.
Просто правило - это constraint
Когда создаешь fk, пишешь references, что переводится, как «ссылается». Так что не пизди тут про несвязь.
Можно
Ну да, связь - это же от слова «вязать». Никто же не вяжет ничего в базе данных, ниточек там нет, вот и связи нет.
Такая у тебя логика.
Кто-нибудь писал парсеры логов БД? Прочитать бинарник - вернуть данные.
В частности интересует redo оракловый.
Может кто обладает тайными знаниями, из каких структур и каких размерностей состоит лог? Конкретной разбивки с типами данных и их размерностями нагуглить пока не удалось.
Или вы знаете про конкретные непреодолимые препятсвия, которые могут возникнуть во время решения этой задачи.
Для трэйла oracle gg получилось провернуть такую штуку, хочу с redo попробовать.
Прочёл. Да, хорошая книга, но многабукав (воды), при том что это труд о БД в принципе. Много вещей которые и так интуитивно понятны, а вот эффективных запросов или построения моделей данных нет.
Да и в принципе книжка очень старая. И примеров на реальных СУБД не хватает. А там за 20 лет кучу фич запилили.
Мне кажется, недостаточно вводных.
MS SQL почти во всех изданиях платный.
Есть Express-версия с разрешенным объемом в 10 гб и незапускающимся агентом.
Есть Developer-версия, полностью работающая, но якобы только для разработки, как они это проверяют, я хз.
Access - это что-то уровня SQLite или Excel, если планируешь организовывать туда доступ разным пользователям с разграничением прав, то не уверен, что это то, что надо. С другой стороны, в Access есть встроенный редактор форм, так что, если не умеешь прогать, а хочешь создавать интерфейсы, то это будет самым простым вариантом.
>если не умеешь прогать
это
Но пытаюсь учиться. Таки попробую в Access, если приспичит дальше развивать, буду изучать взрослые СУБД
Делай нормально, асес гавно мамонта какое-то. Бери май или мс. У мс есть экспресс бесплатная, если у тебя там не хайлоад разницы не заметишь. С мсовской в комплекте идет менеджмент студио, у май тоже есть из коробки инструменты все. Какой в очко ассес перекрестился
Я щас вот сижу учу SQL, всякие эти селекты-хуекты, и туториал меня ведет по SQL Server. Но я же так понимаю, SQL будет везде одинаковый? И во всех БД запросы выглядят абсолютно одинаково?
>MySQL, Postgres, MS SQL Server
это все демоны, к которым ты можешь подключаться удаленно
>мускул
устаревшее говно, use mariadb instead
>постгря
вроде годнота, и можно после инсерта получить инфу о поле, которое вставил, но есть и свои недостатки, увы тут я хз.
>мс
говно
>Sqlite3
в синтакисе есть подьеб AUTOINCREMENT, а так годнота, особенно для игр, но для хайлоад прочих PoolConnection не поедет, так как не поддерживает несколько соеденений (онли одно).
Т.е. по большому счету все равно, на какой ДБ учиться писать запросы? Я не планирую быть архитектором баз данных, вообще мечу в бэкэнд, так что мне, по сути, надо просто понимать, как и какие запросы писать в БД.
Подключайся, помогай составить
Наименование-размер-отверстие(тру/фальш). Стоит ли размер разбивать на части зависит от условий, если разбить можно будет искать по каждой стороне.
>SQL будет везде одинаковый
В основной своей массе - да.
У всех есть какие-то свои расширения.
У говна типа мускл есть еще и свои тупые ограничения.
Некоторые (типа того же мускла) херово умеют в стандарт.
Но это SQL.
Как только ты шагнешь в процедурность, у всех все будет разное.
Средства оптимизмации тоже у всех более-менее разные.
Есть ли есть что-нибудь годное покурить кидайте
Вот что это блядь такое? Какая-то бабка собралась учить SQL, они что там ебанулись в своей майкрософт? И так в каждом втором руководсвте\книжке, какая-то дичь. Неужели весь этот sql настолько некому в хуй не упёрся?
У меня в вузике SQL преподавала женщина. И она в нем более-менее разбиралась.
>Неужели весь этот sql настолько некому в хуй не упёрся?
Уперся практически везде, особенно в вебе. Я рискну предположить, sql преподают всякие бабки, потому что это один из самых простых топиков it, по крайней мере что касается основ.
Аргументация в уровня /b.
SELECT COUNT(*) FROM table
Не атомарная операция и проходит по всей таблице?
В что там свитера, совсем ебанулись?
Вероятно, зависит от реализации. Может какая-нибудь count(*) понимает как "количество строк с хотя бы одним не-нулл полем".
Попробуй select count(1) from table
The basic SQL standard query to count the rows in a table is:
SELECT COUNT(*) FROM TABLE_NAME;
This can be rather slow because PostgreSQL has to check visibility for all rows, due to the MVCC model. (There have been improvements in PostgreSQL 9.2.)
If you don't need an exact count, the current statistic from the catalog table pg_class might be good enough and is much faster to retrieve for big tables.
SELECT reltuples AS approximate_row_count FROM pg_class WHERE relname = 'table_name';
Это во всех БД так или только в самых ебнутых? Или как обычно у свитеров полный разброд и никто ничего не знает и сказать не может наверняка?
Это шизик, ему неинтересно, он просто хочет срач, игнорируй его.
Не передергивай, одно дело писать запросики уровня "Покажи всех студентов старше 20 плиз)))", другое дело реально в этом всем разбираться. Первого для повседневных задач хватает с головой и большинство макак и знать не знают, что там за реляционная алгебра, потому что им это нахуй не надо.
Жду, когда ты, умник, боевую картиночку подтащишь
Реляционная алгебра в любом учебнике по БД, пусть даже строго написанном, это поверхностная глава из серии "вот есть базовые операции, их можно комбинировать и найти какое хошь отношение хахааа", то есть ничего умного или полезного, если ты серьезный кампустир саентист и тебе реально надо в этом какие-то теоремы доказывать, то надо статьи читать по теме, а то пафосно названный "реляционная теория" раздел из книжки как раз для тех самых макак-второкурсников.
Чот проиграл
Так оно и не для крудоговна нужно. Например представь микросервис в большой системе которому несколько раз в час насирают миллионы сообщений и которые он должен потом постепенно обработать, никакого смысла тут реляционки использовать очевидно нет.
Как что-то плохое.
Так я про то и спрашивал - где используется.
Но читая статьи зумеров для зумеров, я подозреваю, что они-то жаждут это использовать везде.
node.js + mongodb = 33 млн. в выдаче гугла.
>крудоговна
Не устаю проигрывать с непроходящей стадии отрицания у анонов.
"крудоговно" это то, на чем работает абсолютно все.
Это как свысока рассуждать о "дыханиеговне" и прочем обмене веществ.
Мол, я весь в эмпиреях витаю, я выше всего этого.
Аноны памагите плисс!!!
1 Выведите количество значений Customers в каждой
стране.
SELECT (CustomerID),
Country
FROM Customers
;
2 Выведите количество покупателей в каждом городе,
выравнивая по возрастанию их количества
SELECT (CustomerID),
Country
FROM Customers
ORDER BY ;
Group by а помощь. Таблицы из нортвинда.
А что не так? Все лютое говно как раз в селектах.
nedb так и делает, в общем-то.
ругается на синтаксическую ошибку в месте вызова функции, которая возвращает селект. если вместо вызова функции вставить целиком селект, то все работает. чому так?
скобки вокруг EXISTS поставил от отчания, без них такую же ошибку выдает
Да, тогда все ок. Действуй, сестра!
exists select * from select_time_intersection
чо, в гугле забанили, что ли?
или лень почитать, что означает returns table и как с ей жить?
Ты должен благодарить Аллаха за то что направил твой разум, а не кефира
И когда я туда попытался занести строку из 11 символов, мне выдало ошибку. ERROR 1406 (22001): Data too long for column
Я понимаю, если бы это был char(10), но это var ебать его в сраку char, он должон изменяться! Почему так?
чтоб оно изменилось 10 не должно быть. Десяткой ты задаешь фиксированную длину, схуяли оно должно меняться?
10 это максимум, если у тебя меньше, оно меньеш выделит памяти, а если больше, то ты пойдёшь нахуй.
Почему тупые вопросы у тебя, а далбаёбы мы?
Если матчи парные можно сделать две таблицы с победителями и с проигравшими, или сделать две таблицы Матч и Детали матча, к которой можно будет обратится если нужны подробности.
Детали матча это уже третья таблица. Там будет много уникальных полей для каждого игрока в данном матче. А насчет двух таблиц с победителями и проигравшими, как это упрощает менеджмет бд? Это же вместо 1 таблицы с 10 столбцами - 2 таблицы с 5 столбцами каждая. Если я правильно понял.
Ну тут зависит от такого насколько тебе подробные нужны результаты, можно просто сделать графу ПОБЕДИТЕЛЬ в главной таблице
Не, подробные данные нужны для всех игроков, просто, когда много однотипных столбцов, хочется это как-то упростить. Если я этого анона >>15622 правильно понял, то так, наверное, и сделаю. Эта таблица >>15632 просто будет продолжена на 50+ столбцов, которые тоже бы, наверное, стоило как-то распределить, но и разрастаться таблицами тоже не хочется. К тому же, данные там почти уникальные.
Так, да.
Потом у тебя случится замена, и вместо 10-ти игроков в матче будет 11.
А потом кого-нибудь удалят до стартового свистка и будет 9.
Можно, конечно, не делать суррогатный ключ, а сразу захерачить композитный на ид_матч и ид_плейер.
Это как удобнее. Про отдельный ПК я на всякий случай упомянул.
Бамп вопросу, хули отмалчиваетесь?
Что за конкаренси-шизик? Я не в курсе, первый раз в треде, объясните пожалуйста.
> Но мне (да и тебе, уверен тоже) почти никогда не нужен ВЕСЬ объект Юзер.
> Что, если тебе надо взять просто ФИО и дату рождения?
> А что если только ПОСЛЕДНИЙ по дате сертификат?
> А что, если тебе надо взять Юзеров, у которых есть такие же сертификаты как у Пупкина?
GraphQL
но тебе из них нужны только фамилии
а ты все объекты будешь подтягивать
короче, я так пока и не понял этого дроча
В офисе сначала поработай, а потом уж лезь в удалёнку.
Да иди ты нахуй. Почему мне кажется скл запросы и иже с ними самой сложной темой в погромиравании, завидую тебе пиздец...
Алсо, это я криворучка или консоль у Open Server не очень?
мимо делаю лабы
1. что значит "занимают места в БД"?
2. "они действительно меньше места занимают" - меньше, чем что?
>>16246
Блядь, опять ебаные связи.
Анон вообще не понимает, что зачем нужно, ты ему пудришь мозги какими-то связями.
Пусть R1 и R2 — две переменные отношения, не обязательно различные. Внешним ключом FK в R2 является подмножество атрибутов переменной R2 такое, что выполняются следующие требования:
В переменной отношения R1 имеется потенциальный ключ CK такой, что FK и CK совпадают с точностью до переименования атрибутов (то есть переименованием некоторого подмножества атрибутов FK можно получить такое подмножество атрибутов FK’, что FK’ и CK совпадают как по именами, так и по типам атрибутов).
В любой момент времени каждое значение FK в текущем значении R2 идентично значению CK в некотором кортеже в текущем значении R1. Иными словами, в каждый момент времени множество всех значений FK в R2 является (нестрогим) подмножеством значений CK в R1.
При этом для данного конкретного внешнего ключа FK → CK отношение R1, содержащее потенциальный ключ, называют главным, целевым, или родительским отношением, а отношение R2, содержащее внешний ключ, называют подчинённым, или дочерним отношением.
Охуенная связь, ага
Любая БД занимает место на носителе информации. БД хранит свои заголовки для интерпретации СУБД, названия таблиц, названия полей, сами значения полей. Размер значений зависит от типа данных, но помимо обычных полей, есть свойство полей - внешний ключ. Из того, что прочитал, так это то, что они позволяют искать данные в БД быстрее, а про занимаемое ими место ни слова. Ибо мне представляется, что раз они используются в качестве индексов, то и повторное их использование в таблицах по факту не должно занимать никакого места. Т.е. это примерно, как указатели в c/c++. Можно создать тысячи указателей на один объект, но при этом память выделяться для каждого указателя под размер этого объекта не будет. Вот я и хочу понять: так ли это?
Т.е. если у меня есть таблица peoples (id, name, country_id), где country_id - внешний ключ к полю id таблицы countries (id, name), то при наличии 100 записей в этом поле фактически будет выделено место только под размер таблицы countries, где всего может быть только 5 стран. А country_id будет только указателем. Как-то так...
Тебе нужно гуглить реализацию по конкретной базе.
Сильно сомневаюсь, что есть базы с реализацией fk через ссылки. Как минимум это выльется в массовый апдейт при удалении fk.
Fk относится к обьектам типа constraint, в oracle по крайней мере.
То есть по факту, это свод ограничений, проверок, которые срабатывают при добавлении/изменении значений в поле, на которое наложен constraint.
В случае FK в качестве вспомогательной структуры, для поддержи constraint используется уникальный индекс таблицы, на! котрую ссылается поле с FK.
То есть сам FK не создает доп структур с данными для своего функционирования.
Однако в поле с FK, хранятся полноценные данные, а не ссылки на данные из другой таблици. Просто при вставке нового значения в поле, дергается индекс таблицы на котрую ссылается поле, и производится проверка, есть ли там такое значение.
По поводу ускорения поиска интересный вопрос, но насколько я знаю, сам по себе constraint не дает выйгрышей по производительности и индекс не создает. (Not null может давать, с той точки зрения, что будут строится более оптимальные планы, для некоторых запросов, но сейчас не об этом)
Все вышесказанное относится к бд oracle
А. Понятно.
Ты не совсем понимаешь, зачем нужны ФК.
Экономить место на диске - их последняя задача.
Их главная задача не дать тебе насрать в базу.
В твоем примере - не дать тебе написать гИрмания там, где должна бы быть гЕрмания.
Выносить повторяющиеся данные так, чтобы они встречались в своей полноте лишь один раз - опять же не для того, чтобы сэкономить место на диске. Читай про нормальные формы.
Не злой.
Это типичная ошибка начинающих - считать, что ФК дает какую-то связь.
Это приводит ко многим недопониманиям и недоумениям. Я сам через это проходил.
Поэтому, когда непонимающему человеку начинают рассказывать про "связь", я всегда одергиваю.
Представь, что у тебя есть поле с типом char(1).
Сколько места в записи оно займет?
Теперь представь, что значения из этого поля ты вынес в отдельную таблицу. И сделал ФК на эту таблицу.
Очевидно, что запись будет занимать больше места. Ссылка просто тупо длиннее, чем char(1).
Зато, этим символом ты кодируешь пол (F/M), то используя ФК ты не обосрешься, вставив в запись любой другой символ. ФК нужны именно для этого.
>Сильно сомневаюсь, что есть базы с реализацией fk через ссылки. Как минимум это выльется в массовый апдейт при удалении fk.
Ну, не обязательно конкретно через ссылки средствами низкоуровневых языков. Может там свои какие-то ухищрения есть под капотом, хер его знает...
>Просто при вставке нового значения в поле, дергается индекс таблицы на котрую ссылается поле, и производится проверка, есть ли там такое значение.
Если это действительно так, то все равно есть шанс, что этот индекс окажется гораздо легче дублирования данных.
>>16322
>Читай про нормальные формы.
Хорошо, почитаю.
>>16329
Ну, насчет char(1)-то и так понятно. Конечно, не всегда есть смысл использовать ссылки, чьи метаданные весят больше значений на которые они ссылаются, если необходимо в первую очередь сэкономить место.
Меня просто интересует вопрос: как лучше организовывать таблицы в тех или иных случаях, чтобы БД в итоге не весила в 5 раз больше, когда могла весить в 5 раз меньше и при этом оставаться удобной в использовании.
Попробую привести пример того, чего я хочу понять о построении БД. Это касается "вложенных" данных, т.е. когда "что-то" может содержать в себе десяток "чего-то", а то в свою очередь сотню "другого". И получается такая ситуация, например:
Пусть есть таблицы
1. Таблица "производители автомобилей (id, name)", id - PK;
2. Таблица "филиалы производителей (id, id_произ_авто, name)", id - PK, id_произ_авто - FK;
3. Таблица "автомобили (id, id_произ_авто, id_филиал, name)", id - PK, id_произ_авто - FK, id_филиал - FK.
Т.е. есть производитель авто (ferrari), у этого производителя есть много своих салонов для продажи (филиалы), в каждом филиале есть N моделей. Теперь заполним данными эти таблицы:
1. Производители автомобилей
id(1) name(ferrari) 2
id(2) name(nissan)
id(3) name(lexus)
2. Филиалы производителей
id(10) id_произ_авто(1) name(ferrari shop 1)
id(11) id_произ_авто(1) name(ferrari shop 2)
id(12) id_произ_авто(1) name(ferrari shop 3) 12
id(13) id_произ_авто(1) name(ferrari shop 4)
id(14) id_произ_авто(2) name(nissan shop 1)
id(15) id_произ_авто(2) name(nissan shop 2)
id(16) id_произ_авто(3) name(lexus shop 1)
id(17) id_произ_авто(3) name(lexus shop 2)
3. Автомобили
id(100) id_произ_авто(1) id_филиал(10) name(ferrari auto 1)
id(101) id_произ_авто(1) id_филиал(10) name(ferrari auto 2)
id(102) id_произ_авто(1) id_филиал(10) name(ferrari auto 3)
id(103) id_произ_авто(1) id_филиал(10) name(ferrari auto 7)
id(104) id_произ_авто(1) id_филиал(11) name(ferrari auto 1)
id(105) id_произ_авто(1) id_филиал(11) name(ferrari auto 3)
id(106) id_произ_авто(1) id_филиал(12) name(ferrari auto 3)
id(107) id_произ_авто(1) id_филиал(12) name(ferrari auto 5)
id(108) id_произ_авто(1) id_филиал(13) name(ferrari auto 8)
... и т.д.
Из-за подобной структуры, если я правильно понял, с каждой последующей таблицей размер БД будет разрастаться с геометрической прогрессией. И получаем, что только для производителя (ferrari) будет будет отведено 50 байт (представим, что все поля во всех таблицах занимают по 1 байт каждое). Но! Если бы мы отказались от 3 таблицы "автомобили" и вместо нее расширили бы 2 таблицу "филиалы", добавив 4 поля: model_1, model_2, model_3, model_4 (я выбрал 4 по наибольшему ассортименту среди всех филиалов), то итоговый размер для информации о производителе (ferrari) был бы уже не 50 байт, а 42 байта. Это еще при том условии, что 7 полей в этой таблице для (ferrari) не будет заполнено, но я не знаю: занимают ли незаполненные поля какое-то мест оили нет.
Конечно, второй подход для данного примера крайне херовый, ибо кол-во автомобилей будет всегда меняться и для этого придется либо добавлять новые поля, либо брать сразу с запасом. Но факт остается фактом: в одном случае - БД практичная, но занимает больше места; во втором - БД не практична, занимает меньше веса.
Напомню еще раз суть вопроса: как понимать, когда и какой из этих случаев лучше? Или я вовсе не так представляю хранение в БД?
>Сильно сомневаюсь, что есть базы с реализацией fk через ссылки. Как минимум это выльется в массовый апдейт при удалении fk.
Ну, не обязательно конкретно через ссылки средствами низкоуровневых языков. Может там свои какие-то ухищрения есть под капотом, хер его знает...
>Просто при вставке нового значения в поле, дергается индекс таблицы на котрую ссылается поле, и производится проверка, есть ли там такое значение.
Если это действительно так, то все равно есть шанс, что этот индекс окажется гораздо легче дублирования данных.
>>16322
>Читай про нормальные формы.
Хорошо, почитаю.
>>16329
Ну, насчет char(1)-то и так понятно. Конечно, не всегда есть смысл использовать ссылки, чьи метаданные весят больше значений на которые они ссылаются, если необходимо в первую очередь сэкономить место.
Меня просто интересует вопрос: как лучше организовывать таблицы в тех или иных случаях, чтобы БД в итоге не весила в 5 раз больше, когда могла весить в 5 раз меньше и при этом оставаться удобной в использовании.
Попробую привести пример того, чего я хочу понять о построении БД. Это касается "вложенных" данных, т.е. когда "что-то" может содержать в себе десяток "чего-то", а то в свою очередь сотню "другого". И получается такая ситуация, например:
Пусть есть таблицы
1. Таблица "производители автомобилей (id, name)", id - PK;
2. Таблица "филиалы производителей (id, id_произ_авто, name)", id - PK, id_произ_авто - FK;
3. Таблица "автомобили (id, id_произ_авто, id_филиал, name)", id - PK, id_произ_авто - FK, id_филиал - FK.
Т.е. есть производитель авто (ferrari), у этого производителя есть много своих салонов для продажи (филиалы), в каждом филиале есть N моделей. Теперь заполним данными эти таблицы:
1. Производители автомобилей
id(1) name(ferrari) 2
id(2) name(nissan)
id(3) name(lexus)
2. Филиалы производителей
id(10) id_произ_авто(1) name(ferrari shop 1)
id(11) id_произ_авто(1) name(ferrari shop 2)
id(12) id_произ_авто(1) name(ferrari shop 3) 12
id(13) id_произ_авто(1) name(ferrari shop 4)
id(14) id_произ_авто(2) name(nissan shop 1)
id(15) id_произ_авто(2) name(nissan shop 2)
id(16) id_произ_авто(3) name(lexus shop 1)
id(17) id_произ_авто(3) name(lexus shop 2)
3. Автомобили
id(100) id_произ_авто(1) id_филиал(10) name(ferrari auto 1)
id(101) id_произ_авто(1) id_филиал(10) name(ferrari auto 2)
id(102) id_произ_авто(1) id_филиал(10) name(ferrari auto 3)
id(103) id_произ_авто(1) id_филиал(10) name(ferrari auto 7)
id(104) id_произ_авто(1) id_филиал(11) name(ferrari auto 1)
id(105) id_произ_авто(1) id_филиал(11) name(ferrari auto 3)
id(106) id_произ_авто(1) id_филиал(12) name(ferrari auto 3)
id(107) id_произ_авто(1) id_филиал(12) name(ferrari auto 5)
id(108) id_произ_авто(1) id_филиал(13) name(ferrari auto 8)
... и т.д.
Из-за подобной структуры, если я правильно понял, с каждой последующей таблицей размер БД будет разрастаться с геометрической прогрессией. И получаем, что только для производителя (ferrari) будет будет отведено 50 байт (представим, что все поля во всех таблицах занимают по 1 байт каждое). Но! Если бы мы отказались от 3 таблицы "автомобили" и вместо нее расширили бы 2 таблицу "филиалы", добавив 4 поля: model_1, model_2, model_3, model_4 (я выбрал 4 по наибольшему ассортименту среди всех филиалов), то итоговый размер для информации о производителе (ferrari) был бы уже не 50 байт, а 42 байта. Это еще при том условии, что 7 полей в этой таблице для (ferrari) не будет заполнено, но я не знаю: занимают ли незаполненные поля какое-то мест оили нет.
Конечно, второй подход для данного примера крайне херовый, ибо кол-во автомобилей будет всегда меняться и для этого придется либо добавлять новые поля, либо брать сразу с запасом. Но факт остается фактом: в одном случае - БД практичная, но занимает больше места; во втором - БД не практична, занимает меньше веса.
Напомню еще раз суть вопроса: как понимать, когда и какой из этих случаев лучше? Или я вовсе не так представляю хранение в БД?
>id(1) name(ferrari) 2
id(1) name(ferrari)
>id(12) id_произ_авто(1) name(ferrari shop 3) 12
id(12) id_произ_авто(1) name(ferrari shop 3)
фикс
Уточню, есть база с которой работаем, и где нужно все БЫСТРО, она и пухнет, а есть всякие хранилища данных, в которых хранят и БЫСТРО им не нужно, во втором случае собирают все обратно в огромные таблицы, т.е. денормализуют. Все зависит от задачи.
Нет. На данный момент ее еще даже нету. Я не пекусь, просто, если есть возможность уменьшить потенциальный размер БД в 5/10/20... раз, то почему бы и нет? Я не отношусь к ентерпрайзу какому-то. Просто пишу сервер на js для себя, который работал бы с этой БД для своих нужд. Если я могу выделить 5-10 гб для нее на своем диске, то как с этим будут обстоять дела с бесплатными хостингами - хз. У них наверняка будет ограничение на какие-нибудь 500мб.
Как минимум у тебя лишняя ссылка на производителя автомобилей в третьей таблице. Ты ее можешь получить из второй таблицы. Это в нормальных формах описано, как избежать дублирования связок.
Тот оверхед, который ты получаешь при "дублировании" ключевых колонок, в реальных базах не значителен, по отношеню ко всему объему данных. Им пренебрегают. Правда не очень понял, где ты геометрическую прогрессию нашел.
Данные хранятся в таблицах, и то - что ты называешь "дублированием" не решается с помощью ссылок на данные из другой таблицы. "Как-то там под капотом" , за счет fk. Fk - это ограничение, констрэйнт, его цель ограничивать допустимый набор данных.
Откуда вы лезете пидоры, даже на ебнном мейлаче умудряетесь обьянсять как дед-препод в пту. Унтермеши косноязычные.
>Правда не очень понял, где ты геометрическую прогрессию нашел.
Я не проводил расчетов никаких, просто прикинул примерно график роста размера БД. Одно ясно точно: график будет с каждой таблицей все круче-и-круче.
>Ты ее можешь получить из второй таблицы.
С помощью вложенного запроса? Опять же, не знаю как на такое СУБД реагирует. Если это сказывается сильно на производительности, то может и есть смысл, чтобы дублировать ссылки?
>Тот оверхед, который ты получаешь при "дублировании" ключевых колонок, в реальных базах не значителен
В том-то и проблема, что все зависит от вида данных. Если это сотня матрешек, то в таких случаях, я думаю, основной объем БД и будут составлять эти PK и FK. Но сейчас думаю: если в каждой последующей таблице будет только один FK, с помощью которого можно обратиться к любой из предыдущих таблиц, то, наверное, эти FK действительно не так значительны...
Покури про нормализацию, вот этот неплохо рассказывает
https://www.youtube.com/watch?v=1GWx5CZdSCg
> как лучше организовывать таблицы в тех или иных случаях, чтобы БД в итоге не весила в 5 раз больше
Забудь об этом.
Вообще забудь.
БД (по крайней мере, реляционная) это не про размер.
А про целостность и доступных данных.
Внешние ключи именно про это.
Прости, малыш.
Ты пришел в тред про БД, а не про пуляние козявками.
Тебе сюда: https://2ch.hk/pr/res/1511559.html (М)
Нет, ты просто уебок безмозглый, на трубе есть люди которые ВНЕЗАПНО могут рассказать доступно, в отличии от тебя. Значит дело не в бабине.
Всем похуй тащемта, в продакшен тебя не кто не пустить без опыта, да ещё на удаленку, так что можешь пока разрабатывать только анус.
Пидоры блядь ебаные как вы вообще в своих ебаных запросах разбираетесь если даже про самый простейший мыслимый запрос ничего сказать не можете?
Ахахахахаха
Изучает программирование по видосикам на ютубе
Не умеет в текст
Не понимает, что италиком специально выделена цитата
>ррряяяяя, вы все мудаки, один я умный, мне на трубе объяснили
Бля, спасибо, анончик, пиши еще.
Что бы мы делали без третьеклассников в этом треде?
Не, я как раз тупой, но ты ещё ещё тупее, потому-что тужишься что-то объяснить, но не можешь в объяснение.
Ахахахаха.
Зумер влез в чужой разговор, ни хуя не понял, закатил истерику.
Классика.
Если бы я собирался что-либо объяснять тебе, конечно, я бы объяснял на примере пчелок и бабочек. Но я не твой учитель информатики, мне на тебя насрать.
Я отвечал конкретному анону, который все, что ему надо, понял.
Когда ты вырастешь, может быть, ты научишься понимать определения из учебников. А пока, иди на хуй, давай, до свидания.
"системное программирование" это маркер уебана
никто не знает, что это такое, но каждый уебан думает, что это что-то невъебенно крутое
с другой стороны, нет ничего необычайного в том, что кто-то, имеющий опыт ООП программирования, не сразу въезжает в функциональное, или в реляционную алгебру.
Это вещи идущие параллельными курсами, хули ты бугуртишь-то?
>Токсичная
Зумер хотел услышать, что ему незамедлительно сделают приятно.
А когда не услышал, подорвался жопой.
И высрал единственное слово, которое выучил за последние два года.
Ох блять плесенью потянуло, сьеби в свой совок пенсия, по твоим книжкам 70 года выпуска с зашоренными определениями уже никто не учится. Читни что-нибудь свежеее, и удивишься, что люди ВНЕЗАПНО могут доступно объяснять сложные моменты, а не просто срать цитатами из большой советской энцклопедии, и копипастом высирать матан.
Смузихлеб, почему сложно и непонятно тебе, а виноваты в этом окружающие? Слышал что-нибудь про такие слова как полнота и однозначность трактовки?
Большинство явлений можно описать несколькими способами, и очевидно что какой-то из способов описания будет лучше, а какой-то хуже. Совки не понимают что высирать термины, не всегда оптимальный путь объяснения не ну а чо вон же там в большой совесткой написано, значит это единственный верный способ донести.
Ты говоришь, что знаешь ассемблер. Человек, который знает ассемблер - должен знать архитектуру процессоров устройств, под которые пишет код. Я это предполагал в тебе. А это значит, что въехать в архитектуру какой-то субд на ее прикладном уровне - как обоссать 2 пальца такому гику. Я уже молчу, что ты, видимо, еще и поиском пользоваться не умеешь. Вот такое парадоксальное мнение о себе ты у меня вызвал, потому и не понял тебя.
Какое имеет значение "среди кого"? Ты жопой читаешь? Или хочешь лишний раз выплеснуть своего токсичного омежку наружу? Уебывай давай, мимокрок...
Ты в принципе рассуждаешь в верном ключе.
Например про подзапросы, конечно это будет дольше, чем просто прочесть из таблицы, будет лишний запрос по индексу.
Важным моментом является то, что ты должен сам определить, в зависимости от задачи, что является приоритетным: место, производительность, потребление ресурсов.
Нет серебрянной пули, которая решит все проблемы, и единственно верный вариант для всех задач связанных с БД
Но чтобы иметь возможность регулировать все эти вещи, тебе нужно знать устройство бд. Рекомендую документацию oracle по query optimization, как минимум. Там описано про способы доступа к данным: по индексу, сканы, про джоины и их типы. Когда этого будет недостаточно, придется лезть в исходники базы. Я использовал postgres, у него открытый исходный код на С.
После нормализации, тебе стоит почитать про денормализацию, и то для чего ее применяют)
Ахахахаха
Школьник никак не успокоится
Да всем похуй, что ты ни хуя не понял
Одной макакой больше, одной меньше, всем насрать
Тебе никто тут ничего не пытается объяснить
Просто забавно наблюдать за твоими прыжками и ужимками
Продолжай
>Человек, который знает ассемблер - должен
Смотрите, двачер рассказывает, кто ему что должен
Пиздец, опять каникулы, что ли?
Да не рвись ты так пенсия, тебе внуков надо нянчить, а не на желтом сайте сидеть.
А нахуя, если и так платят?
Ахахахахаха
ты ни хуя не понимаешь, что в треде написано, а рвусь я
пиздец, у школьников говна в череп налито.
Тебя-то видно, как нянчили, бггг
>строить БД так чтобы можно было отследить изменения во времени не умеют
чо-чо?
изменения чего во времени?
давай послушаем, как ты версионируешь ERD, может, чего почерпну от умного человека
Не раскачивай тут лодку, кто-то должен наговнокодить, чтобы за исправление потом хорошо заплатили
> изменения чего во времени?
Ну пропустил кусок про изменение значения какого-то поля. Условно, на простом примере, есть цена на товар. Вот есть тебя есть таблица "Товары", там есть баклажан, сегодня рубль стоит, завтра два, через год три, для анализа может быть полезно иметь информацию сколько стоил это баклажан 2 года назад, может быть мы заметим какую-то закономерность, скажем, что при увеличении цены на баклажаны люди начинают чаще покупать кабачки, а может быть мы поймем что количество проданых баклажанов только от времени года зависит, а может быть это вообще случайная величина, кто знает.
> давай послушаем, как ты версионируешь ERD, может, чего почерпну от умного человека
Ты будто меня на чем-то подловить хочешь.
Если ты про проектирование такой вот фигни, то тут довольно подробно описано как такое делается ручками с примерами кода http://www2.cs.arizona.edu/~rts/tdbbook.pdf
Если про готовые, то с MS SQL Server16 умеет из коробки https://docs.microsoft.com/ru-ru/sql/relational-databases/tables/temporal-tables?view=sql-server-ver15
Не понял, объясни...
Потому-что вопрос ебланский.
Что в твоем понимании атомарная операция? Вопрос показывает полное не понимание принципов ACID.
Что тебя удивляет в том, что нужно перечитавать таблицу? Как тебе написали вышe, это зависит от реализации.
И во многих базах count() по таблице приведет к перечитыванию таблицы, что тут удивительного?
В том отрывке что ты привел используется древнючая версия PG, и там описан нюанс, который решается операцией vacuum, из-за модели поддержания консистентности базы. И к самом count() имеет слабое отношение. И может вылезти на любом запросе.
Все эти вещи очевидны, если имеешь хоть малейшее представление, о внутреннем устройстве базы.
Нихуя не разбираются, ебланские вопросы задают, еще и вякают поьом что-то
Там два вопроса.
Ни один не является вопросом про запрос.
Один - вопрос про реализации в разных БД.
Второй - какая-то хуйня на суржике, которую кроме тебя никто не понимает.
Как результат - никому на хуй не сдалось на них отвечать.
>Что в твоем понимании атомарная операция? Вопрос показывает полное не понимание принципов ACID.
То что у одного слова могут быть разные значения в твою тупорылую бошку не лезет? Ясно что подразумевалось не атомарное из ACID, а то что в нормальной реализации количество строк должно храниться в одной переменно и из нее браться, а если есть другие реализации это просто запредельное ебланство. Т.е. я просто хочу узнать сколько строк у меня в таблице и все виснет нахуй / задумывается на несколько минут - вот это заебца придумали. Неужели есть ебнутые думающие что это не супер хуево?
At GitHub we do not use foreign keys, ever, anywhere.
https://github.com/github/gh-ost/issues/331#issuecomment-266027731
Так возьми и сделай нормальную реализацию, хули ты пиздаболишь тут, еблана кусок. Возьми и напиши свою реляционку, с правильной реализацией, где количество строк хранится в переменной, раз все такие мудаки тупые и до тебя гения не додумались. Так ты усрешься блять.
Дибилоид тупой, я еще угадывать должен, что ты подразумевал из множества значений? Сука, мудак, не можешь вопрос сформулировать нормально, зато критик архитектур и решений нихуевый.
И еще, додик-недоучка, операция чтения переменной, может быть не атомарной, в зависимости от разрядности архитектуры и размера меременной.
Лучше свою энергию на обучение направляй, а не на дешевые выебоны
Так а в чем проблема? Считаешь количество строк сам и записываешь куда тебе надо (тоже сам)
Так ты не привыкай, а учись нормально формулировать свои глупые мысли.
Ахахаха
mysql
Говно рассказывает на дваче про говно говна, приправляю свои шизоидными высерками ебанутой лексикой, которую понимают только его одноклассники.
Классика!
>рррряяяяя, я использую слова не так, как все, а вы все мудаки, раз не можете отгадать!
Чо-то ни хуя не удивлен, что у таких ебланов проблемы с сиквелом.
столкнулся блять с тем что в этой ебанине сукаблять не отображается демонстрационные база HR, для обучения. Не могу блять разобраться интернеты эти ваши, какую то ебанину выдают. Как я понимаю по дефолту они заблочены.
Проделал: "Кнопка Пуск –> Все программы -> Oracle Database 11g Express Edition –> Run SQL Command Line. Подключитесь как пользователь SYSTEM:
Напечатайте connect Введите имя для подключения: SYSTEM Введите пароль: <пароль-для-SYSTEM >
После успешного подключения (сообщения connected) введите следующий SQL-оператор:
SQL> ALTER USER HR ACCOUNT UNLOCK;
Введите пароль для пользователя HR с помощью следующего SQL-оператора:
SQL> ALTER USER HR IDENTIFIED BY HR;
Для выхода из редактора введите SQL-оператор:
SQL> EXIT"
Захожу sql developer и пишу:
"select from HR.employees;"
по итогу нихуя:
ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
Cause:
*Action:
Error at Line: 1 Column: 18
Так у тебя нет такой базы, откуда ей взяться? Её сначало нужно залить в бд скриптом, или прикрептить через оснатску.
Не лезь блядь дибил сука ебанный
Тебе русским языком напиали, что речь идет про Оракл, а не про говномускул.
Хули ты лезешь с советами, если даже вопрос прочесть не можешь?
Зачем ты приходишь на двач, если все подробно расписано у оракла?
https://docs.oracle.com/database/121/COMSC/installation.htm#COMSC001
>говно говна
В свитеромирке ничего другого и нет. Или кто то серьезно считает что разработчики с гитхаба тупее местной пидорвы и не взвесили плюсы и минусы делая выбор.
Так же то что любое говно слепленное на коленке вроде монги может ворваться в этот свитеромирок и захватить значимую долю - какбы весьма красноречиво говорит о многом.
>>17272
>сиквелом
Так говорят только ебнутые.
Аргумент что так когда то лет пятьдесят он на самом деле назывался и полоумные деды за ебаных пятьдесят лет никак не могут перестроиться и упорно делают вид что так правильно - аргумент ебнутых.
Кстати, отлично демонстрирует уровень умственных способностей свитероблядей.
Ты ответы через генератор случайных чисел пишешь?
Хай двачата, помогите плиз с моим траблом:
Столкнулся с тем, что сайт невозможно редактировать. Кидает страшную ошибку "Software error:...". Оказалось база данных сайта переполнена. С помощью phpmyadmin я оптимизировал таблицы, но результата это не дало. Я полный чайник, искал инфу у гугла, но толковых мануалов не нашёл. Есть две таблицы на 1.5 и 1.3 гига: phpbb3_search_wordmatch и phpbb3_posts. Я нагуглил что первый это что-то связанное с индексом поиска, а второе сообщение на сайте. Как их почистить, есть мануалы?
под админа (если я правильно понимаю)
При установке, прикл 1 попросил придумать пароль. Потом пошел в прикл 2. Там вылазит прикл 3 вылазит окно, туда соответственно SYSTEM и пароль что вводил на прикл 1 при установке. Потом прикл 4. Там все сделал, ввел все тот же пароль при установке (чтоб мозги не ебать) и по этому всему подрубался через sql developer
дебил бляд загугли нахуй
вот тут получилось а через девелепер я хз
зайди, блядь, юзером HR и перестань нам ебать мозги
в оракле, для нормальных (не сис и систем) юзеров, имя схемы по умолчанию == имени пользователя
чтобы, зайдя одним юзером, смотреть напрямую на другую схему надо сделать
ALTER SESSION SET CURRENT_SCHEMA = <schema name>
CONNECT scott
ALTER SESSION SET CURRENT_SCHEMA = joe;
SELECT * FROM emp;
я что, ебу, что ли, есть ли гранты у system на твой ебучий hr?
раз ты заходишь системом, посмотрел бы сразу, что у тебя там в схеме hr
может, там и впрямь, ни одной таблицы, а пустая схема
да все блять, через Toad for Oracle получилось, не ебу почему через ссаный девелепер не вышло, но собственно похуй уже на него
но за ответ спасибо
Bump
Не надо чистить эти таблицы. Ощущение, что они нужндля нормальной работы.
Посмотри лучше, сколько места занимает transaction log.
>phpbb3_posts
>1.3гига
Ебааааааааать. Это сколько вы там на форуме напиздели? 1.3 гига текста? Это же опизденеть как дохуя.
Чувак, ты в каком-нибудь ебучим си-треде так вопрос задай, очередь к твоей матери метров на 10 выстроится.
>кококо, почему вместо того, чтобы пересчитать число оно пересчитывает число?
Ты какой-то ебанутый
бамперной
У нее просто owerflow уже
смотрел примеры CRUD в сравнении с муськой и монгой, на SQL показалось логичнее, чем на json
Да я бы с радостью в csv файлы писал, но требуют, суки.
Азы скл и дальше носкл
Сап.
Входные данные: Хороший SQL, нормальный PL/SQL, знаю прилично теорию по проектированию/ нормализации и все вот эти реляционные вещи ( практический опыт тоже есть) Работа тоже с этим связана.
Заканчиваю вузик по Информационной безопасности, хотелось бы как можно больше связать его с БД, но нет ни одного препода на кафедре, кто мог бы помочь с темой, собсна возьмут только если поставлю конкретную тему сам
На ум приходит только разработка-проектирование бд и системы защиты информации и дать права/роли юзерам и зашифровать айдишники, но это больше на курсач максимум тянет, чем на ВКР.
Короч, ПОКИДАЙТЕ ИДЕЙ ДЛЯ ВКР ПО БД + ИБ
Или может почитать чего интересного по этой теме
Ты про OlAP ? и чем эта модель больше связана с ИБ чем OLTP?
Мне бы скорее что то по админству СУБД
А тебе прям непременно с ИБ нужно? Ну хз тогда что можно высрать по ИБ, шифрование, политика пользователей+прокси, огнестена, на курсовую не тянет как по мне. Хули там админить, то хуяк, пиздык и в продакшен....Разве что запилить отдельные таблицы аудита и сделать тригеры, ну что-то это всё развлечения уровня ебли осла с табуретки.
Вуз в топе или нет?
На sql-ex просто дрочить учебник и решать задачки?
NoSQL
Я вот этого смотрю, хорошо объясняет
https://youtu.be/cRoTc8ONWSQ
Там еще один курс есть. Sqlex сделано совсем уж из говна и палок, у меня глаза от него вытекают.
Я про то что это вообще такое и как одну таблицу к другой прихуячить
Есть желание замутить что типо бд для хранения изображений/видео/аудио для мамашиного обучения с ETL, но не знаю как сформулировать тему, какие актуальные таски, проблемы, есть в этой области, которые можно решить. Можете что-нибудь порекомендовать? Какую-нибудь статью, которая, к примеру, рассматривает интересные задачи по компьютерному зрению или речевому распознаванию?
Не могу понять, как смоделировать таблицы с ключами для лекарств и их аналогов, которые являются одним и тем же полем. Пользователю по 1 лекарству можно смотреть множество аналогов.
Твою конечно. Всем тредом её обучаем продвинутой техники горлового минета.
Эм, а в чём трабл?
Либо если таблица небольшая, просто все в одну пихать, а потом фильтровать. Либо составной ключ.
а нельзя бахнуть одну таблицу для лекарств, просто всем добавить колонку "аналог", которое будет иметь запись ID лекарства в той же таблице, аналогом для которого является это лекарство?
мимо
Ребятки-котятки, есть вопрос. В общем, есть такая схема состоящая из 4 таблиц. У нас есть таблицы владельцев, абстрактных животных, котиков, собачек. Котики и собачки являются подмножеством животных, если смотреть в ооп, то они наследуются от класса животных. Так вот, собственно говоря вопрос, как на уровне бд ограничить у одного владельца котов одного цвета. Если бы в таблице cats был бы owner_id, то я просто бы сделал составной уникальный индекс из полей owner_id и color, но owner_id доступен только в связанной таблице animals. Как решить этот вопрос? Либо я говно у меня архитектура говно (если так, предложите что нибудь лучше), либо можно как то сделать составной индекс с полями из связанных таблиц, а я и не знаю?
База чужая, оптимизировать её нельзя.
Что посоветуете?
Что если цвета и породы вынести в отдельные таблицы, а потом сделать составной ключ, как советуют тут: https://stackoverflow.com/questions/5835978/how-to-properly-create-composite-primary-keys-mysql устроит такое решение?
ну все же может поздно, но стоит упомянуть что threads это отдельная таблица, привязанная к постуно не важно.
я нашел куда удобнее вариант чем то что ты написал, а именно select posts where in (select id from threads limit ?) -> сортировка на стороне сервера (не дб)
Дык в русской википедии есть статья про схему звезда. Или тебе не это нужно? Или там не понятно?
Хм, и правда есть, спс. Чуть подробней бы.
Что-что.
Попробовать воспользоваться orm, если fk все есть, и посмотреть через профайлер, какие запросы орм генерирует. Если калл, то ебашь сам руками.
Что ты подразумевешь под звездообразным джойном?
Такое даже не гуглится, блжад.
Что это?
Cross join?
Организация основной таблички типом «звезда», чтобы потом джойнить справочники только на нее?
Нету fk. Вообще нет ни одного. Хотя в таблицах есть поля типа table1_id которые по задумке автора ссылаются на примари ключ id таблицы table1, но самого ключа нет и создать его нельзя. Если я буду юзать orm, то это получается что мне всегда нужно будет аккуратно программировать хули там эта орм сохраняет и обновляет, чтобы база по пизде не пошла. Вот и думаю, может ну его, написать просто классы модели вручную и вручную закодить там загрузку и сохранение в базу.
Извини, не сразу дошло, что у тебя в названии препарата могут и аналоги быть
Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа.
Вывести: maker, type
Схема БД: http://www.sql-ex.ru/help/select13.php#db_1
http://www.sql-ex.ru/learn_exercises.php#answer_ref
Мой солюшн:
SELECT maker,type FROM Product
WHERE maker =(SELECT maker FROM Product
group by maker
HAVING COUNT (distinct type) =1
AND COUNT (model)>1
)
group by maker,type
ПОд ответ подгоняется, на проверочной базе фейлит.
За такое кривое форматирование, тебе нужно руки поломать, чтоб ты никогда больше не писал ничего.
Если у тебя нет fk, не совсем понимаю, как орм будет работать, если только ты там где-то в конфигураторе пропишешь это. entity Framework, например, так не умеет, насколько я знаю.
Да ты зайка)
Там может быть какой-нибудь NFS и из за этого оно будет тормозить.
Ни хуя не понял, но рад за тебя.
Мне нужно вывести запись второго типа то есть: чтобы там были параметры и 'lorefriendly' и 'big', а он выводит вообще все подряд, где встречаются это параметры. Как это можно реализовать при связи многие ко многим? Пытался через AND перечислять, так он никакие не выводит.
Заджойни по олдскулу и расставь скобки, как-то так.
select * from t1,t2,t3 where (t1.zalupa = t2.zalupa_id and t1.huita = t3.huita_id) and t1.tag in('tag1', 'tag2');
>Организация основной таблички типом «звезда», чтобы потом джойнить справочники только на нее?
Это.
Ну со звездой вроде по совету анона прочитал на вики, теперь не могу снежинку вдуплить. Если у звезды просто инерр джоин во все поля, то со снежинкой неясно, чем она отличается?
Мне, как знающему sql на пятерку, но так и не осилившему front, например, кажется, что нет.
О найс, спасибо
Привет. Не писал, только использовал logminer. Гуглится redo log dissecting, но статья старая.
Угу, нашел какую-то дедовскую статью для 9 версии, дай бог здоровья людям.
Заголовки файла и магические числа вроде совпали для 12. Правда под винду все. Сами данные тоже локализовал, и описание длинны полей. С текстом просто, а вот числа довольно интересно хрянятся, суммы чисел умноженых на десятки в квадрате. Не могу пока с заголовком записи разобраться, длину ее найти, целиком. Все руки не доходят
Как правильно сделать выборку за период по времени с Users.RegistrationDate по (Users.RegistrationDate + 1 год)?
С остальными параметрами проще, но вот к периоду даже не знаю, как подступиться..
Разобрался
Select
U.userid, Count (t.transactionid)
From users u, wallets w, walletsections ws, transactions t
Where
u.userid=w.userid and
w.walletid=ws.walletid and
ws.walletsectionid=t.walletsectionid and
to_date(t.creationdate,'dd.mm.yyyy') between to_date(u.registrationdate,'dd.mm.yyyy') and add_month(to_date(u.registrationdate,'dd.mm.yyyy'),12)-1 and
ws.currency='USD'
group by u.userid
having count(t.transactionid)>30
Спасибо, пупсик
SELECT Employee.Age, Employee.Name
FROM Employee
INNER JOIN ProductEmployee ON Employee.ID = ProductEmployee.ID
INNER JOIN Product ON ProductEmployee.ID = Product.ID
WHERE Employee.Age > 50
GROUP BY Employee.ID
HAVING (COUNT(Product.ID) >= 10);
добавить вывод ещё одного значения после сортировки, самого последнего по дате:
(SELECT Product.Name ORDER BY ProductEmployee.Date DESC LIMIT 1)
правильная схема
А куда и накого про вакуум спрашивали? Одно дело вопрос, что такое и для чего вакуум, а другое как работает. Да и тут могут бвть разные уровни детализации ответа. Для одного уровня достаточно доки, если подробнее, надо искать специализированные статьи или в исходники лезть. Боюсь по вопросам такого типа одного источника не найти, все нужно гуглить отдельно и иногда по исходникам
Да я просто разработчик и мне вообще непонятно, зачем мне знать про вакуум, если я не собеседуюсь на администратора баз данных. Я должен знать интерфейс базы данных и особенности работы с ней, чтобы эффективно её использовать, не более.
Ну если хайлод какой, то может быть полезно, хотя сам механизм работы все-таки непонятно для чего знать, в данном случае.
Ну это понятно. А какие популярные вопросы вообще есть про бд? У меня личный топ часто задаваемых вопросов (сеньор левел) - это что такое индекс, как он работает, как работает при сортировке, уровни изоляции и напишите какую-нибудь хуйню с тремя джоинами.
А самым сложным заданием было написать запрос, который из колонки, в которой хранятся числа (1,2,3,5,6,7,10) выведет промежутки ([1,3],[5,5],[6,7],[10,10]).
Знаю на W3C есть, но он вроде совсем для нубасов - так получить общее представление, хотелось бы что-нибудь посолиднее.
Не поле, а тэг.
По сути я так и думал делать табличку "Должности" и там одна из строк типа "Начальник отдела", но, в общем, спасибо. Хотя и нагуглил вариант, про который выше написал, но он мне не нравится.
Ну еще про типы джоинов, nested, merge, hash. Как работают, когда лучше использовать. Типы индесков.
Если по ораклу: хинты, redo/undo, direct path операции, методы доступа к данным (типы доступов по индексу, сканирования), партиционирование, тэйблспэсы, устройство памяти, pga, sga, локи.
Оптимизация в зависимости от типа базы, oltp или olap.
Postgres - тот же вакуум, но это скорее про то, каким образом acid поддерживается в базе. Как можно влиять на план выполнения без хинтов. По конкретно по пг больше вспомнить не могу.
По mpp, как работают бродкасты редистрибьюции. Какой ключ дистрибьюции лучше выбрать.
По sql не помню, давно уже не спрашивали. Доводилось строить план выполнения по продиктованному запросу.
Это конечно далеко не полный список
Он явно в курсе происходящего в движках бд, двачую этого ораклиста.
На уровне структуры у тебя получится так, что может быть много начальников. Чтобы этого избежать, надо в отделах сделать айдишник руководителя.
Пф, а ещё айдишник заместителя руководителя, заместителя заместителя, бухгалтера и всех прочих, кто может быть один, ага. Проще уж constraint'ом задать уникальность для тэга.
Ну ты спрашивал про руководителя.
Начальник всегда один у отдела.
А бухгалтеров и замов может быть сколько угодно.
В случае с плейсхолдерами мой запрос что то типо
select form posts where parent in ?, ? и так далее..
Под ? идет индекс треда, их всего 250
В случае с сабселектом там что то типо
select from posts, (select * from threads where board_id=? order by lasthit desc limit ?) as threads where posts.parent=threads.id || 2, 250
Итого: 350 всего/250 живых тредов , 700к всего/500к живых постов:
Плейсхолдеры: 4 секунды,
Сабселект: 14 секунд
Где я обосрался? Сами плейсхолдеры получаю тем, что написанно в сабселекте через другой запрос
>почему быстрее?
Открой план запроса же.
Второй запрос у тебя с САБСЕЛЕКТОМ написан просто ужасно, если что. Когда такое вижу, аж плохо становится.
На MS SQL точно оставаться не надо.
Еще определись с направлением. HighLoad это обычно очень большое количество мелких операций, которые требуется выполнять очень быстро.
Хранилища - это обычно грандиозная пиковая нагрузка, где оперируют большими объемами данных за раз. И там часто возникает вопрос отработает-не отработает и за какой период времени.
Сотвественно базы создаются и настраиваются несколько по разному для хайлода и хранилищ, и способы оптимизации различаются.
Bigdata и прочие hadoop-ы это идет обычно в связке с хранилищами(dwh) . Технологии отличаются от реляционок, хоть и чем-то похожи
Сейчас стараются строить хранилища по следующему принципу: на основе hadoop технологий как первичного слоя для хранения и превращения сырых данных в более менее подготовленные для загрузки в реляционки. В качестве реляционок стараются использовать MPP системы. GreenPlum хороший пример, есть и другие решения, Teradata например, Vertica помоему тоже MPP.
Про хайлоду не могу стазать по технологиям точно, там скорее всего помимо реляционок идет много работы с inmemory базами, где база по сути это гигантский кэш в оперативке, большая хэш-таблица. Но какой-нибудь oracle тоже не помешает, у них довольно хорошая дока, и можно подтянуть общие принципы и понимание работы реляционной бд изучая его. Postgres - у него открытые исходники и тоже довольно подробная документация.
По хранилищам это изучение MPP баз. Я бы выбрал GreenPlum - открытые исходники, подробная дока, сдедан на основе postgres. Ну и отдельным стеком решения на базе Hadoop. Там целый зоопарк, но довольно часто можно встретить связку hadoop - yarn - spark, ну и что нибудь из эмуляции БД для hadoop по типу hive. Понимание oracle или postgres впринципе и тут также очень пригодится
Спасибо за ответ, Анон
>На MS SQL точно оставаться не надо.
>GreenPlum хороший пример, есть и другие решения, Teradata например, Vertica помоему тоже MPP.
Почему на MS SQL лучше не оставаться? Только из за привязки по стеку Майкрософта? Вообще, у MS SQL вроде как есть SSAS, которые тоже позволяет работать с хранилищами, разве нет? Да и на HH почти во всех вакансиях, в которых упоминается DWH, требуют MS SQL, а тот же GreenPlum упоминается только в пяти вакансиях. Так в чём его преимущество?
> Понимание oracle или postgres в принципе и тут также очень пригодится
С постгрессом знаком не много, а oracke даже в глаза не видел. Думаешь, нормально продолжить погружаться в postgres вместо того, что бы начинать изучать oracle с нуля?
В общем, благодаря тебе у меня примерно сформировался стэк в голове, который мне нужно изучить:
1) hadoop - yarn - spark
2) postgres + GreenPlum
После этого можно идти стучаться на галеры или нужно что то ещё?
Мне кажется просто он пидор с опенсорсом головного мозга. Я конечно хз чотам щаз в тренде, но BI на посгрес, звучит как анекдот.
А так и у мелкомягких и у оракла есть свои решений, и интерпрайз весь на них.
На текущий момент не видел и не слышал, чтобы кто-то строил или планировал хранилища на MS, задчи миграции с него на другие решения, да видел. С оракла тоже стараются уходить там где это возможно. Желания такие по крайней мере часто слышал.
Достаточно, можно впринципе первое или второе изучить и начинать вкатываться, а остальную часть по ходу дела разбирать. Еще скриптовой язык не помешает, shell,python и работа с терминалом.
По поводу знания конкретной базы: тут суть не в самой технологии, а в базовых навыках и понимании. Тебе это сильно пригодится для решения многих задач, если будешь работать базами в принципе. Не сильно важно какая база, просто нужно хорошо знать, как она работает.
>На текущий момент не видел и не слышал, чтобы кто-то строил или планировал хранилища на MS
Ну на HH просто дохуя вакансий по MS, в том числе DWH. У GreenPlum всего 5. Может на западе его активно юзают, но, похоже, не у нас.
>Достаточно, можно в принципе первое или второе изучить и начинать вкатываться, а остальную часть по ходу дела разбирать. Еще скриптовой язык не помешает, shell,python и работа с терминалом.
Python знаю, а насколько нужно уметь с терминалом работать? На Баше скрипты писать?
Кстати,а не знаешь какие-нибудь площадки, которые предоставляют огромные объёмы данных, на которых можно тренироваться?
Не рвись ты так красноглазый. Анон полный набор для BI в вопросе перечислил как бе.
Не поверишь, но лучше всего изучать сам SQL, тот же етл, по сути состоит из сплошных sql запросов чуть более чем полностью. Хранилка имеет свои нюансы конечно, но в целом это та же бд. В нагрузку можно учить mdx/dax. Вобще есть мнение что все уже вернулись от кубов к табличной модели.
Кароче, есть необходимость сделать метрики для предприятия.
У предприятия часть необходимых данных хранится в 1С.
Хранение, очевидно, файловое.
1Сника у предприятия нет. Только-только уволился и ищут что-то новое.
Может кто подсказать, кто с 1С работал. Если я приду и скажу новому исполнителю который только пришел - хуяч мне SQL-сервак - он меня пошлет? Какие варианты есть еще тогда работы с бд 1С?
Или только заказывать csv у 1Сника с обновлением раз в сутки?
Нет не знаю, может аноны подскажут, по площадке с данными сам как-то искал и не нашел.
Скриптовой язык обычно требуется для датаинженеров, если в hadoop стек углубишься. Да глубокие знания не требуются, просто уметь.
Я думаю далеко не все вакансии по ms это dwh. Открыл первые три попавшиеся по dwh, ни слова про ms.
И сама по себе работа с базой, это не всегда работа с большими данными. Если хочешь прокачаться именно в этом направлении, ищи проекты с объемами баз от 50 терабайт примерно, где множество систем источников и приемников, множество процессов загрузи и выгрузки данных. Сотовые операторы, те же мэйлы и яндексы, авито, банки крупные, ресурсодобывающие организации.
Иначе попадешь в болото из 10 табличек, и 5 отчетов с сервером на локалке. Думаю вакансии по ms в большей степени как раз про это. Потратишь время зря.
Там в два клика 1с привязывается к базе данных. Так и говоришь, положи мне базу 1с в базу данных.
Как я понял сейчас у предприятия вообще никакой бд нет, только 1С. 1Сник сможет SQL-сервак на его выбор поставить? Мне не принципиально к чему запросы делать.
Или это вообще вне его компетенции?
Да но учти ставить и настраивать БД, это не работа 1сника, не исключено что он это умеет, но не обязан, так что может послать. Вобще серверами должен заниматься сисадмин. Он поднимает скуль, а 1сник просто указывет сервер-источник. Есть вариант на линуксе, которые бесплатны, но нужен человек который сможет настроить. Можно разово забашлять аутсорсерам чтоб сделали сервер, а потом 1сник пусть сам занимается.
Пользователь A хочет добавить 'хуй' и пользователь B тоже хочет добавить 'хуй'.
1 ситуация: они это делают в разное время. Перед вставкой в бд сначала происходит проверка на наличие вставляемых данных и если их нет, то выполняется вставка. Итог: пользователь A добавил 'хуй' в бд, пользователь B захотел добавить, не прошел проверку, был послан на хуй.
2 ситуация: оба пользователя делают это одновременно. Для каждого из них проверка выполняется успешно - 'хуй'я нет еще в бд, соответственно, они оба вставляют два 'хуй'я в бд, чего быть не должно. Окей, используем транзакцию. Вместо обычного
>INSERT INTO...
пишем
>START TRANSACTION
>INSERT INTO....
>COMMIT
Транзакция должна заблокировать таблицу над которой выполняются операции? И отработает только одна из них? Или вторая зависнет, дождется завершения первой, после чего выполнит себя повторно, вставив 'хуй' дважды? Или как? Или что?
>Иначе попадешь в болото из 10 табличек, и 5 отчетов с сервером на локалке. Думаю вакансии по ms в большей степени как раз про это. Потратишь время зря.
Ну сейчас я как раз на MS SQL работаю, и там в одной БД больше 1000 таблиц, а такая БД на сервере ни одна, да и инстанс тоже не один. А для бдшек с 10 табличками, по моему, MySQL используют, и врятли таким компаниям вообще DWH нужен.
Оба вставляют хуй, первый хуй вставляется с успехом, но второй уже не лезет. Соотвествено идет отмена первого хуя, оба пользователя ловят ошибку, не один хуй не вставлен. Образно говоря как логическое И, вставляются или оба хуя, или ни одного. Оба хуя должны быть в одной транзакции офк.
Ну и плюс пока хуй не вставлен, пользователь не получает сообщение о сукесе.
Что значит в одной транзакции? Я что-то не понимаю. Т.е. транзакции не решают мою проблему? Мне надо как-то разрулить одновременные попытки вставки одинаковых данных.
Перефразирую, транзакция обеспечивает выполнение запросов собранных в ней, т.е. если один из шагов рамках транзакции фейлится, отменяется вся транзакция.
Ну, про это я читал. А что будет, если каждый из пользователей создает транзакцию? И не просто создает, а они одновременно их создают?
Если я правильно понял, как только пользователь запишет что-то, то второй запишет после. Это никак не решает мою проблему с одновременной вставкой, ибо проверка уже прошла для обоих и сказала, что данные можно вставлять.
А в чем проблеиа? Второй запрос ничего не запишет и вернет ошибку, как если бы он изначально не мог вставить, т.е. для пользователя разницы нет. Если у тебя списывается из таблице А и записывается в таблицу Б, то вот это и собирай в транзакцию.
Нет, мне нужно просто, чтобы данные не дублировались. Я в одном из тредов уже писал про это, но там мне не сильно помогли. Проблема на пике.
А with lock нужно в транзакциях использовать? Блять, я запутался...
А вобще зависит от бд, гугли свю бд на lock/lock table
Не надо пока этих томов только, плиз... Я сейчас хочу понять, в том ли я направлении вообще думаю. И я не уверен, что вы вообще поняли что я хочу. Это первое. Второе. У меня mysql, толку от этих конструкций, их может и не быть.
Я хочу понять: две транзакции, они как-то блокируют друг друга? Вот одновременно их отправили на исполнение.. В обеих только вставка однотипных данных. Но какая-то из них все равно будет принята на исполнение быстрее. Так вот та, что быстрее начнет выполняться, она запретит остальным транзакциям выполняться?
А когда она выполнится, что будет? Залоченные транзакции начнут постепенно выполняться? Или они уже ВСЕ?
Если иебе нужно, чтобы одинаковые данные не вставлялись, напиши запрос так, чтобы если хуй уже есть, то его вставлять не надо. В ms sql для этого есть merge.
Если merge нет, пиши insert если хуя нет, и update, если хуй есть.
И создай на табличку unique constraint на поле, в которое хочешь вставлять хуй, чтобы прям на уровне бд разруливать эти вопросы.
Конечно, они выполнятся.
Не получится, потому что хуй может быть и не уникальным по своей природе, но разным по длине.
хуй 25
хуй 14
хуй 6
- все это нормально, но
хуй 25
хуй 25
хуй 14
хуй 6
- не может быть. Поэтому unique запретит мне много хуев разной длины добавлять.
Нет, они посыпятся с ошибкой когда увидят что база залочена. В майскуль есть отдельная функция lock. Но как писал анон выше мне кажется в твоём случае нужно действавать иначе, например добавить If exist какой-нибудь, чтоб оно проверялось перед вставкой, и уже в зависимости от результата действовал.
Составной ключ?
Забыл добавить: тут может быть еще и пизда со своей глубиной, по этому второй столбец тоже не может быть unique, ибо не получится записать
хуй 15
пизда 15
Очевидно, задача на примере хуев и пезд - плохая задача.
Сформулируй понятнее, что тебе нужно, но уже сейчас видно, что транзакции - вовсе не то, что тебе нужно использовать для ее решения.
Ты можешь сделать уникальный индекс по нескольким полям, если что.
Два чаю этому, для начала определи какие атрибуты тебе нужны для определения уникольнной позиции. Может вобще стоит нормализовать и хуи с пездами растащить по разным таблицам
А вдруг он пишет магазин для взрослых?
Окей, номер игровой сессии и сервер на котором она проходила. Может быть
gameId serverId
1 2
2 2
5 2
1 1
1 3
Мне лишь нужно, чтобы 2 юзера не сделали такую хуйню (на самом деле их сколько угодно может быть, дубликаты вообще не нужны)
gameId serverId
1 2
1 2
Create unique nonclustered index IX_t_game_server on t_game_server (game_id, server_id)
Вот и все
Не уверен, что констейнт можно ра 2 поля создать, пишу с айпада, проверять негде. А индекс точно можно.
>уникальный
Он даст тебе гарантию, что в твоей табличке не будет 2 строк с одинаковыми server_id и game_id
В твоем случае будет так:
Первый юзер заинсертит пару (1,1)
Второй юзер попытается заинсертить пару (1,1), и субд его пошлет, выдав ошибку (такая пара уже есть в табличке, хуй тебе)
Хм, не знал что индексы и так работают, думал все это история для ускорения запросов. Я не тот анон с хуями, но за инфу спасибо.
Ты можешь сделать primary key по этим 2 колонкам, но это не рекомендуется, потомучто ссылаться на такую таблицу будет заебно.
Так что первичный ключ лучше юзать на автоинкрементную колонку.
В mysql сработает.
Сильно ли ударит по размеру бд?
Нет, не сильно. Но имей в виду, что индексы имеют свойство фрагментироваться, так что их периодически надо реорганизовывать или перестраивать.
Ну я поэтому и написал, "в большенстве случаев".
Предполагаю, что проекту около 10 лет или более. В общем выбор не типичный.
>Да и на HH почти во всех вакансиях, в которых упоминается DWH, требуют MS SQL, а тот же GreenPlum упоминается только в пяти вакансиях. Так в чём его преимущество?
>
бля, где пять то?
В ДС на hh по greenplum сейчас 65 вакансий. И вакансия greenplum уже подразумевает DWH, потому что он больше нигде не используется.
Преимущество в том, что greenplum это именно BIGDATA. А хранилища на MSSQL это мелкие дрочь хранилища мидл сайз бизнесов. Или он просто упоминается в вакансиях, потому что много баз источников на MS SQL. Или иногда пишут что нужны знания реляционных баз и перечисляют просто базы распространенные.
Если хочешь вкатываться в DWH и Hadoopы, можешь просто ходить на собеседования. Просто пишешь знаю основы DWH/Hadoop, хочу вкатиться. Знаю хорошо реляционку. В болшинстве мест спрашивают только реляционку и если она ок, то берут и на месте прокачивают. Ну если ты конечно не на синьора претендуешь.
Чем сидеть год абстрактно читать книжки, можно устроиться гораздо раньше и на месте выучить гораздо больше вместе с практикой.
Не знаю, что-то я для mysql внятного и понятного не смог найти. Нашел только про составные ключи и написал
>create unique index uniq_ind on test (gameId, serverId);
В принципе, работает, но есть проблема. Когда происходит попытка повторной записи, бд ее не пропускает, но для этой таблицы выполняет фиктивное увеличение первичного ключа, создавая "дыры" в порядке записей.
Затем я попробовал с помощью транзакций сделать тоже самое
>INSERT INTO test (gameId, serverId)
>SELECT '${gameId}', '${serverId}'
>WHERE NOT EXISTS
> (SELECT id FROM test WHERE gameId='${gameId}' AND serverId='${serverId}')`;
Этой проблемы уже нет, но я не уверен что постоянно блокировать таблицу в моем случае правильно. Поэтому как можно решить проблему первого способа? Или же лучше транзакции оставить? Вообще, я в них могу засунуть сотни запросов, которые зависят друг от друга, что будет гарантировать целостность бд.
>фиктивное увеличение ключа
типа последний инкрементальный id был 3, а следующий при инсерте будет не 4, а 5?
>затем я с помощью транзакций
Не видно, что ты управляешь в запросе изоляцией транзакий - это во-первых
Во-вторых, я вообще не понимаю, что ты собираешься делать при помощи транзакций. Вот тебе простой пример того, как у тебя все сломается:
1. Инсертишь ты такой строку в базе, блокируя табличку.
2. И тут у тебя отваливается соединение с сетью. А транзакцию ты не закоммитил.
3. Все остальные сессии, заблокированные первой, будут висеть, пока подвисшая транзакция не будет закоммичена, то есть венчо.
>а следующий при инсерте будет не 4, а 5?
Да
Насчет транзакций, я не знаю что такое "изоляция транзакций". А без транзакций тоже мало что приятного. Вот у меня есть такая ситуация:
Пользователь хочет записать всю информацию для одной игровой сессии, если этой игровой сессии нет в БД, то он вставит эту строчку (gameId, serverId), а после чего начнет заполнять 5 таблиц, которые содержат в себе необходимую инфу для этой сессии. И этих запросов с заполнением может быть несколько сотен. И вот тут проблема, если транзакций нет. На какой-то момент времени пользователь проверил, что (gameId, serverId) нет, он начал выполнять 10 запросов со вставкой, потмо еще 10, потом 20, а ему нужно еще где-то 100 запросов выполнить, и тут хуяк, сеть пропадает, все нахуй падает, 100 запросов не выполнились. Теперь у нас в БД "поврежденная" игровая сессия с частью информацией. А перезаписать ее повторно не получится, ибо связка (gameId, serverId) была записана и Бд считает, что для нее вся информация записана.
>Все остальные сессии, заблокированные первой, будут висеть, пока подвисшая транзакция не будет закоммичена, то есть венчо.
Это же как-то должно решаться?
Вроде это решается через констейнт по сути то же самое что и индекс, но проверяет перед вставкой, во стальном работает так же.
Т.е. лучше делать с транзакциями без того составного ключа, но с проверкой на уже записанные данные + настраивать время блокировки, чтобы не было вечно висящих транзакций?
Вот тебе решение, индекс на 2 поля оставь, по нему поиск будет работать.
И используй свой запрос для вставки с «where not exists».
Все.
Мне нужно, чтобы данные все гарантированно записывались. Т.е. либо все, либо ничего. Чтобы в случае с всевозможными сбоями в БД не было говна.
>>34652
Да, это решается транзакциями, ты прав, не обратил внимания.
Все твои запросы должны быть в одной транзакции в таком случае:
START TRANSACTION
.... куча запросов
COMMIT
Но не забудь, что в таком случае ты должен разообраться с тем, что такое Rollback и как отлавливать ошибки.
Вот тут написано
https://stackoverflow.com/questions/30973002/try-catch-in-mysql-for-transaction
А rollback для чего, если при возникновении ошибки транзакция и так не выполнит commit? И все же, как тут писали:
>Вот тебе простой пример того, как у тебя все сломается:
>1. Инсертишь ты такой строку в базе, блокируя табличку.
>2. И тут у тебя отваливается соединение с сетью. А транзакцию ты не закоммитил.
>3. Все остальные сессии, заблокированные первой, будут висеть, пока подвисшая транзакция не будет закоммичена, то есть венчо.
С этим как бороться? Вот так?
>У транзакций можно настроить время блокировки
Или лучше как-то иначе? Я бегло прочитал про какие-то ACID транзакции, которые выступают промежуточными, как я понял, между пользовательскими транзакциями, что дает возможность БД отлавливать зависшие транзакции и самой их разруливать как-то. Но это жрет дохуя ресурсов сервера, места на носителе информации и оперативной памяти. Короче, у меня есть чувство, что я лезу куда-то не туда и сам создаю себе проблемы.
rollback и нужен для того, чтобы завершить транзакцию и все следующие, заблокированные ей, могли выполняться.
Бля, просто прочитай про транзакции.
Я читал и там было написано, что rollback нужен всего навсего для отката изменений. Поэтому я не очень понимаю, как он связан с зависшей транзакцией после сбоя работы бд.
>бля, где пять то?
В дс2
Зато если искать по запросу DWH, то почти в каждой вакансии пишут о разработки хранилищ на MS SQL
Да такой же срач: грин пульм или мс скл, блжад, да похуй, вообще.
Просто грин пульм бесплатный, вот и нравится красноглазым.
По факту, абсолютно неважно, что ты там юзаешь, главное - принципы построения хранилищ понимать.
А реализация - сколько не ходил по собесам, всем похуй на опыт использования какой-то конкретной программы, если не умеешь, научат.
>В дс2
а ну тут ты попал в просак. На хоронища смысл идти только в большие конторы, там может быть 300к/сек.
А все большие конторы базируются в МСК, я имею ввиду энтерпрайз. В Питере есть разве что газпром-нефть, газпром(?), а дальше хз.
Тебя могут взять в сбер в Питере, но само хранилище в мск и ты будешь как бэ на вторых ролях всегда.
>Зато если искать по запросу DWH, то почти в каждой вакансии пишут о разработки хранилищ на MS SQL
это дрочь конторы, в которых мало денег
лол, ты там ему уже карьеру построил, сразу на ведущего разработчика с 300к\наносек, все сидят и ждут, только его не хватает.
норм, но надо обычно знать еще кучу попенсорс говна, которое вокруг
Да, ждут, толковых спецов в этом направлении не так много, а тех кто готов еще и все трудности кровавого энтерпрайза героически преодолевать, так и подавно.
Ну, я читаю Алан_Бьюли-Изучаем_SQL-Символ-Плюс(2007).pdf Вроде, норм. Еще Бейли Л. - Изучаем SQL (Бестселлеры O'Reilly) - 2012.pdf неплохая. Если совсем даун, то лучше с нее начать, имхо. Там даже картиночки есть.
Помню другую книгу из этой серии не стал брать только из за того что там какой то урод был изображён.
ну допустим
select * from foo where id in bar, bar2
допустим на каждый из них дает 10, а нужно три (какой нить дистинкт с лимитом мб?)
При помощи count?
mariadb
Подскажите пожалуйста как это реализовать?
Т.е. есть "столбец" с тектстовыми ячейками. В них нужно дописать доп данные.
Не совсем понял что ты хочешь, но наверное RIGHT
Что такое one off by error, я не понял.
Но логично, что клиент не знает, когда перестать опрашивать, так что придется спрашивать до тех пор, пока запрос не вернет кол-во строк меньше, чем указано в LIMIT. Ну и, как я понимаю, если в таблице число строк кратно указанному в LIMIT (1000), например, 2 тыщи, то тебе придется 3 раза выполнить запрос вместо 2, чтоб понять, что больше ничего нет.
>В общем, благодаря тебе у меня примерно сформировался стэк в голове, который мне нужно изучить:
>1) hadoop - yarn - spark
>2) postgres + GreenPlum
>После этого можно идти стучаться на галеры или нужно что то ещё?
Это как бы два разных профиля. Учи либо первое, либо второе. Я с командой работаю на хадупе, так про гринплюм только слышал. Коллеги работают чаще с ораклом.
>Что такое one off by error, я не понял.
https://en.wikipedia.org/wiki/Off-by-one_error
Тут я полагаю намекается, что оффсет может быть некорректен.
> Но логично, что клиент не знает
Я отбросил этот вариант, потому что с моей точки зрения клиент знает, когда прекратить, как раз благодаря описанному тобой способу.
Пошёл нахуй, пидарас
>Это как бы два разных профиля. Учи либо первое, либо второе. Я с командой работаю на хадупе, так про гринплюм только слышал. Коллеги работают чаще с ораклом.
Блэт, ну я так понял Hadoop нужен что бы просто кучу данных собрать, а GreenPlum и прочие DWH нужны, что бы данные было проще анализировать. И для того, что бы перетащить данные из Hadoop или реляционки в DWH строится ETL. По крайне мере в вакансиях на Дата Инженера требует знания как Hadoop, так и OLAP с DWH. SQL тоже. Хуй знает, чем там в реальности нужно будет заниматься.
Кстати говоря, обязательно ли для освоения Hadoop арендовать сервак с огромным HDD(SDD)? А то брать больше 30Г как то жаба душит, может для обучения и их хватит?
Нагулил что у них есть бесплатный сервак на год, ну там как раз 30ГБ, это хватит?
Ещё я слышал, что если занять места больше 30ГБ или нагрузить сервак сильнее дозволенного, то у тебя деньги начнут снимать, без спроса.
А вдруг я за ночь заполнится диск на несколько террабайт и придёт счёт на 1000 долларов. И что делать?
Так это ведь пиндосия, а ты в пидорашке. Что они тебе сделают? Посадят? Штрафанут? Счёт в сбере залочат?
Вот тут
https://use-the-index-luke.com/no-offset
читал что offset это медленна и вообще так нельзя. У меня просто в голове не укладывается по-моему это какой то полный пиздец. Но такое впечатление у меня от всего свитеромирка так что.. просто оставлю свои пять копеек, может это кому то будет полезным.
>Hadoop нужен что бы просто кучу данных собрать
собрать и обработать. Попробуй провести матчинг 2-5 таблиц в оракле, не наебнув там все. В хадупе же ты просто меняешь размер контейнера в зависимости от объема данных и все.
>Кстати говоря, обязательно ли для освоения Hadoop арендовать сервак с огромным HDD(SDD)? А то брать больше 30Г как то жаба душит, может для обучения и их хватит?
Нет. Поставь себе виртуальный сервак, погугли дистрибутив cloudera VM quickstart
Тебе не нужно дома для обучения 3 петабайта. Наполни 3-5 таблиц 10 стоками и напиши на скале проект, который матчит данные из них в новую таблицу, сбилди джарник и залей в VM, запусти, посмотри в ярне как работает. На этом можешь закончить. Я на деве тем же самым занимаюсь. Хорошо, если в таблице 50 строк, а не 0, как бывает. А на проде там терабайты лежат, вполне себе.
На собезе расскажешь, уже плюсом будет.
Не верю, что на галерах нужен хадуп и прочая аналитика, это же продуктовая тема. На галерах просто реляционки или простенькие in-memory kv типо редиса или мемкеша для кеширования.
Если хочешь опыта набраться и вкусить всю прелесть хранилищ, сюда попробуй влезть хотя-бы стажором, чтоб на жилье хватало и жрачку, пол года-год пересидеть.
Сам туда пойду скорее всего
https://hh.ru/vacancy/32678281
В продолжение. Хранилище только начиначет строится. А это самый смак, на все грабли наступить, самое оно. Плюс там куча интеграций и ораклы и хадупы. Я думаю работы там года на 3 не меньше
Блэт, нихочу в москву ехать, я в дс2 уже нормально устроился и щас всё сначала начинать. Охуенно, чо. Да и из текущей галеры я щас свалить не могу.
Ну смотри сам, я для себя вообще режим кочевника выработал - год два на проект, и на съебы. По моим наблюдениям, вся веселуха обычно на старте, потом когда решение стабилизируется начинается болото: скрамы, митинги бесконечные, однотипные задачи.
да это ваще пздц
Можно устроиться и потом месяц выбивать себе рабочее место
Я слышал историю как чувак так и не успел получить себе комп до увольнения
Охуенный ты опыт там приобретешь
Другая история:
- работали со сбертехом
- предложили написать им скрипт инсталляции
- они отказались
- написали им инструкцию, подробную, для дебилов
- выполнили с ошибкой(ами) на каждом шаге
Использую DB Browser for SQLite. Удаляю таблицу с данными. Размер файла не уменьшается. При открытии фалйа через ноутпад вижу удаленную таблицу с удаленными данными. Приходится конвертировать импортируя .db в .sql и экспортируя обратно, так как при таком действии можно выбирать нужные таблицы.
Что я делаю не так? Или всё так и по-другому никак? Что я не понимаю в работе sql и почему данные с таблицей остаются в файле после удаления?
https://www.sqlite.org/lang_vacuum.html
Тащемта, то, что файл остается большим - это обычно плюс, нежели минус.
Предполагается, что новые данные появятся после удаления.
> При открытии фалйа через ноутпад вижу удаленную таблицу с удаленными данными.
Это типично во всех движках.
Дешевле пометить страницы как удаленные и потом поверх них писать, чем .. что ты предлагаешь? нулями забивать?
У меня база используется в программе для смартфона, размер программы 100 мегабайт, вместо 20, это минус, например.
В любом случае большое спасибо:
>Если SQLite не работает в режиме «auto_vacuum = FULL», когда большой объем данных удаляется из файла базы данных, он оставляет пустое пространство или «свободные» страницы базы данных. Это означает, что файл базы данных может быть больше, чем строго необходимо. Запуск VACUUM для восстановления базы данных освобождает это пространство и уменьшает размер файла базы данных.
Поставил фулл.
Ты поосторожнее с автовакуумами
Лучше периодически проверять и делать принудительно, чем на автомате
Автовакуумы обычно приводят к тому, что все данные валяются хрен знает как : кусочек того, хвост другого, тут еще какая-то х-ня
Впрочем, если база мелкая - то пофигу
>>15028868
Приведи лучше ты пример хайлоад проекта с реляционной бд в качестве рантайм хранилища
Я тоже старый пердун
Если ты думаешь, что NoSQL - это какой-то писк моды, то ты от жизни отстал
Можешь свой пафос уносить
Если знаешь английский то cmu лучший курс по базам данных.
нагуглить эти три три буквы и найдёшь курс Andy Pavlo
СберТех был кадровой помойкой какое то время назад
С новым директором они взяли курс на выезд из помойки но люди к сожалению остались. Туда можно сходить и начать карьеру, но на собеседованиях в нормальных конторах считает юных сбертеховцев оверпрайснутыми даунами. Потому что Джуно куа 70к не стоит после года работы. Даже в 2019. Даже девелопер столько не стоит. (В среднем)
Поэтому если не прилип жопой к стулу и обучаешься (это там вроде можно делать) то шанс вырваться есть. Главное не охуевать с самооценкой потом.
nexign
Опуская проблему полного отсутствия FK, есть два вопроса.
1. На сколько строк нужно загадить wp_posts, чтобы поиск по post_name (с индексом) стал заметно тормозить?
2. На сколько строк нужно загадить wp_postmeta, чтобы выбор по post_id стал заметно тормозить?
MariaDB 10.X. Допустим, всё лежит на SSD. Проц - 2x2GHz.
>Потому что там есть ограничения на карьерный рост и на рост зп.
до 12 грейда - рук направления - можно спокойно расти
выше, всякие исполнительные директора - там уже хуй
но у тебя на 12-ом уже будет под 350-к, сколько тебе в других местах хуй дадут
чего еще надо?
Так вышло, что после полутора лет эникейства мне в экстренном почти порядке пришлось вкатываться в SQL Server (как мешком по голове).
Сегодня написал тестовое задание, будет ещё одно, мб тут совета спрошу, если не разберусь.
Что хотел спросить.
Посидев в этой говноконторе в качестве "Инженера баз данных" опционально год-два-три, смогу ли я рассчитывать на трудоустройство в другую контору, имея на руках эти пару лет опыта? (при этом не имея вышки).
И вообще насколько эта перспективная отрасль? Или придётся неизбежно вкатываться в другие языки погромирования, чтобы продвинуться дальше?
Какой селект ты хочешь сделать?
Where my_column like '%kaka%'?
Тогда индекс не поможет
Where my_column like = 'kaka'?
Тогда можешь сделать. Другой вопрос, что 900 строк - что с индексом, что без индекса, будет бытро искать, потому что размер - ни о чем.
> Какой селект ты хочешь сделать?
Без процентов, точное соответствие.
> Другой вопрос, что 900 строк - что с индексом, что без индекса, будет бытро искать, потому что размер - ни о чем
На каких размерах нужно чесать репу? 900000?
>900000?
Зависит от дисков, на которых у тебя БД сидит, от СУБД тоже, а так же от внутренних правил.
Ну например, у тебя приложение с правилами ОТКАЗОУСТОЙЧИВОСТИ: время ответа не более 0.5 секунды.
Вот твой запрос работает нормлаьно
Завтра ты 100 000 строк заинсертил, уже 0.9 секунды отвечает - ты это мониторишь, понимаешь, что пора индекс добавить.
Хрюши расписывают в вакансии что нужно от соискателя.
1. Меньше кода
2. план запроса - баз самоджойнов, если не юзаешь индексы, то получается быстрее
Ну и интересно посмотреть, как ты прорнжируешь строчки без оконной функции, например, так:
id, dt, rank
1, 20190101, 1
2, 20190101, 1
3, 20190101, 1
4, 20190108, 2
5. 20190108, 2
6, 20190111, 3
Напомни мне дебилу почему
SELECT ...
FROM [dbo].[fct_cheque] as f
inner join dim_goods as g
on g.good_id = f.good_id
inner join [dim_stores] as s
on s.store_id = f.store_id
inner join dim_date as d
on d.did = f.date_id
inner join dbo.dim_cash_register as cr
on cr.cash_register_id = f.cash_register_id
where date_id between @date_from_int and @date_to_int
and g.group_name = @good_group_name
Вытаскивает не все данные, а вот в таком виде:
SELECT ...
FROM [dbo].[fct_cheque] as f
LEFT JOIN (SELECT DISTINCT cash_register_id FROM [dbo].[dim_cash_register]) as cr
on f.cash_register_id=cr.cash_register_id
LEFT JOIN [dbo].[dim_date] as d
ON d.did=f.date_id
LEFT JOIN (SELECT DISTINCT [good_id],[good_name],[group_id],[group_name]
FROM [dbo].[dim_goods]) as g
on f.good_id=g.good_id
LEFT JOIN [dbo].[dim_stores] as s
on s.store_id=f.store_id
where date_id between @date_from_int and @date_to_int
and g.group_name=@good_group_name
Выдаёт всё как надо.
Напомни мне дебилу почему
SELECT ...
FROM [dbo].[fct_cheque] as f
inner join dim_goods as g
on g.good_id = f.good_id
inner join [dim_stores] as s
on s.store_id = f.store_id
inner join dim_date as d
on d.did = f.date_id
inner join dbo.dim_cash_register as cr
on cr.cash_register_id = f.cash_register_id
where date_id between @date_from_int and @date_to_int
and g.group_name = @good_group_name
Вытаскивает не все данные, а вот в таком виде:
SELECT ...
FROM [dbo].[fct_cheque] as f
LEFT JOIN (SELECT DISTINCT cash_register_id FROM [dbo].[dim_cash_register]) as cr
on f.cash_register_id=cr.cash_register_id
LEFT JOIN [dbo].[dim_date] as d
ON d.did=f.date_id
LEFT JOIN (SELECT DISTINCT [good_id],[good_name],[group_id],[group_name]
FROM [dbo].[dim_goods]) as g
on f.good_id=g.good_id
LEFT JOIN [dbo].[dim_stores] as s
on s.store_id=f.store_id
where date_id between @date_from_int and @date_to_int
and g.group_name=@good_group_name
Выдаёт всё как надо.
Дурацкий блокнот++, вот корректная версия первого запроса
FROM [dbo].[fct_cheque] as f
inner join dim_goods as g
on g.good_id = f.good_id
inner join [dim_stores] as s
on s.store_id = f.store_id
inner join dim_date as d
on d.did = f.date_id
inner join dbo.dim_cash_register as cr
on cr.cash_register_id = f.cash_register_id
where date_id between @date_from_int and @date_to_int
and g.group_name = @good_group_name
Потому-что в первом все джоины inner join, поэтому теряются значения с 0. Т.е. Он хочет джоинить А на Б, но А равно нулю, образно говоря продавец Коля нихуя не продал, и у него 0 в графе продажи, и иннер отбрасывает такие поля. Во втором запросе у тебя послежний джоин левый, соотвественно значения с нулями сохраняются.
Проблема в том, что во втором продаётся больше (и с фактическим числом продаж сходится) и я не понимаю как.
ну у тебя во втором ещё подзапросы в джоине. Вобще я конечно не эксперт но это какой-то говнокод, столько лефтджоинов подряд не делают, при том судя по подзапросу, намерено сокращается число строк, чего в первом запросе не делают, так что рискну предположить что все что это сделано чтобы с первого лефт джоина не тащить говно. Должно быть INNER-INNER-....-LEFT например. Хотя конечно может идея как раз в этом, чтоб протащить все пустые строки до последнего, но всё равно тупость какая-то.
Как то так например
FROM [dbo].[fct_cheque] as f
inner join dim_goods as g
on g.good_id = f.good_id
inner join [dim_stores] as s
on s.store_id = f.store_id
inner join dim_date as d
on d.did = f.date_id
right join dbo.dim_cash_register as cr
on cr.cash_register_id = f.cash_register_id
where date_id between @date_from_int and @date_to_int
and g.group_name = @good_group_name
Но опять же я не знаю из какой таблицы нужны пустые значения, так что предположу что из последней, но это похоже не так, если жоины таки левые.
>Error: Cannot add or update a child row: a foreign key constraint fails (`solach`.`info_matches`, CONSTRAINT `info_matches_ibfk_1` FOREIGN KEY (`id_match`) REFERENCES `matches` (`id`))
Я пробовал отключать проверку внешних ключей
>SET foreign_key_checks=0
Но ошибка остается.
>Связь один ко многим
Вообще не понял к чему ты это написал. Да, у меня связь один ко многим. Вторая таблица содержит поле с внешним ключом, которое может повторяться, а в первой таблице это поле уникальное.
Наверное, еще надо уточнить, что все запросы внутри транзакции выполняются. Но там же вроде есть буфер какой-то, который временно считает, что все запросы как-бы выполнены. Т.е. если сначала добавить запись в первую таблицу с первичным ключом внутри транзакции, а потом сослаться на нее, добавив во вторую таблицу по внешнему ключу ДО ВЫПОЛНЕНИЯ коммита, то во время добавления записи во вторую таблицу запись в первой будет в этом временном буфере, если не было роллбэка. Так ведь? Но у меня почему-то не добавляет запись, даже с выключенной проверкой ключей.
Так удаляй строки с первичным ключом сначала из дочерей таблицы, а потом из главной.
С такими вопросами тебе нужно бросать своё хобби
Нахуя мне их удалять? Мне их вставить надо. Вставить в 1 таблицу, вставить во 2 таблицу, ссылаясь на вставленную запись в 1 таблицу, которая еще не была закоммичена, ибо ценность эти данные представляют только вместе. Для того и была использована транзакция. Но при добавлении во 2 таблицу, мне пишет, что такой записи в 1 таблице нет.
Нет, чел, тупой - ты. Потому что ты меня не слышишь нихуя. В транзакции не работает
START TRANSACTION;
INSERT INTO t1 VALUES id='1', name='name';
INSERT INTO t2 VALUES id_t1='1', something='something';
COMMIT;
где id - первичный, id_t1 - внешний
А ошибка эта не говорит нихуя, кроме того, что id=1 в t1 нету. А теперь иди на хуй, ты меня заебал уже душить своей тупостью и выебонами, чмо. Кстати, я тут нагуглил твое ебало (пик)
>START TRANSACTION;
>INSERT INTO t1 VALUES id='1', name='name';
>INSERT INTO t2 VALUES id_t1='1', something='something';
>COMMIT;
Тебе нужно почитать про целостность и смысл транзакций.
Правда лучше бросить это занятие прямо сейчас
Хуёво читал, раз весь тред так обосрался.
И зачем он там? Если второй инсерт не выполнится, то первый останется куском не нужно говна в бд. Или надо еще состояние запоминать перед первым коммитом и откатывать к нему?
И вообще, я выше писал где-то про временный буфер. Я где-то читал про него, потому и думал, что никакие промежуточные коммиты в контексте одной транзакции не нужны.
Да иди ты на хуй, уебище. Не умеешь находить общий язык с людьми - сиди и дрочи. На хуй ты вообще пишешь что-то? Какова тут твоя цель? Просто скройся.
Ору с этого дауна, который решил посеменить, разлогинившись. Пидарас пасскодовский. Хррртьфу на еблет твой...
Я хочу тебе обоссать твое ебальце, глупыш
Вот пример: сообщения ВК на мобиле, для каждого чатика создается отдельная таблица, хранящая сообщения из чата.. или правильней все сообщения пихнуть в одну таблицу с внешним внешним ключом?
Эй, хуета, я вроде русским языком сказал: покажи мне этот ответ, который лежит на первой странице и решает мою проблему. Если ты как сучка поджал хвост, опасаясь быть обоссаным мною итт, то просто пиздак прихлопни и сиди тише воды, ниже травы. Справишься хоть с чем-то из этого? Или продолжишь пиздеть без повода?
Поздравляю. Мощная струя едреной мочи летит прямо тебе в ебало. Чел, унеси свою хуйню, которая вообще не имеет никакого отношения к проблеме или иди перечитывай мой самый первый пост, где я был еще добрым. Мне похуй как ты это делать будешь, я хз, проси там модеров что ли... Но только чтобы я не видел этой хуйни тут.
Ты или удаляешь констрейнт или делаешь промежуточный коммит.
Неужели ты правда не способен этого понять?
Я понимаю, что вижу какого таракана, который на уровне земли что то пищит, переводит стрелки, а я его даже не слышу. Потому что мои капли мочи громче бьются о пол, пока мимокрок выше наслаждается своей дозой.
Как ты еще пластмассу или пенопласт будучи таким тупым есть не начал?
Вот так да... Ахуеть? Правда? Об этом написано где-то было в том "ответе"? Интересно-интересно... А вот вопрос такой, а почему с констрейнтом нельзя-то? Получается, я то был прав насчет видимости результатов запросов в контексте транзакции? Но вот только что-то никто не дополнил мою мысль, да? Еее для вас как буд-то и не было. А теперь, выясняется, что виной-то всему был констрейнт)))))) Хех))) Но да ладно, опять же... Коммит... Знаешь? А я его делал... Вот только в чистом его виде нельзя делать, надо создавать savepoint... Кстати, не подскажешь как его создать в mysql2 модуле для node js? Ты поищи-поищи, наверняка, на первой странице будет ответ. Линканешь мне потом его сюда. Давай...
Там по идее не нужны пустые значения (идёт вывод данных о продажах).
А ещё меня смущают DISTINCT'ы, посмотрел в dim_cash_register - там 23 записи, но касс всего 22 (кассы № 10 нет, а касса № 7 дублируется). Это что-то может объяснить?
В dim_goods с учётом фильтрации WHERE DISTINCT не убирает ничего.
Извиняюсь что я тупой нубас.
https://stackoverflow.com/questions/12245599/inserting-mysql-foreign-keys-and-primary-keys-in-a-transaction
Что-то не вяжется да? Чел просто интересуется "сработает ли?", на что получает ответ "да". А у меня что-то вот не выходит ни хуя... Я, наверное, тупой, просто не увидел ответ на первой странице...
>DISTINCT'ы, посмотрел в dim_cash_register - там 23 записи, но касс всего 22 (кассы № 10 нет, а касса № 7 дублируется).
Кажется начал понимать.
> Об этом написано где-то было в том "ответе"?
Да
You're getting this error because you're trying to add/update a row to table2 that does not have a valid value for the UserID field based on the values currently stored in table1. If you post some more code I can help you diagnose the specific cause.
>я то был прав насчет видимости результатов запросов в контексте транзакции?
Нет
>Но вот только что-то никто не дополнил мою мысль, да? Еее для вас как буд-то и не было.
Такое ощущение, что тебе лет 12, тебе никто ничего не должен.
>А теперь, выясняется, что виной-то всему был констрейнт)))))) Хех))) Но да ладно, опять же... Коммит... Знаешь? А я его делал...
Больше точека, петушок. Тебе об этом сказали почти сразу.
>для node js
Ясн. А я то думаю, зачем вообще нужны ЯП с динамической типизацией, а оказывается Ваньки не могут в нормальные инструменты.
>mysql
Ты даже его не в состоянии осилить юзай MongoBD.
>надо создавать savepoint
Нет, тебе нужно сделать два коммита подряд.
Ну, читай внимательней.
Лень отвечать на одно и тоже в десятый раз. Баран он и есть баран. На последнее только отвечу
>тебе нужно сделать два коммита подряд.
Чтобы второй кусок в случае ошибки не записался, а первый остался болтаться в бд закоммиченный? Ебать, тут гении сидят...
>нормальные инструменты
php? Подставляй рот к моему волосатому анусу, сейчас еду космонавтов будешь дегустировать.
Предположим у тебя соеденение
1------2-----3
В первой таблице например 21 запись, во второй 15, а в третьей опять 21, и поэтому без одностороннего жоина что-то проебывается. Посмотри таблицы, и поставь среднюю в конец с правым жоином.
Поковырялся. По сути верный результат даёт и такой запрос:
SELECT ...
FROM dbo.fct_cheque AS f
INNER JOIN (SELECT DISTINCT * FROM dbo.dim_goods) AS g
ON G.good_id=f.good_id
WHERE ...
Ну тебе ж ещё третья таблица нужнп
есть запрос вида:
SELECT * FROM `somes` WHERE A=? AND B=?
A и B оба индексы, так вот, если я выполняю без AND B получаю примерно 0.002 секунды выполнения, если с B получаю 0.04 и это пиздец, с чем это может быть связанно?
судб: mariadb
он сначало смотрит на записи по индексу А, потом для каждой из них проводит запрос, ищет совпадение с индексом B, таким образом из обычного if id == ? && govno == true мы получаем if id==? && govnos.contains(id)
это я сам придумал сам поверил, иначе как обьяснить тот пиздец я не ебу
там 3миллиона записей в таблице
А - parent, соотвественно например у тысячи ячеек может быть одно и тоже значение в А
B - deleted, юзал число, так как бул не умеет в индексы
>я то был прав насчет видимости результатов запросов в контексте транзакции?
>Нет
Вот, аналогичная проблема. Абсолютно аналогичная. Только я вообще хз нахуя он это высрал, наверняка он работает из под своего шелла субд, а не как я через api пакета node js.
я то был прав насчет видимости результатов запросов в контексте транзакции?
https://stackoverflow.com/questions/20876291/sql-foreign-key-before-commit
Я, кстати и сам проверил это из под workbencha. Там все работает, а у меня после вставки в родительскую таблицу и вставки в дочернюю по внешнему ключу ошибка:
>Cannot add or update a child row: a foreign key constraint fails ('solach'.'info_matches', CONSTRAINT 'info_matches_ibfk_1' FOREIGN KEY ('id_match') REFERENCES 'matches' ('id'))
И идите на хуй со своими промежуточными коммитами, дегенераты ебучие. Жду ответов адекватных специалистов итт, а не ебаного свитерного скама. Но тут таких скорее всего нету...
Есть одна БД с режимом совместимости = 100 (поскольку я не очень умный и спросить сейчас не у кого, то будем считать что лучше ему таким и оставаться, либо, что это значение будет изменено на неизвестное другое, которому так же лучше не менять).
У этой БД есть хранимая процедура, в теле которой очень хочется использовать STRING_SPLIT (который требует режим совместимости 130).
Собственно идея ночью чуть-чуть изменить гравитационное поле Земли в теле процедуры поменять режим совместимости на нужный, сделать STRING_SPLIT, а затем всё вернуть обратно.
Насколько это ебануто? Если не очень - то следом два вопроса
- Допускается что имя БД, может быть изменено, следовательно я использую вывод DB_NAME(), записанный в переменную @currentdb. Но ALTER DATABASE @currentdb ... работать не будет. Как быть?
- Касаемо ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = оригинальное_значение
Можно ли каким-нибудь вместо оригинального значения использовать переменную?
Или стоит прикинуться веником и тупо менять используя актуальные значения имени БД и её уровня? Или вообще идея не ок и стоит думать дальше?
>Жду ответов адекватных специалистов итт, а не ебаного свитерного скама
Ну то есть ты только что.
Чел, я уже понял что ты только можешь срать под себя как старый дет итт, так что схлопни ебальничек, будь добр и залезь обратно под свой законный шконарь...
Но я же кидал нормальные видеоуроки...
>>47337
Советую погуглить, что такое CLR в MS SQL, и накодить ту же самую функцию на шарпе, внедрив ее в составе сборки в SQL Server.
Самое полезное здесь то, что помимо пресловутой split_string ты можешь сделать на шарпе абсолютно все, чего SQL сервер не умеет из коробки. Например, нормальный парсер регулярок, исполнитель веб-вызовов и т.п.
Ну и для всяких alter database [...] с хз, каким названием до момента исполнения ты можешь юзать dynamic sql:
declare @sql nvarchar(4000) = 'ALTER DATABASE ' + @db_name + ' set ...';
exec (@sql);
Ну раз ненужная, продоолжай ебаться с совместимостями, динамик скл, и ковырять строки через
>charindex(charindex(charindex(charindex(charindex
Это же в 100 раз удобнее
Языки NoSQL бд.
Сначала выбираю ВСЮ таблицу (уже хуево звучит), а затем из нее некоторые записи.
Дело в том, что мне надо подсчитать ранк записи (номер по порядку) у каждого юзера среди ВСЕХ его записей, но выбирать надо лишь некоторые конкретные записи, а не все.
JOIN производительней.
на вход подаётся параметр zadachi, в котором указываются номера задач (например: "'4-1-1-1', '4-1-1-2'")
насколько я понял это значение тупо подставляется в where in()
никакой проверки вроде нет, но конструкции вида '4-1-1-1') OR 1=1 -- не срабатывают
твой
select
from ( select ..., rank() over() as RNK from ...) t
where t.RNK = 1
не выбирает в подзаопросе всю таблицу, это нормальная практика в аналитических запросах, если тебе всех зеров обсчитать нужно.
С точки зрения оптимизации можно предложить такой вариант:
при загрузке данных в исходную табличку можно сразу
1. выбирать всех пользователей, по которым есть новые данные
2. Обсчитывать ранк для них и записывать его в таблицу
Таким обзразом в результате можно селектить уже без подзапроса.
что такое 4-1-1-1? текстовый код, по которому можно однозначно идентифицировать конкретную задачку?
да, помимо этого можно сразу пачку задач получить просто указав число (например 4)
А количество уровней воженности точно определено или нет?
Например, 4-1-1-1 - это конечный уровень или может быть
4-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1?
Помимо прочего, какая у тебя СУБД, параметр прилетает куда? У тебя приложение или только хранимая процедура и все?
Блжад, напиши полное описание задачи, ни хуя непнятно, ненавижу, когда 100 вопросов прихоится задавать, а потом автор еще и сливается, поняв, что волшебная пилюла в виде "вот сделай так" не существует и придется все подробно рассказать, чтобы получить решение.
конечный, номера задач хранятся в виде строк скдя по всему
Допустим тебе такое прилетает:
["4", "5-1-1-1"]
параметр надо распарсить в приложении, поняв, какой из кодов конечный, а какой - нет. То есть 5-1-1-1 - кконечный, судя по иерархии.
Далее генерируем запрос, добавляя через OR коды задачек и вставляя их, используя разные условия сравнения в зависимости от того, конечный это уровень или нет. Если неконечный, то like 'КОД%', если конечный, то ='КОД':
select
*
from task t
where t.code like '4%'
or t.code = '5-1-1-1'
ты не понял, мне нужно инъекцию произвести, кавычки вместе с запросом нужно отсылать, поэтому тип данных может быть любой
я пробовал выражения наподобие 2+2 ставить и всё работало, вот только как свой запрос вставить не пойму
предположительно есть столбец с номером (например '4-1-1-1'),
с заданием, решением (шифровано в AES) и ключом для дешифровки
ключи мне выкачать удалось (не инъекцией), осталось сами решения получить
4) # не измерился, а значит там какая-то проверка на комментарии была
О, ебанная посредственность, ты все ещё тут? Два дня просидел ответа так и не нашел?
Ладно, для аутиста который не может в обучение, поясню:
Представь себе, что в рамках одного коммита ты вставляешь лям строк в родительскую таблицу и два ляма строк в дочернюю таблицу. (допустим, вставка у тебя занимает 3 минуты). Проходит 30 секунд, и аутист типо тебя твой брат, например вставляет в родительскую таблицу строчку, которая есть у тебя в ещё не закрытой транзакции, причем это первый инсерт в твоей транзакции. На какое значение должна ссылаться дочерняя таблица? На то, которое есть в ещё не закрытой транзакции или на уже закоммиченное значение, додик?
Да пошёл ты на хуй. Научись сначала разговаривать нормально, обезьяна, заебал уже всех своими свитерами. Желаю тебе ни хуя ни в чем не разобраться, пока не исправишься и не извинишься перед анонами.
Не отвечайте этому дауну, он все треды уже своим говном засрал. Мало того, что тупой и какие-то элементарные вещи не понимает, так еще и ЧСВ себе отрастил, как будто ноые парадигмы хранения данных каждый день внедряет.
Ну и посоветуйте какой-то ресурс или книгу, где рассказываются разные паттерны проектирования бд.
Ну камон, блаженным помогать нужно.
Это жс петух обыкновенный, его пока еблом в говно не тыкнеш, он срать продолжит.
Почитай про нормальные формы.
Чё-т проиграл с того, что монга не дает создать говно.
Коллекция - мб что-то типа дефолтной схемы?
Не ебу, потому и спрашиваю. Вполне может быть, но если так, то нахуя оно надо?
в Sqlite есть event notifications:
https://www.sqlite.org/c3ref/update_hook.html
Так можно не грузить свою базу селектами, а просто подписаться на события, мне кажется, такой способ в 100 раз практичнее
Это копия, сохраненная 31 января 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.