ビリャチピスデツナフイ Войти !bnw Сегодня Клубы

Допустим, у нас так:

Album                      Photo
+----+-----------------+   +----+-------------------+
| id | name            |   | id | album_id | number |
+----+-----------------+   +----+----------+--------+
| 1  | outsession'16   |   | 1  | 2        | 1      |
| 2  | new year'17     |   | 2  | 2        | 2      |
| 3  | man'ka's deanon |   | 3  | 1        | 1      |
+----+-----------------+   | 4  | 3        | 1      |
  ^                        | 5  | 1        | 2      |
  |                        | 6  | 3        | 2      |
  |                        | 7  | 2        | 3      |
  |                        +----+-------------------+
  |                               |
  +-------------------------------+

Зачем Photo.number? Например, хотим урлы /albums/:album_id/:photo_number (/albums/1/1, /albums/1/2, /albums/2/1, /albums/2/2, …, ну ты понел)

Внимание, вопрос: как нам обеспечить вставку записей в Photo со строго последовательными и неизменяемыми (фотки можно удалять) number?

Да, у нас «хуйлоад», тыща бнвачеров ломится заливать фоточки в альбом с деаноном маньки. Без использования очередей. Только наш любимый язычок и постгрес. Триггеры можно, но нежелательно — хуёво поддерживаются, неочевидные, нет интеграции в ORM, и т.д.

Только давайте для начала предоставим слово маньке. Он тут рассказывал, какой он специалист по RDBMS и постгресу в частности. Ну а когда манька соснёт и нелепо сольётся, выслушаем комарика.
```

Рекомендовали: @ckorzhik @ninesigns @komar
#IZHJYP / @anonymous / 2871 день назад

а потом, у дерева спросим а потом у фнарного, столба )))
#IZHJYP/LGI / @anonymous / 2871 день назад
Есть только один способ, который не подведет. Надо добавить в albums поле number_sequence default 0. Фотки добавлять так: BEGIN; SELECT number_sequence FROM albums WHERE id = ...; /* лочим строку с альбомом */ UPDATE albums SET number_sequence = ... + 1 WHERE id = ...; /* на самом деле эти две строки можно заменить на UPDATE ... RETURNING number_sequence, но так понятнее */ INSERT INTO photos ...; COMMIT;
#IZHJYP/YT6 / @komar / 2871 день назад

хуячишь уникальный индекс и вставляешь с MAX(number+1)

#IZHJYP/X6X / @anonymous / 2871 день назад

@anonymous (индекс album_id, number обв)

#IZHJYP/TPO / @anonymous --> #IZHJYP/X6X / 2871 день назад
@anonymous При параллельной вставке у тебя половина транзакций развалится нахуй, высрав пользователю ошибку.
#IZHJYP/DXX / @komar --> #IZHJYP/X6X / 2871 день назад

@komar не уверен что с локами на альбом будет лучше

#IZHJYP/K6E / @anonymous --> #IZHJYP/DXX / 2871 день назад
@komar Также для профилактики собственной рукожопости на первых порах рекомендую сделать UNIQUE INDEX по (album_id, number). Последовательность это не гарантирует, а вот отсутствие повторяющихся номеров — еще как. Но при использовании любых констрейнтов (в данном случае ­— unique constraint) следует держать в голове, что это не делает программу надежнее, а всего лишь разменивает срач в базе данных на обсирающуюся исключениями программу. Иногда второе гораздо предпочтительнее. Например, в твоем случае можно сделать ORDER BY number, id — и фотки все равно будут показаны юзерам всегда в одинаковом порядке, даже если number задублировался. Но это уже сам решай.
#IZHJYP/85K / @komar --> #IZHJYP/YT6 / 2871 день назад
@anonymous С локами на строку в альбоме проебаных вставок и ошибок не будет. К тому же надо совсем немного мозгов, чтобы понять, что проблема чисто алгоритмическая и без изъебств больше никак не решается.
#IZHJYP/70J / @komar --> #IZHJYP/K6E / 2871 день назад

@komar Само собой это уже сделано, unique_together = ('album', 'number')

#IZHJYP/UOV / @anonymous --> #IZHJYP/85K / 2871 день назад
Бля, я последний абзац не прочитал, сорь.
#IZHJYP/T5F / @komar / 2871 день назад
@komar >SELECT number_sequence FROM albums WHERE id = ...; /* лочим строку с альбомом */ Почему так? (читать как: "когда следует использовать SELECT FOR UPDATE?")
#IZHJYP/9AH / @ckorzhik --> #IZHJYP/YT6 / 2871 день назад

@komar Подожди, почему только на строку? Я пока в лоб просто нахуй всю таблицу лочу с самым агрессивным локом (ACCESS EXCLUSIVE то есть). Ты предлагаешь лочить только строку с максимальным number? Так ведь после того, как первый отпустит лок, будет строка с max+1 (которую первый только что вставил), и второй получит не максимальный, а минус один, которая была залочека, разве нет?

#IZHJYP/AYV / @anonymous --> #IZHJYP/70J / 2871 день назад

@komar А проёбаные вставки и ошибки откуда возьмутся? // повтор обосравшихся вставок подразумевался в комментарии выше

#IZHJYP/EWL / @anonymous --> #IZHJYP/70J / 2871 день назад

@ckorzhik > FOR UPDATE
Дальше объяснять, где ты обосрался?

#IZHJYP/RS9 / @anonymous --> #IZHJYP/9AH / 2871 день назад

@anonymous ты тупой шоле, в альбомы добавляется колоночка max_number и лочится альбом.

#IZHJYP/EPS / @anonymous --> #IZHJYP/AYV / 2871 день назад
#IZHJYP/J21 / @ckorzhik --> #IZHJYP/RS9 / 2871 день назад
@komar Блядь, что за хуйни я понаписал. > SELECT number_sequence FROM albums WHERE id = ...; /* лочим строку с альбомом */ SELECT number_sequence FROM albums WHERE id = ... FOR UPDATE; /* лочим строку с альбомом */
#IZHJYP/KAZ / @komar --> #IZHJYP/YT6 / 2871 день назад
@ckorzhik Потому что я долбоеб и пропустил: #IZHJYP/KAZ
#IZHJYP/EUH / @komar --> #IZHJYP/9AH / 2871 день назад

@komar nextval не быстрее будет?

#IZHJYP/FTD / @anonymous --> #IZHJYP/YT6 / 2871 день назад
@komar Че-то я сегодня совсем в ударе. Можно обойтись и без number_sequence, раз мы уже залочили альбом. BEGIN; SELECT number_sequence FROM albums WHERE id = ... FOR UPDATE; /* лочим строку с альбомом */ SELECT number FROM photos WHERE album_id = ... ORDER BY number DESC; /* я настоятельно рекомендую не использовать max() в таких запросах — все-таки max() это агрегирующая функция и во многих случаях в упор не видет индексов */ INSERT INTO photos ...; COMMIT;
#IZHJYP/YK8 / @komar --> #IZHJYP/YT6 / 2871 день назад

@komar Но ведь в пг нет READ UNCOMMITTED, соответственно, два треда сделают прочитают один и тот же number_sequence FROM albums (например, 100), и апдейтнут его на 101, разве нет? Или ты там имел в виду SELECT FOR UPDATE? Или я что-то не понимаю?

#IZHJYP/15R / @anonymous --> #IZHJYP/YT6 / 2871 день назад

@anonymous тупой шоле, это не sequence

#IZHJYP/6N1 / @anonymous --> #IZHJYP/FTD / 2871 день назад
@anonymous nextval — это функция от сиквенса как сущности БД наравне с таблицами. А нам нужно по сиксенсу на каждый альбом.
#IZHJYP/CJO / @komar --> #IZHJYP/FTD / 2871 день назад

@ckorzhik А, сорь, читал комментарии не деревом и не так тебя понял, всё верно.

#IZHJYP/FRL / @anonymous --> #IZHJYP/J21 / 2871 день назад
@anonymous Да, я мудак и пропустил FOR UPDATE (хотя подписал правильно).
#IZHJYP/KZ2 / @komar --> #IZHJYP/15R / 2871 день назад

Делаешь CREATE SEQUENCE на каждый альбом и получаешь number через nextval // наркоман-тян

#IZHJYP/5JF / @anonymous / 2871 день назад
@anonymous Я предлагаю лочить альбом. Крайне не рекомендую лочить таблицы. По поводу биды-биды ты все правильно расписал, но лок на альбом спасает.
#IZHJYP/FSE / @komar --> #IZHJYP/AYV / 2871 день назад

@anonymous Да хули вы так быстро отвечаете, я про альбомы пропустил, думал, вы тут строку с максимальным number в фотках лочить хотите.
Вообще-то я маньку экзаменировал, ппц вы.

#IZHJYP/0XY / @anonymous --> #IZHJYP/EPS / 2871 день назад

@anonymous >implying по поводу маньки ещё чтото не ясно

#IZHJYP/D67 / @anonymous --> #IZHJYP/0XY / 2871 день назад
@anonymous % createdb test % psql test test=> CREATE TABLE a (b integer); CREATE TABLE test=> CREATE UNIQUE INDEX c ON a (b); CREATE INDEX test=> INSERT INTO a (b) VALUES (1); INSERT 0 1 Дальше открываем два окошка и вводим в оба одновременно: BEGIN; SELECT pg_sleep(3); INSERT INTO a (b) (SELECT max(b)+1 FROM a); SELECT pg_sleep(3); COMMIT; http://dump.bitcheese.net/files/revisac/2017-02-08-002847_1213x344_scrot.png
#IZHJYP/U0Z / @komar --> #IZHJYP/EWL / 2871 день назад
@anonymous Поебемся? // Шучу. Фу блядь, теперь целый час стоять не будет.
#IZHJYP/MJK / @komar --> #IZHJYP/5JF / 2871 день назад

@anonymous Заёбно через ORM это делать, да и вообще от этих последовательностей иногда боль, пишешь миграцию, которая копирует данные из одной в модели (= таблицы), у тебя там на какой-нибудь колонке sequence, так потом приходится всё равно хуячить дополнительную миграцию, которая сырым скулем (потому что орм в такое не умеет, конечно), переинициализирует сиквенс, чтобы nextval был max(…)+1. Ну это всё боль орма, канеш.

#IZHJYP/YP0 / @anonymous --> #IZHJYP/5JF / 2871 день назад

Спасибо комару, можно расходиться.

#IZHJYP/RQ4 / @anonymous / 2871 день назад
теперь домашку по постгресу только на бнв буду постить!
#IZHJYP/LTJ / @anonymous / 2871 день назад

@anonymous Всегда так и делал!

#IZHJYP/71X / @anonymous --> #IZHJYP/LTJ / 2871 день назад

@komar и? Делаем retry и всё замечательно вставляется.

#IZHJYP/QHW / @anonymous --> #IZHJYP/U0Z / 2871 день назад
> Зачем Photo.number? Например, хотим урлы /albums/:album_id/:photo_number (/albums/1/1, /albums/1/2, /albums/2/1, /albums/2/2, …, ну ты понел) А зачем для этого number хранить? SELECT * FROM photos WHERE album_id = :album_id ORDER BY id LIMIT 1 OFFSET :photo_number
#IZHJYP/Y7P / @krkm / 2871 день назад

@krkm Затем, что ты куркума и читаешь жопой.

#IZHJYP/BH0 / @anonymous --> #IZHJYP/Y7P / 2871 день назад

@krkm В ТРЕД ВРЫВАЕТСЯ ДЖАВАСКРИПТ

#IZHJYP/AJ7 / @anonymous --> #IZHJYP/Y7P / 2871 день назад

@krkm > со строго последовательными и неизменяемыми (фотки можно удалять)

inb4 WHERE is_deleted = false и не удалять строки их таблицы фоток никогда.

#IZHJYP/L72 / @anonymous --> #IZHJYP/Y7P / 2871 день назад
@anonymous сорь, у меня в секвалайзе везде параноид, я забыл, что строки можно удалять
#IZHJYP/K2A / @krkm --> #IZHJYP/L72 / 2871 день назад
@anonymous Факт. В activerecord именно так рекомендую UPSERT делать, например: http://apidock.com/rails/v4.0.2/ActiveRecord/Relation/find_or_create_by Вот только нахуй тебе этот конкурентный пиздец? Нагрузку на базу это точно не снизит, код надежнее не сделает, и даже среднюю транзакцию не ускорит.
#IZHJYP/ONQ / @komar --> #IZHJYP/QHW / 2871 день назад
@anonymous Ой, хранить удаленные записи — это такой пиздец, каждый раз, каждый раз. Прибегаю к этому дерьму только в случаях, когда это действительно надо.
#IZHJYP/JQM / @komar --> #IZHJYP/L72 / 2871 день назад
@komar почему?
#IZHJYP/BI2 / @krkm --> #IZHJYP/JQM / 2871 день назад
@krkm Помойка вместо базы данных, половина переписанных на partial индексов и отстрелянные к хуям ноги всякий раз, когда нужно сходить в базу данных мимо ORM.
#IZHJYP/XLX / @komar --> #IZHJYP/BI2 / 2871 день назад
@anonymous Манька щас придет и накатает тебе 10 килобайтов о том, какой мы тут илиминтарщиной занимаемся, лучше б в x for x in photos if x попердолились.
#IZHJYP/4SL / @komar --> #IZHJYP/0XY / 2871 день назад
@komar хуй знает, обычно возможность восстановить данные, удаленные после последнего бекапа, никогда еще лишней не оказывалась
#IZHJYP/RDG / @krkm --> #IZHJYP/XLX / 2871 день назад
@krkm Мне гораздо дороже написать простой и корректно работающий код, чем за обосравшимся говно подтирать. И помойка вместо базы данных этому нихуя не помогает.
#IZHJYP/JJS / @komar --> #IZHJYP/RDG / 2871 день назад
@krkm потому что OFFSET 100500 будет тормозить?
#IZHJYP/25N / @anonymous --> #IZHJYP/Y7P / 2871 день назад
Я ебал в рот такие постановы, в моих вьюхах :photo_number это offset, это сделано для того, чтобы упростить листалку, право-лево это инкремент-декремент. Иначе при листании тебе придется передать в шаблон заранее подготовленные id каждой следующей картинки (а лучше нескольких). Олсо ты неправильно модели нарисовал, у меня photos есть многие-ко-многим, потому что одна фота может быть в нескольких альбомах тоже. Олсо у фоты (которая на самом деле тот же UploadedFile с exif) есть file_id, который автоинкремент и который остается потстоянным даже при удалении. Так что твой вопрос про модели вообще не к месту, здесь дело во вьюхе, а модели удовлетворяют задаче. У тебя здесь полная дичь нарисована и в рот нужно выебать дизайнера таких моделей.
#IZHJYP/5EJ / @je / 2870 дней назад
Олсо обосрался от твоего желания сериализовать доступ к базе через одну очередь для вставок, ты что блядь комара перечитал? СУБД сама сериализует доступ и если не хуярить один через один инсерт/делит, то нихуя не случится, только производительность просядет, потому что на каждую транзакцию до коммита создаются временные таблицы и сессии могут повисать, пока не завершатся другие. Это единственный минус прямого доступа из потоков. С другой стороны у тебя есть какое-то предложение как ты собираешься сериализовать доступ? Тупо очередь на инсерты и делеты неинтересно.
#IZHJYP/O4D / @je / 2870 дней назад
@je Мань, мы все знаем, что в твоей-то социалочке на гитхубе все сделано распиздато. Вопрос был более рабоче-крестьянский: как выдвать последовательные числа и не обосраться.
#IZHJYP/CQF / @komar --> #IZHJYP/5EJ / 2870 дней назад
@je > на каждую транзакцию до коммита создаются временные таблицы спамы, куки мань, завязывай с накротиками уже
#IZHJYP/QOQ / @komar --> #IZHJYP/O4D / 2870 дней назад
@komar Это высосано из моей социалочки, я не мог сдержаться, извини. Последовательные числа и без того выдаются, если стоит по крайней мере галочка автоинкремент. Зачем ты там на каждый альбом предлагал секвенс я не понял, разница какая от одного на все?
#IZHJYP/CBF / @je --> #IZHJYP/CQF / 2870 дней назад
@komar мань-хуянь-чухпук, иди дальше сериализуй доступ
#IZHJYP/JHZ / @je --> #IZHJYP/QOQ / 2870 дней назад
@je не огрызайся, мань, просто глотай и все
#IZHJYP/HY1 / @anonymous --> #IZHJYP/JHZ / 2870 дней назад
@je Потому что человек хочет по последовательности чисел на каждый альбом. Мне совершенно похуй, зачем.
#IZHJYP/ZZV / @komar --> #IZHJYP/CBF / 2870 дней назад
@komar Так этот ебантяй перепутал модели и вьюхи, все, что он хочет можно и через вьюху сделать, заменив :photo_offset на :file_id, при этом и :album_id передавать теряется актуальность.
#IZHJYP/97X / @je --> #IZHJYP/ZZV / 2870 дней назад
@je Мань, гляди, я тебе фокус покажу: % createdb manya % psql manya manya=> SELECT generate_series(1,10000000) AS a INTO test; SELECT 10000000 manya=> \timing Timing is on. manya=> SELECT count(*) FROM test; Time: 1794.635 ms manya=> SELECT count(*) FROM test; Time: 1318.623 ms Вопрос: какого хуя так долго, раз там доступ СЕРИАЛИЗУЕТСЯ, а незакоммиченные транзакции хранятся во ВРЕМЕННЫХ ТАБЛИЦАХ?
#IZHJYP/NGH / @komar --> #IZHJYP/JHZ / 2870 дней назад
`with rows as (update a set num = num + 1 where id = 2 returning id, num) insert into b (a,num) select id,num from rows;` работает, а `insert into b (a,num) select id,num from (update a set num = num + 1 where id = 2 returning id, num);` нет помогите. не хочу with.
#IZHJYP/UCC / @anonymous / 2870 дней назад
@anonymous Сообщение об ошибке читать не пробовал?
#IZHJYP/5U6 / @komar --> #IZHJYP/UCC / 2870 дней назад
@komar `ERROR: syntax error at or near "set"`
#IZHJYP/DW0 / @anonymous --> #IZHJYP/5U6 / 2870 дней назад
@anonymous Нахуй сам пойдешь или пригласить?
#IZHJYP/KUI / @komar --> #IZHJYP/DW0 / 2870 дней назад
@komar нахуй твои бесполезные комменты нужны?
#IZHJYP/6XS / @anonymous --> #IZHJYP/KUI / 2870 дней назад
@komar Хули ты палишь. Сейчас книжку ему выдашь, документацию перескажешь, а откуда потом такую хуйню брать? Я б вряд ли сам придумал про временную таблицу на каждую транзакцию.
#IZHJYP/III / @ckorzhik --> #IZHJYP/NGH / 2870 дней назад
@anonymous Нахуй твои вопросы вида «ничего ниработаит» нужны?
#IZHJYP/T0O / @komar --> #IZHJYP/6XS / 2870 дней назад
@komar чтобы ты исправил синтаксис.
#IZHJYP/8TP / @anonymous --> #IZHJYP/T0O / 2870 дней назад
@ckorzhik Да не ссы, он хуй догадается, вот увидишь.
#IZHJYP/D3N / @komar --> #IZHJYP/III / 2870 дней назад
@ckorzhik про временные таблицы в книжке и написано. просто надо особым образом прочитать.
#IZHJYP/YAM / @anonymous --> #IZHJYP/III / 2870 дней назад
@anonymous Можно на эту книжку посмотреть?
#IZHJYP/TVD / @ckorzhik --> #IZHJYP/YAM / 2870 дней назад
@ckorzhik какая-то теоритически-каноническая, хуй вспомню. давно это было.
#IZHJYP/OOT / @anonymous --> #IZHJYP/TVD / 2870 дней назад
@ckorzhik «Современные Системы Управления Реляционными Базами Данных: Вид С Дивана», том 1, издательство академии хуесосов
#IZHJYP/OQJ / @komar --> #IZHJYP/TVD / 2870 дней назад
@anonymous прям картинка такая и была нарисована тип таблицы копируются.
#IZHJYP/WKM / @anonymous --> #IZHJYP/OOT / 2870 дней назад
@anonymous Тебе бы кто угодно исправил, включая Маню, если бы ты схему принес. А так сиди и дрочи, хуило ленивое.
#IZHJYP/Z13 / @komar --> #IZHJYP/8TP / 2870 дней назад
@komar да схема такая же как у всех в этом треде. тупой штоле ` \d a; \d b Table "public.a" Column | Type | Modifiers --------+---------+------------------------------------------------ id | integer | not null default nextval('a_id_seq'::regclass) num | integer | default 0 Indexes: "a_pkey" PRIMARY KEY, btree (id) Referenced by: TABLE "b" CONSTRAINT "b_a_fkey" FOREIGN KEY (a) REFERENCES a(id) Table "public.b" Column | Type | Modifiers --------+---------+------------------------------------------------ id | integer | not null default nextval('b_id_seq'::regclass) a | integer | num | integer | Indexes: "b_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "b_a_fkey" FOREIGN KEY (a) REFERENCES a(id) `
#IZHJYP/XUP / @anonymous --> #IZHJYP/Z13 / 2870 дней назад
@komar очевидно что для исправления данного запроса схема нахуй не нужна.
#IZHJYP/RW3 / @anonymous --> #IZHJYP/Z13 / 2870 дней назад
@anonymous Бери свою мазню и уебывай, клоун.
#IZHJYP/R1R / @komar --> #IZHJYP/XUP / 2870 дней назад
@komar в следующий раз пиши просто "пук"
#IZHJYP/TZE / @anonymous --> #IZHJYP/R1R / 2870 дней назад
@je Я, если честно, совершенно не понимаю, как еще можно сделать цифорки «один, два, три, четыре» на каждый альбом с возможностью удаления произвольной без смешения всей хуйни.
#IZHJYP/088 / @komar --> #IZHJYP/97X / 2870 дней назад
@ckorzhik Да и вообще, вот вам смешно, а между прочим #B1POU0/B53
#IZHJYP/WUT / @komar --> #IZHJYP/III / 2870 дней назад
@komar ты просто как всегда не можешь выглянуть дальше залупы собственного носа и понять что путаешь денотационную и операционную семантики. от того и недопонимания в диалогах.
#IZHJYP/UIU / @anonymous --> #IZHJYP/WUT / 2870 дней назад
@anonymous ты не представляешь, как мне похуй
#IZHJYP/H43 / @komar --> #IZHJYP/UIU / 2870 дней назад
@komar Иди читай мануалы по транзакционной памяти, что на время транзакции происходит отщепление от основной таблицы, до комита никто из других сессий изменения не видит. Я назвал это временной таблицей, но в oracle это называется isolation levels и занимается сериализацией доступа сам оракл. Читай Oracle Isolation Levels https://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm
#IZHJYP/BW0 / @je --> #IZHJYP/NGH / 2870 дней назад
@komar настолько, что не можешь молчать об этом?
#IZHJYP/QU8 / @anonymous --> #IZHJYP/H43 / 2870 дней назад
@je Я же говорил.
#IZHJYP/PB1 / @komar --> #IZHJYP/BW0 / 2870 дней назад
@komar Дак и нахуй делать 1,2,3 на каждый альбом, об этом было в постановке опа? У него просто было, чтобы не смещалось. А вьюха, предполагающая offset все равно нуждается в переписывании на абсолютный айдишнег, потому что при удалении записей будут 1,2,10. Понимаешь?
#IZHJYP/CK2 / @je --> #IZHJYP/088 / 2870 дней назад
@komar Что ты говорил-то? Нахуй ты мне вообще принес свой профайлинг какой-то хуйни как доказательство чего-то невозможного, для тебя еще открытием будет, наверное, что временные таблицы тоже падают в особое табличное пространство и могут памиться на диск?
#IZHJYP/017 / @je --> #IZHJYP/PB1 / 2870 дней назад
@je При удалении из «один, два, три» циферки «два» и должно оставаться «один, три». Понимаешь?
#IZHJYP/MXP / @komar --> #IZHJYP/CK2 / 2870 дней назад
@je Особое Табличное Пространство. А ты боялся, что хуйни не будет. Все будет.
#IZHJYP/8JW / @komar --> #IZHJYP/017 / 2870 дней назад
@komar Так и в чем разница для тебя между "один,четыре" и "два,тристо,стопицот", ты понимаешь, что одним лишь секвенсом на каждый альбом проблема не решится, нужно в шаблон закидывать не относительное смещение от количества, а реальный айдишнег, и извлекать конкретный файл по этому айдишнику?
#IZHJYP/LRK / @je --> #IZHJYP/MXP / 2870 дней назад
@je мне кажется что ты пишешь не на русском, а на каком-то другом языке. употребляешь?
#IZHJYP/E31 / @anonymous --> #IZHJYP/LRK / 2870 дней назад
@je Разница в том, что я решил задачу, которую меня просили, а не ту, которая мне больше нравится.
#IZHJYP/OVY / @komar --> #IZHJYP/LRK / 2870 дней назад
@komar какой-то макако-подход, нимогли по-человечески обьяснить что ненужно.
#IZHJYP/KFK / @anonymous --> #IZHJYP/OVY / 2870 дней назад
@anonymous Такое, да.
#IZHJYP/A2G / @komar --> #IZHJYP/KFK / 2870 дней назад
@komar Но ты не решил задачу, пока не написал вьюху, которая сможет это делать, а моя вьюха это делать не сможет, то, что это было высосано из моей вьюхи намекает какбы урл.
#IZHJYP/0VP / @je --> #IZHJYP/OVY / 2870 дней назад
@anonymous А тебе все-то объясни да расскажи, но обязательно нужно что-то выссать в нулевой про модели и конкурентность, хотя они здесь вообще не при чем.
#IZHJYP/WT3 / @je --> #IZHJYP/KFK / 2870 дней назад
@komar Да, отлично.
#IZHJYP/V0B / @ckorzhik --> #IZHJYP/PB1 / 2870 дней назад
@ckorzhik не читай плз сразу много данных, у тебя таблицы расщепляются
#IZHJYP/JKW / @komar --> #IZHJYP/V0B / 2870 дней назад
@komar Пошол нахуй наркоман, на select нет никакой изоляции. И вообще съеби уже читать транзакционную память.
#IZHJYP/H64 / @je --> #IZHJYP/JKW / 2870 дней назад
@je Ну как это нету? Вот, допустим, делаю я BEGIN; а потом минуту читаю таблицу селектами. В это время приходят транзакции с инсертами и апдетйами и быстренько коммитятся. Я не должен видеть никаких изменений с тех пор, как сделал BEGIN;, а другие транзакции — должны. Стало быть, мне надо с самого начала РАСЩЕПИТЬ таблицу в ТРАНЗАКЦИОННУЮ ПАМЯТЬ или еще куда. Хана?
#IZHJYP/B6L / @komar --> #IZHJYP/H64 / 2870 дней назад
@je Давай обмазываться вьюхами и дрочить?
#IZHJYP/Y0W / @komar --> #IZHJYP/0VP / 2870 дней назад
@komar Чо за читаешь минуту селектами. Любой insert/update/delete вроде как дожидается читаталей, это азы блокировок. Иначе ты будешь блокироваться и на чтении тоже.
#IZHJYP/0N9 / @je --> #IZHJYP/B6L / 2870 дней назад
@je Покажи мне блокировку на чтение в PostgreSQL без явного указания в виде FOR UPDATE or so.
#IZHJYP/KRI / @komar --> #IZHJYP/0N9 / 2870 дней назад
@komar Мне больше интересно как быстро ты влетишь в дедлок своим охуительным решением. Вот здесь Data Lock Conversion Versus Lock Escalation && Deadlocks >Deadlocks most often occur when transactions explicitly override the default locking of Oracle. https://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm
#IZHJYP/504 / @je --> #IZHJYP/KRI / 2870 дней назад
@je Олсо, пишут про твой случай, когда он реально нужен и для чего используется. >Row-level locks are primarily used to prevent two transactions from modifying the same row. When a transaction needs to modify a row, a row lock is acquired. Oracle does not escalate locks from the row level to a coarser granularity.
#IZHJYP/EJO / @je --> #IZHJYP/504 / 2870 дней назад
@je Вот тут есть задача поинтереснее: https://goo.gl/ktXqX7
#IZHJYP/Z36 / @komar --> #IZHJYP/504 / 2870 дней назад
бля, сорь я весь тред не так прочитал // не прочитал
#IZHJYP/9T0 / @anonymous / 2870 дней назад
@je Читай, еще читай. Ставлю на то, что до конца дня до него не дойдет.
#IZHJYP/RF1 / @komar --> #IZHJYP/EJO / 2870 дней назад
@komar Хули мне читать-то, где ты ебанат тупорылый нашел update, который эксклюзивно нужно лочить, мудила тупая блядь. Никакую задачу ты этим не решил хуйло ты тупое, там модель данных прекрасно подходит и не в запросе дело. Update-блядь, хуейт, обмудок тупой. Там и без того один секвенс на все файлы, взял вьюху перевел с оффсета на file_id и делу край. Блокиратор ты хуев.
#IZHJYP/8OB / @je --> #IZHJYP/RF1 / 2870 дней назад
@komar А может и до конца жизни.
#IZHJYP/QLX / @ckorzhik --> #IZHJYP/RF1 / 2870 дней назад
@ckorzhik До конца жизни спорить неинтересно. Можно спалить ему четыре большие английские буквы и ждать до конца дня. Не, не дойдет.
#IZHJYP/AFW / @komar --> #IZHJYP/QLX / 2870 дней назад
@je Все, истерика. Теперь со мной никто спорить не станет. :(
#IZHJYP/SWP / @komar --> #IZHJYP/8OB / 2870 дней назад
@komar Съеби уже.
#IZHJYP/R02 / @je --> #IZHJYP/SWP / 2870 дней назад
@je В PostgreSQL нет блокировок на чтение. В PostgreSQL никто не ждет читателей, кроме vacuum. PostgreSQL — append-only база данных.
#IZHJYP/FUY / @komar --> #IZHJYP/R02 / 2870 дней назад
@anonymous Ну дык исправь уже, раз не нужна.
#IZHJYP/D1I / @komar --> #IZHJYP/RW3 / 2870 дней назад
@komar В папире про дизайн постгреса хотели сделать его аппенд-онли, по-моему, чтоб можно было по логам любые снапшоты брать. Забавный папир, рекомендую.
#IZHJYP/8ER / @ckorzhik --> #IZHJYP/FUY / 2870 дней назад
@ckorzhik Дык он и так аппенд онли с функцией «попылесосить». Вообще я бы не отказался в такие снапшоты потыкать. От мультиверсионных костылей поверх SQL я блюю при одном их упоминании. Неудобно — пиздец.
#IZHJYP/6AG / @komar --> #IZHJYP/8ER / 2870 дней назад

@je > Дак и нахуй делать 1,2,3 на каждый альбом, об этом было в постановке опа?

Да ебать тебя в рот, ты совсем отсталый, что ли, русский язык даже не понимаешь?

Зачем Photo.number? Например, хотим урлы /albums/:album_id/:photo_number (/albums/1/1, /albums/1/2, /albums/2/1, /albums/2/2, …, ну ты понел)

  • пример данных в табличке, для тупых специально заполнил
#IZHJYP/MRC / @anonymous --> #IZHJYP/CK2 / 2870 дней назад

@je > offset
Да откуда ты оффсет высрал-то, блядь? Ни слова про листалку в оп-посте не было. А был темплейт урлов и примеры этих урлов с пояснением, зачем оно вообще надо.

#IZHJYP/57N / @anonymous --> #IZHJYP/CK2 / 2870 дней назад

@je Что ты несёшь, мань? В оп-посте была максимально конкретная задача. Комар решил задачу минут за 10 оптимальнейшим (на мой непрофессиональный взгляд) способом. Нахуй ты дерейлишь тут?

#IZHJYP/P0F / @anonymous --> #IZHJYP/LRK / 2870 дней назад
@anonymous Бля сорь, я вообще нихуя не понял что вы делали тогда.
#IZHJYP/L1W / @je --> #IZHJYP/P0F / 2870 дней назад
@komar Ну да, уже понял про вакум. Была лекция у постгреспро на тему хороших костылей поверх, https://www.youtube.com/watch?v=HhauYiCF1Ak (пдф, чтоб не смотреть видео https://github.com/scalegenius/pg_bitemporal/blob/master/docs/bitemporal__PG_Open_2016.pdf ) Я до сих пор не разобрался, но да, набор костылей.
#IZHJYP/23V / @ckorzhik --> #IZHJYP/6AG / 2870 дней назад

@je > но в oracle это называется isolation levels
Именно в оракл! Уникально-инновационная фича! Нигде такого не было? Что? Какой ещё ANSI SQL?.. Это новая база? Где скочать???

#IZHJYP/BLF / @anonymous --> #IZHJYP/BW0 / 2870 дней назад
@anonymous Наверное в каждой это есть, иначе как бы работали транзакции по-твоему.
#IZHJYP/FQ6 / @je --> #IZHJYP/BLF / 2870 дней назад
@ckorzhik Да видел я ту тетечку. Все ее научные изыскания. как бы они хороши не были, перечеркиваются одним: база данных превращается в ебаную помойку. Про битемпоральность же я задумывался 0 раз за всю жизнь. Обычно когда приходит пидорас из интернета и гадит в мою вику, мне хочется сделать DELETE и еще VACUUM FULL поверх. И мне не хочется хранить историю того, как я ее от говна почистил.
#IZHJYP/T34 / @komar --> #IZHJYP/23V / 2870 дней назад
@je Без абстрактных категорий изоляции транзакции бы работали заебись, наверное. Только никто бы не мог в двух словах объяснить, как именно.
#IZHJYP/JU4 / @komar --> #IZHJYP/FQ6 / 2870 дней назад
@komar правдивая сенсация: ведущие ученые данных РФ стирают историю
#IZHJYP/9JX / @anonymous --> #IZHJYP/T34 / 2870 дней назад
@anonymous Я не ученый, я быдлокодер.
#IZHJYP/NAY / @komar --> #IZHJYP/9JX / 2870 дней назад
@komar Пруф или undefined behaviour.
#IZHJYP/QG4 / @je --> #IZHJYP/JU4 / 2870 дней назад
@je ты б хоть написание behavior выучил сначала, прежде чем позориться
#IZHJYP/Z5I / @anonymous --> #IZHJYP/QG4 / 2870 дней назад
@komar тут ты зря иронизируешь. в сикеле всё так - в теории одно, а на практике крокодил, залупа и стонбрейкер знает что ещё.
#IZHJYP/7FH / @anonymous --> #IZHJYP/JU4 / 2870 дней назад
@anonymous Кого ебет твоя теория?
#IZHJYP/RAY / @komar --> #IZHJYP/7FH / 2870 дней назад
@komar действительно, нахуя она существует, если к практике она не привязана? хотя, погодите, я знаю ответ: чтобы сикель фанаты ЧУВСТВОВАЛИ ПРЕВОСХОДСТВО упоминая РЕЛЯЦИОННУЮ АЛГЕБРУ и могли дальше игнорировать прогресс в области.
#IZHJYP/NXW / @anonymous --> #IZHJYP/RAY / 2870 дней назад
@anonymous Фанаты давно разочаровались и перешли целиком в pl/sql, в котором снова наебывают циклы и радуются.
#IZHJYP/BCM / @je --> #IZHJYP/NXW / 2870 дней назад
@anonymous Мне от этой реляционной алгебры уверенности в том, что мой код не обосрется, ни хуя не прибавляется. А вот от знания деталей реализации — еще как.
#IZHJYP/E0M / @komar --> #IZHJYP/NXW / 2870 дней назад
@je А с наркотиками все-таки завязывай.
#IZHJYP/7KJ / @komar --> #IZHJYP/BCM / 2870 дней назад
@komar нахуя вообще нужна теория? наблюдаю на практике что рыночек нынче переполнен жс/сикель-сантехниками с логикой уровня если А то В, это я каждый день делаю. а что если С? то хуй знает, пока не попробуешь - узнать невозможно. отсюда происходят такие строки в резюме/вакансиях "10 лет в айти", "постоянно пробую что-то новое", "дрочу без устали" которые в произведении и дают количество попыток, а значит и количество знаний что если ASDF то ZXCV. бывает ли метод более примитивный чем метод проб и ошибок?
#IZHJYP/1BT / @anonymous --> #IZHJYP/E0M / 2870 дней назад
@anonymous К Мане обращайся. У него интересные задачи с компутор сцаенсом каждый день, а от меня отъебись.
#IZHJYP/XM8 / @komar --> #IZHJYP/1BT / 2870 дней назад
@komar так нахуй мне подтверждение. мне нужно опровержение.
#IZHJYP/E43 / @anonymous --> #IZHJYP/XM8 / 2870 дней назад
@anonymous Жопу подставляй, буду тебе опровергать.
#IZHJYP/W55 / @komar --> #IZHJYP/E43 / 2870 дней назад
@komar ты какой-то пидор (не гей)
#IZHJYP/6NC / @anonymous --> #IZHJYP/W55 / 2870 дней назад
@komar нихуя не исправляется короче. залупа не поддерживает такой синтаксис. оказывается даже with относительно недавно появился.
#IZHJYP/9C5 / @anonymous --> #IZHJYP/D1I / 2870 дней назад
@anonymous Мозги у тебя недавно появились, ебанашка.
#IZHJYP/LF1 / @komar --> #IZHJYP/9C5 / 2870 дней назад
@komar Он все верно говорит, with update не все субд поддерживают. А ты хуй соси губой тряси.
#IZHJYP/EKY / @je --> #IZHJYP/LF1 / 2870 дней назад
@je Мань, тебе покукарекать здесь больше не о чем?
#IZHJYP/D90 / @komar --> #IZHJYP/EKY / 2870 дней назад
@komar Я, скорее всего, некомпетентно пижжу, но по-моему, это не для твоей уверенности, а чтоб не ебаться тебе с императивщиной и как белый человек множества выбирать вместо дёрганья по одной записи.
#IZHJYP/VV9 / @ckorzhik --> #IZHJYP/E0M / 2870 дней назад
@komar Хуй соси губой тряси.
#IZHJYP/TD7 / @je --> #IZHJYP/D90 / 2870 дней назад
@ckorzhik Я всю жизнь выбираю без ебли в императивщину не зная о существовании реляционной алгебры, брат жив. А вот без знания того, что в каждой строке прикручен айдишник транзакции, можно такого навыбирать, что потом неделю дебажить будешь.
#IZHJYP/A9S / @komar --> #IZHJYP/VV9 / 2870 дней назад
@komar т.е. ты признаёшь что они у меня есть. впрочем, какая разница, если у тебя их нет.
#IZHJYP/A8K / @anonymous --> #IZHJYP/LF1 / 2870 дней назад
@anonymous Да уебывай уже со своей домашкой, умница ты наша.
#IZHJYP/XXC / @komar --> #IZHJYP/A8K / 2870 дней назад
@komar пук
#IZHJYP/M2L / @anonymous --> #IZHJYP/XXC / 2870 дней назад
@komar Ну а у дедов, которые до тебя жили, субд на табличках и реляционной хуйне не было, они императивно выбирали. Я не понял, куда идёт этот тред, но да, можно писать запросы без знания этой алгебры, а парсеры-оптимизаторы запросов - хуй знает, не занимался, врать не буду.
#IZHJYP/S6J / @ckorzhik --> #IZHJYP/A9S / 2870 дней назад
@ckorzhik Тред идет туда, что манька косплеит тырпрайзного долбоеба по компутор сцаенсу, а я косплею сантехника по комплюхтерам.
#IZHJYP/B2N / @komar --> #IZHJYP/S6J / 2870 дней назад
@komar дае вжился в роль?
#IZHJYP/LNV / @anonymous --> #IZHJYP/B2N / 2870 дней назад
@anonymous Да мне несложно.
#IZHJYP/DYD / @komar --> #IZHJYP/LNV / 2870 дней назад
@ckorzhik Ну вот я недавно задался вопросом как быстрее выполнится запрос - если написать фильтр в join on(), или в where, по сути должно в join on быстрее работать, так как явно сужает выборку раньше построения всего запроса. А по факту работает эквипенисуально, потому что оптимизация. Где теперь твоя алгебра?
#IZHJYP/7O5 / @je --> #IZHJYP/S6J / 2870 дней назад
> Зачем Photo.number? Например, хотим урлы /albums/:album_id/:photo_number (/albums/1/1, /albums/1/2, /albums/2/1, /albums/2/2, …, ну ты понел) here is where you're wrong
#IZHJYP/EYN / @anonymous / 2870 дней назад
@komar ле, апсёрт
#IZHJYP/FCD / @mugiseyebrows --> #IZHJYP/ONQ / 2870 дней назад
@komar > целый час стоять не будет у тебя fail2ban на твоей колбосе стоит штоле
#IZHJYP/1HM / @mugiseyebrows --> #IZHJYP/MJK / 2870 дней назад

@je >СУБД сама сериализует доступ
TIL кто-то в реальной жизни использует ISOLATION LEVEL SERIALIZABLE

#IZHJYP/G7Z / @anonymous --> #IZHJYP/O4D / 2870 дней назад

@je сука, блять, как научится так же умело скатывать треды?

#IZHJYP/4DD / @anonymous --> #IZHJYP/0N9 / 2870 дней назад

ура, прочитал весь тред // прочитал

#IZHJYP/ICK / @anonymous / 2870 дней назад

мань, погугли mvcc, авось где-то в будующем у тебя будет шанс не обосраться и хотя бы говорить верные термины

#IZHJYP/V7E / @anonymous / 2870 дней назад

@anonymous Оно всё равно работает не так (в постгресе), как следует из названия, и не обеспечивает строго последовательное выполнение транзакционных блоков.

#IZHJYP/FU2 / @anonymous --> #IZHJYP/G7Z / 2870 дней назад
@anonymous Бля, теперь я негодую. Хули ты палишь?
#IZHJYP/5AD / @komar --> #IZHJYP/V7E / 2870 дней назад
@komar На самом деле у него этот же MVCC был по ссылке, просто не в 4х буквах, а развёрнуто.
#IZHJYP/7CU / @ckorzhik --> #IZHJYP/5AD / 2870 дней назад
@komar Т.е. даже ты недооценил глубину источника хуиты.
#IZHJYP/IJK / @ckorzhik --> #IZHJYP/5AD / 2870 дней назад
@ckorzhik Э, нихуя. По ссылке (которую я не читал, ну и похуй) были уровни изоляции, которые можно имплементировать как при помощи read lock’ов, так и при помощи MVCC.
#IZHJYP/HAT / @komar --> #IZHJYP/7CU / 2870 дней назад
@komar Есть раздел про реализацию, как раз где картинки.
#IZHJYP/3Z5 / @ckorzhik --> #IZHJYP/HAT / 2870 дней назад
@ckorzhik Я вообще нихуя не понял, что там нарисовано, если честно.
#IZHJYP/SIB / @komar --> #IZHJYP/3Z5 / 2870 дней назад
@komar Да и не нужно, я тоже не читал, блевать тянет от менеджерских доков. Однако "Multiversion Concurrency Control" там есть.
#IZHJYP/N6Y / @ckorzhik --> #IZHJYP/SIB / 2870 дней назад
@komar знаменитое ОТП, оракл не читал шта ли?
#IZHJYP/A76 / @anarchy --> #IZHJYP/8JW / 2869 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.