@gogolang

Страница 1269 из 1630
Olzhas
01.08.2018
08:50:54
вы модуль пытаетесь собрать как исполняемый файл

исправьте и будет вам щастье
если не заработает, я начну работать работу, а не в чатиках сидеть

Данила
01.08.2018
08:53:12
исправьте и будет вам щастье
Заработало. Спасибо.

Olzhas
01.08.2018
08:53:26
Заработало. Спасибо.
фух, можно лениться дальше

Google
Daniel
01.08.2018
08:58:54
таааак

я все пропустил

Oleg
01.08.2018
08:59:31
давай я повторю

Daniel
01.08.2018
08:59:56
Ага

Oleg
01.08.2018
09:03:21
Есть REST API, в нем метод для частичного обновления сущности PATCH. Он может быть реализован как: 1) https://tools.ietf.org/html/rfc7386 2) https://tools.ietf.org/html/rfc6902 3) пересылать полностью состояние сущности, при этом запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией 4) пересылать полностью состояние сущности, при этом придумывать блокировки на время редактирования 5) пересылать полностью состояние сущности, при этом слать клиента лесом если он пытается изменить устаревшую версию сущности. Что из этого кто использует, что проще, как реализовывать на golang?

Daniel
01.08.2018
09:04:27
я бы, если бы ТЗ позволяло, делал 5

тут несколько плюсов:

1. не надо реализовывать логику мерджа

2. не надо думать о том, кто первый встал и чьи тапки

3. на случай конкурентного изменения у нас есть четкий индикатор того, что что-то пошло не так

Daniel
01.08.2018
09:09:10
нет, конечно

Google
Oleg
01.08.2018
09:09:23
Daniel
01.08.2018
09:09:39
там только sequence надо хранить, и сравнивать с тем, что приехало

Аркадий
01.08.2018
09:09:45
Тогда мб проще на уровне бд атомарно записать?

Daniel
01.08.2018
09:10:10
и проверку сиквенса на триггер?

можно и так

Аркадий
01.08.2018
09:11:19
Получается одна транзакция

Oleg
01.08.2018
09:59:31
еще мнения будут?

Alexander
01.08.2018
10:04:20
Есть REST API, в нем метод для частичного обновления сущности PATCH. Он может быть реализован как: 1) https://tools.ietf.org/html/rfc7386 2) https://tools.ietf.org/html/rfc6902 3) пересылать полностью состояние сущности, при этом запоминать все версии сущностей, вычислять дельту по сравнению с нужной версией 4) пересылать полностью состояние сущности, при этом придумывать блокировки на время редактирования 5) пересылать полностью состояние сущности, при этом слать клиента лесом если он пытается изменить устаревшую версию сущности. Что из этого кто использует, что проще, как реализовывать на golang?
я бы сделал так 1) Шлется некий GET запрос, на ендпоинт, которым мы показываем, что хотим отредактировать некую сущность. Сервер делает лок на сущность и в ответ на клиента передается некий токен 2) На клиенте происходит какое-то редактирование сущности и потом вся сущность передается на сервер, вместе с полученным токеном 3) Сервер проверяет что сущность открыта на редактирование клиентом именно с таким токеном и производит обновление сущности 4) Все время, пока кто-то уже открыл сущность на редактирование, все остальные такие запросы отбиваются с ошибкой "юзер такой-то уже редактирует такую сущность". 5) У всех запросов на редактирование есть определенный таймаут, во избежание перманентного лока на редактирование

Alexander
01.08.2018
10:15:05
а мы просто завели /lock/unlock/update :)
так у меня примерно такая же схема

просто на lock если кто-то уже занял шлется отлуп. и есть автоматический unlock, если что-то пошло не так

Aleksandr
01.08.2018
10:15:33
я бы сделал так 1) Шлется некий GET запрос, на ендпоинт, которым мы показываем, что хотим отредактировать некую сущность. Сервер делает лок на сущность и в ответ на клиента передается некий токен 2) На клиенте происходит какое-то редактирование сущности и потом вся сущность передается на сервер, вместе с полученным токеном 3) Сервер проверяет что сущность открыта на редактирование клиентом именно с таким токеном и производит обновление сущности 4) Все время, пока кто-то уже открыл сущность на редактирование, все остальные такие запросы отбиваются с ошибкой "юзер такой-то уже редактирует такую сущность". 5) У всех запросов на редактирование есть определенный таймаут, во избежание перманентного лока на редактирование
это pessimistic lock. Зависит от бизнес задач, но зачастую слишком жирновато эксклюзивно локать. Лучше оптимистик лок

Alexander
01.08.2018
10:16:00
это pessimistic lock. Зависит от бизнес задач, но зачастую слишком жирновато эксклюзивно локать. Лучше оптимистик лок
так-то да, я рассматриваю сущности, которые редактируются вручную и редко будет конкуренция

условно - бэк-офис в котором работают менеджеры

Lesha
01.08.2018
10:18:15
Гайз, не очень понимаю куда вопрос лучше задать, поэтому сюда. Есть задачка. Дано много (миллиарлды) многомерных векторов с одинаковой размерностью. На вход подается новый вектор и нужно найти N ближайших к нему по метрике косиносного расстояния (или евлидова). На чем такое можно построить? Или лучше свой велосипедик писать на гошечке?

Oleg
01.08.2018
10:18:21
на мой взгляд надо рассчитывать на три edgecase. 1) Редактирование с контролем номера версии сущности на уровне формы 2) Редактирование на уровне отдельного поля 3) Очень конкурентное редактирование с организацией потока сообщений о каждом элементарном изменении и рассылкой (гуглодоки)

Lesha
01.08.2018
10:19:06
ну и да, время на запрос очень ограничено

Daniel
01.08.2018
10:20:33
а мы просто завели /lock/unlock/update :)
О, стейтфул протокол поверх стейтлес. Это мы любим...

Google
Lesha
01.08.2018
10:21:22
Roman
01.08.2018
10:21:28
Lesha
01.08.2018
10:23:08
Железом не обделены. Что-то вроде интелов E5-2620 и много памяти

Roman
01.08.2018
10:24:08
Железом не обделены. Что-то вроде интелов E5-2620 и много памяти
На arm/mips и прочих странных архитектурах неинтересно запускаться, да?

Lesha
01.08.2018
10:24:50
Vladimir
01.08.2018
10:25:09
а это даст какой-то существенный прирост?
скорее существенные проблемы

Lesha
01.08.2018
10:25:50
ну по сути, кроме этой задачи такие сервера не будет ничем другим заниматься. трафика достаточно там будет

Lesha
01.08.2018
10:28:35
rtree? а дальше spatial базы данных. я бы начал с postgis смотреть
А вот это уже интересно, спасибо за наводку, изучу вопрос

Daniel
01.08.2018
10:34:18
но хорошо не будет - там, очевидно, полный перебор

Lesha
01.08.2018
10:34:58
но хорошо не будет - там, очевидно, полный перебор
полный перебор для каждого запроса? Боюсь что это не очень оптимально

Daniel
01.08.2018
10:35:56
а как вы хотите? индексы хорошо работают на одномерных векторах

на многомерных - не очень

но у вас-то вообще евклидово расстояние (даже не манхеттен)

Lesha
01.08.2018
10:37:11
вся база векторов будет создавать какое-то пространство и мы его можем поделить на части. И при поиске ближайших векторов к заданному просто охватывать ближайшие области. Можно это представить в двумерном виде как карта. Ткнул в глобус пальцем, и ищешь ближайшие города на материке. Нет смысла на других искать

Daniel
01.08.2018
10:37:34
можем и поделить, не вопрос

будут ошибки на границах областей

Google
Lesha
01.08.2018
10:40:50
если углубиться в задачу - это word2vec поисковой двиг я думал может уже что-то готовое есть, что бы не изобретать

очень понравилось описание R-дерева попробую туда капнуть https://ru.wikipedia.org/wiki/R-дерево_(структура_данных)

Admin
ERROR: S client not available

Мерлин
01.08.2018
10:51:11
тот же постгрес или более специализированная

Аркадий
01.08.2018
11:12:14
Ребята, скажите пожалуйста, как сделать так, чтоб можно было повторно в переменную присвоить значение : token, _ := uuid.NewV4() token = token.String()

не работает вторая строка

Daniel
01.08.2018
11:12:54
OMG

Аркадий
01.08.2018
11:14:04
да, но мб можно както освободить или типо того?

Daniel
01.08.2018
11:14:31
а?!

Mush
01.08.2018
11:14:31
нет

Аркадий
01.08.2018
11:15:01
тоесть по любому вторую переменную создать?

Alexander
01.08.2018
11:15:02
Аркадий
01.08.2018
11:15:18
это вам в javascript надо
потому и спрашиваю, что не знаю

Daniel
01.08.2018
11:15:33
на самом деле - вы хотите функцию, которая будет возвращать string

Mush
01.08.2018
11:15:40
тоесть по любому вторую переменную создать?
если переменная появилась, тип у нее изменить нельзя

Виктор
01.08.2018
11:15:42
потому и спрашиваю, что не знаю
так можно же поиграться в консоли, или вот тут хотя бы https://play.golang.org/

Google
Daniel
01.08.2018
11:16:39
да
ну так сделайте ее :)

Аркадий
01.08.2018
11:16:52
Аркадий
01.08.2018
11:40:03
Lesha
01.08.2018
12:37:38
rtree? а дальше spatial базы данных. я бы начал с postgis смотреть
внутри postGIS как раз R-Tree имплиментация, но там размерность вектора максимум 4, что не подходит, а жаль(

Но я попробую еще понизить размерность векторов, может быть как раз до 4 получится и все заработает.

Aleksey
01.08.2018
13:41:40
Aleksey Kislitsa: Что можно почитать про go generator, кодогенерацию и правильное и неправильное использование?

Daniel
01.08.2018
13:46:11
go generate - это просто способ вызвать команды, прописанные в специальных комментах

а что за команды туда писать - это вопрос к разработчику

в общем и целом никакого стандарта (пока?) на это нет

Artem
01.08.2018
13:56:33
Aleksey Kislitsa: Что можно почитать про go generator, кодогенерацию и правильное и неправильное использование?
из официального есть https://blog.golang.org/generate и https://golang.org/cmd/go/#hdr-Generate_Go_files_by_processing_source

Данила
01.08.2018
14:40:16
По каким-то причинам не удаётся распарсить JSON https://play.golang.org/p/hOYnh73ISLd

Точнее, возвращается пустой результат

Страница 1269 из 1630