
Phil
15.01.2017
09:50:53

Roman
15.01.2017
09:54:00

Daniel
15.01.2017
09:54:51
1. SELECT FOR UPDATE сложно составлять и поддерживать. Может у кого-то мозг заточен, но когда у меня любое изменение 1-2 рабочих дня занимает, это трындец. Плюс многоэтажный SELECT выдаёт большую неудобную простыню. Или её резать, или дублировать селекты потом. И транзакция обязывает это всё вместе держать, очевидно.
2. Раздраконить по разным базам. Небольшие базы легче реплицировать (если например к pgsql/mysql этот термин вообще применим). Их легче восстанавливать. Некоторые данные можено лить в те базы, которые для этого предназначены. Хоть в аэроспайк, хоть в S3. Да, да, я знаю, что в MySQL можно держать индексы, а в S3 саму картинку. Но пункт (1) :)
можно подумать, твою логику на очередях будет проще поддерживать и верифицировать. не надо, фил, в это лезть.

Google

Daniel
15.01.2017
09:56:09
а про раздраконить - ввопрос в размере.

Roman
15.01.2017
09:56:28
но можно же и покрутить
Да. Просто раньше нужно было выставлятьстобы использовать многочдерность, а сейчас наоборот. Кажется в 1.6 поменялось.

Roman
15.01.2017
09:57:41

Daniel
15.01.2017
09:59:56

Roman
15.01.2017
10:01:23

Daniel
15.01.2017
10:01:39
я всегда делаю rw
по накладным расходам он не сильно отличается

Roman
15.01.2017
10:03:57
По поводу задачи Максима. Ставишь LevelDB - key/value хранилище с персистентностью. При закачки файла записываешь его атрибуты - путь, время создания. Запускаешь отдельную горутину с таймером, которая запускает периодически воркер. Воркер тупо пробегает по списку, проверяет экспирейшин тайм и асинхронно удалят файлы. Я думаю что на миллион файлов будет пригодин тупой for без изъебов. 1 кбайт кода и одна полезная билиотека.

Daniel
15.01.2017
10:04:26
зачем левелдб, а?
ну вот зачем?

Phil
15.01.2017
10:04:37

Google

Roman
15.01.2017
10:04:46

Daniel
15.01.2017
10:04:59
а, делайте что хотите

Phil
15.01.2017
10:05:03

corpix
15.01.2017
10:05:21

Phil
15.01.2017
10:05:47

Roman
15.01.2017
10:06:02
а, делайте что хотите
Ну на самом дел можно инициализацию делать путем сканирования существующих файлов. Тогда нет, не нужно.

Daniel
15.01.2017
10:06:12
о!
прорезался голос разума
но сканирование все одно нужно делать, так что и вариантов нет

Roman
15.01.2017
10:07:09
При старте запусаем сканер - который набивает массив. Потом таймер, воркер и все дела.
Го офигенен именно этой возможностью все класть в память. Круче только Ерланг, где можно еще и код на ходу менять.

Daniel
15.01.2017
10:09:59
а?!
я на любом языке сделал бы ровно то же самое

Roman
15.01.2017
10:10:35

Daniel
15.01.2017
10:10:53
и табличка "сарказм"

Roman
15.01.2017
10:11:26

Roman
15.01.2017
10:11:47

Maxim
15.01.2017
10:12:10
Сорян, добрался до конца истории
Короче, если совсем отказаться от БД, то либо распределять файло по системе директориев, либо сканить сами файлы на предмет их свойств и от этого прыгать дальше, я так понял.

Google

Maxim
15.01.2017
10:14:34
С БД тогда аналогично чекать записи по расписанию и если найдутся устаревшие - по их данным выпиливать.
В общем - хочешь-не-хочешь, а какой-нибудь процесс с периодичной проверкой вешать надо. Ладно, я понял.

Roman
15.01.2017
10:18:40

Maxim
15.01.2017
10:19:19

Roman
15.01.2017
10:24:15
Начни с системной библиотеки - прочитать список директорий и список файлов.

Petr
15.01.2017
10:49:43
Привет, как определить новое поведение методов для именованных типов? type Celsius float64
var c Celsius
var p Celsius = 14.2
func main() {
fmt.Println(p)
}
func (p Celsius) String() string { return fmt.Sprintf("%g°C", p) } я вот так делаю, но это только для p
Можно как нибудь для всего типа переопределить?

Serge
15.01.2017
11:18:26

hamper ?
15.01.2017
11:21:21

Serge
15.01.2017
11:21:40

Serge
15.01.2017
11:23:58

Roman
15.01.2017
11:27:35

Petr
15.01.2017
11:30:29

Serge
15.01.2017
11:30:52
Можно для тупых?
К нам пришел файл. Мы его сохранили в ФС. Потом мы иногда читаем этот файл. Мы не должны читать файл, если он старше 24 часов, так?

Maxim
15.01.2017
11:37:06

Google

Serge
15.01.2017
11:39:32
Я пытаюсь смотреть выше

Maxim
15.01.2017
11:39:45

Serge
15.01.2017
11:39:48
Иначе, всё и правда плохо

Maxim
15.01.2017
11:40:07

Serge
15.01.2017
11:40:27
Что случится, если файл продолжит лежать?
Вот в том месте, где это мешает, надо вставить проверку и удалять старое.
А лучше игнорировать и ставить задачу отдельному треду/демону на удаление, чтобы не тратить время на io

Admin
ERROR: S client not available

DreamingKitten
15.01.2017
11:50:48
по-моему проще сделать обычный FIFO буфер, куда пихать имена файлов и проверять только тот что на выходе, т.к. все что за ним явно будут моложе
удалили его, начинаем проверять только следующий за ним и так далее
скачали новый — сунули в очередь
если файлы уже есть, то проверить один раз все, отсортировать по времени загрузки и опять таки сунуть в фифо буфер
ио минимальный, тред вообще может спать до того как самый старый файл достигнет нужного возраста

Serge
15.01.2017
11:58:36

Maxim
15.01.2017
13:00:37
Мою библу для Telegraph ретвитнул чувак с косарём фолловеров. 0_0
И судя по профилю он какой-то монстр (но Go не знает, судя по всему):
https://julianxhokaxhiu.com/

Timur
15.01.2017
13:05:18

Phil
15.01.2017
13:17:22

Google

Phil
15.01.2017
13:18:47

Roman
15.01.2017
13:18:55

Maxim
15.01.2017
13:19:28

Roman
15.01.2017
13:21:38
Тогда cron find ...

Maxim
15.01.2017
13:22:30
Тогда cron find ...
Буквально недавно долбался с кроном в докере. Не вышло, пришлось сунуть его в корень самого сервака, а уже в нём (в скрипте крона) втыкаться в докер и что-то там делать.
#психанул

Roman
15.01.2017
13:24:07
find /opt/files/ -mtime +1|xargs rm -f - не благодари!

DreamingKitten
15.01.2017
13:25:08

Maxim
15.01.2017
13:25:15

Roman
15.01.2017
13:25:29
http://www.binarytides.com/linux-find-command-examples/

DreamingKitten
15.01.2017
13:25:38
это проход по всем файлам и удаление всех, изменённых более суток назад

Maxim
15.01.2017
13:26:10

Roman
15.01.2017
13:26:39
Костыль люди берут когда надо идти, а нога болит.

DreamingKitten
15.01.2017
13:27:00
вообще у уважающих себя серверов, которые имеют привычку писать логи, должен быть встроенный логротатор, где такое поведение можно задать штатными средствами
а если это не логи, то трудно понять почему нужна такая высокая точность отслеживания возраста файла, потому что вот такой вот костыль справится будучи запущенным раз в сутки

Roman
15.01.2017
13:27:52
Я уверяю что этого костыля хватит пока количество твоих друзей не перевалит за тысячу или больше

Мерлин
15.01.2017
13:27:57

DreamingKitten
15.01.2017
13:28:37

Мерлин
15.01.2017
13:29:04

Maxim
15.01.2017
13:29:09