Size: a a a

Эликсир и Вунш

2019 August 28

AB

Alexey Bolshakov in Эликсир и Вунш
Sergey Samokhvalov
ну да, в таком случае можно конечно. правда опять же, тебе нужен и прямой и обратный индекс
так и было. две етс таблицы
источник

AB

Alexey Bolshakov in Эликсир и Вунш
придумал что-то типа шаблона и завернул в макрос. получилось красиво вполне
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
ну и все равно это в одном потоке делать придется, чтоб гонок не было, правильно ведь?)
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
а если в одном потоке, то можно и без всяких хитростей с counters обойтись)))
источник

AB

Alexey Bolshakov in Эликсир и Вунш
не. я делал в разных потоках
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
ну фиг знает, как у тебя получилось) что-то с трудом представляю)) разве что у тебя парсинг слишком медленный был, и оно тупо гонки не ловило
источник

AB

Alexey Bolshakov in Эликсир и Вунш
ловило бы
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
если бы не ... ?)
источник

AB

Alexey Bolshakov in Эликсир и Вунш
есть хитрость. записи то атомарные
формируешь новый ID c помощью каунтера
делаешь сначала запись в обратный индекс
:ets.insert_new и оно возвращает тебе новую ты запись добавил или нет. если новую, то ты добавляешь с этим индексом запись в прямую таблицу с этим ID.
если же вернулось false то параллельно с тобой какой-то другой процесс уже добавил это. и ты можешь дальше ничего не делать. но мне там надо было вернуть ИД созданный. поэтому там ets.lookup и возвращаешь ID
источник

AB

Alexey Bolshakov in Эликсир и Вунш
хитрость грязной не является, тк эти все ets'ы работают на мутексах в случае чего
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
такс, щас попробую понять))
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
а, ну это что-то типа optimisic lock-ов
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
ну может да, в общем-то что-то такое может работать
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
тестил отдельно во много потоков?
источник

AB

Alexey Bolshakov in Эликсир и Вунш
мнезия же начинает там в кластерные движухи дёргать. даже будучи запущенной в одну ноду и инмемори. на этом прям сильно терялась скорость. ну как сильно. по сравнению с ЕТС сильно
источник

AB

Alexey Bolshakov in Эликсир и Вунш
Sergey Samokhvalov
тестил отдельно во много потоков?
да
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
что-нить типа 10 потоков одновременно пишут, числа от 1 до 100000, потом по факту считываешь, считаешь сумму
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
ну ок, если работало что-то в этом духе, значит скорее всего правильно)
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
хотя, в случае необходимости перестройки индекса это все равно не поможет)
источник

SS

Sergey Samokhvalov in Эликсир и Вунш
ну всмысле, если добавится там что-то в середину
источник