@proGO

Страница 1276 из 1674
Vladimir
09.03.2018
08:06:09
очередь это все-таки список задач
Так его задача о юзере сообщить

Anatoly
09.03.2018
08:06:12
а тут чот странное, типа есть база какая-то, надо по ней гулять и отправлять сообщения

и может быть что-то еще

Vladimir
09.03.2018
08:07:26
Но в любом случае, я бы сделал канал из которого бы читал юзеров сразу и слал бы через что там хочется, а мапу бы не трогал

Google
Anatoly
09.03.2018
08:07:36
так это по другому делается. Если уж так тупо. То добавляешь в базу юзера и кладешь в _очередь_ задачу отправить сообщение, после чего вэйкапишь воркера

ну конечно иначе)

redis например )

подписываешь клиента на изменения и все, они автоматически получат инфу о новой записи

можно и самому реализовать

Anatoly
09.03.2018
08:08:52
но ходить часами по структуре данных, это конеш не очень

Daniel
09.03.2018
08:08:53
redis - то еще дерьмо. эта фича у него, конечно, суперская, но недостатков полно. так, на всякий случай

Anatoly
09.03.2018
08:09:09
Я бы не тащил редис. Можно взять каналы и гонять структуры
если речь идет о миллионах данных, я бы уже думал о сервисе

m
09.03.2018
08:09:23
а почему в качестве решения выбрано посылать один месседж в секунду?
В секунду или в минуту, интервал потом подберу. Мне важно на нодах держать более-менее последнее состояние с информацией о юзерах. Устаревшее состояние тоже ок, если это единичные случаи. И если вдруг какая-то нода упала и поднялась, залить в неё постепенно это состояние.

Google
Anatoly
09.03.2018
08:09:36
реди может просто хранить, если надо пижже транспорт -> rabbitMQ

Ilnur
09.03.2018
08:09:45
а почему обходить надо в случайном порядке?

Anatoly
09.03.2018
08:10:00
потомучто мапа по другому не умеет

m
09.03.2018
08:10:10
ради одной этой проблемы городить редис, БД и прочее не вижу никакого смысла. Всё только на Go и в памяти.

m
09.03.2018
08:11:25
Вот я очень не хотел, чтобы обсуждение съехало в сторону от исходного вопроса. А оно таки съехало.

Daniel
09.03.2018
08:11:36
я бы хотел заметить, что 1М секунд - это больше 10 дней

Anatoly
09.03.2018
08:11:54
Вот я очень не хотел, чтобы обсуждение съехало в сторону от исходного вопроса. А оно таки съехало.
тебе ответили по вопросу конкретно и ты даже благодарил. Дальше мы уже сами )

m
09.03.2018
08:11:59
Ну значит пачками по 1000 юзеров.

Vladimir
09.03.2018
08:12:19
Вот я очень не хотел, чтобы обсуждение съехало в сторону от исходного вопроса. А оно таки съехало.
Ну так если у тебя случайный порядок обхода, то как ты будешь гарантировать что уведомил о всех?

m
09.03.2018
08:12:50
никаких гарантий. отправилось - хорошо. не отправилось - не страшно, потом отправится.

Vladimir
09.03.2018
08:13:12
Daniel
09.03.2018
08:13:46
Ну значит пачками по 1000 юзеров.
на самом деле, конечно, совсем не так. 1. есть способ пропихнуть в стартующий сервис все состояние. обычно это субд, но можно и от сервиса наладить отправку. 2. на каждое изменение отправляется пакет всем нодам. обход мапы тут нужен только на этапе 1, и он должен быть максимально быстрый

m
09.03.2018
08:14:39
а важно ли отправить всех юзеров?
важно, чтобы в пределе они все отправились. пусть не с первой итерации, но в и тоге отправились.

Daniel
09.03.2018
08:15:12
это ответ "не важно", как мы понимаем

Google
m
09.03.2018
08:15:25
xPushkin
09.03.2018
08:15:35
Что это за система такая..

Daniel
09.03.2018
08:16:11
недетерминированная! это, видимо, игра типа "найди и воспроизведи баг"

m
09.03.2018
08:16:27
это ответ "не важно", как мы понимаем
не так. если не важно, то можно и одного юзера отправить и ок. А мне нужно именно так сделать, чтобы алгоритм старался по возможности всех отправить.

Vladimir
09.03.2018
08:16:40
Нет никаких гарантий.
Ну так значит обходя мапу все юзера могут никогда не отправится

Vladimir
09.03.2018
08:17:05
И ты ещё получишь замечательную задачу - следить за тем кто отправился

m
09.03.2018
08:18:26
результат отличный, ибо выходит система не зависящая от падения любого числа нод.

одной ноды достаточно для работы.

и никаких Бд с их репликациями, бэкапами...

Daniel
09.03.2018
08:19:29
хорошо бы все же предусмотреть гарантии того, что система приходит в консистентное состояние за конечное время

Daniel
09.03.2018
08:19:55
именно эту задачу решают БД с их репликациями и бекапами

Anatoly
09.03.2018
08:20:31
уже пришли к моему решению или еще подождать сотню коментов?)

Sergey
09.03.2018
08:20:42
"базы данных это сложно, поэтому я решил сделать свою базу данных без базы данных"

Anatoly
09.03.2018
08:20:49
лол)

Ilnur
09.03.2018
08:20:59
уже пришли к моему решению или еще подождать сотню коментов?)
лист для юзеров и отдельная очередь для отправки?

m
09.03.2018
08:21:02
Отчего же минутами. Упал канал у провайдера. Там и дни могут быть, как вот Битрикс страдал недавно...

Vladimir
09.03.2018
08:21:21
и никаких Бд с их репликациями, бэкапами...
А чем твое решение отличается от бд?

Google
Anatoly
09.03.2018
08:21:24
лист для юзеров и отдельная очередь для отправки?
конеш. либо все в одном редиска + подписки

Vladimir
09.03.2018
08:21:40
Кроме того что никогда не гарантирует консистентность

Ilnur
09.03.2018
08:21:54
ну это по идее самое очевидное решение и логичное

Anatoly
09.03.2018
08:22:03
ну так о чем и речь

m
09.03.2018
08:22:12
Кроме того что никогда не гарантирует консистентность
которая мне желанна, но не необходима.

Anatoly
09.03.2018
08:22:28
обход ляма объектов это не правильно

и секунда пади еще задержка на отправку ?))

откуда эта секунда

xPushkin
09.03.2018
08:23:09
Admin
ERROR: S client not available

Anatoly
09.03.2018
08:23:16
секунда это бесконечность )

m
09.03.2018
08:23:31
Блохчейн - это свежая мысль. Ага.

Думал прикрутить ещё машин лёнинг.

и пусть он решает, как мэпу обойти.

Anatoly
09.03.2018
08:24:46
да на этом можно степень защитить

все так делают!

Vladimir
09.03.2018
08:25:08
@MichaelMonashev так чем плохо решение с очередью изменений отдельной от мапы?

m
09.03.2018
08:25:10
будь как все!

Google
Anatoly
09.03.2018
08:25:42
и не очередь! прекрати ее так называть

m
09.03.2018
08:25:45
@MichaelMonashev так чем плохо решение с очередью изменений отдельной от мапы?
упала нода. на неё надо залить не только изменения, но и все другие данные тоже.

Anatoly
09.03.2018
08:26:56
сё, я пас

Ilnur
09.03.2018
08:26:57
так можно для этого научить ноду когда она поднимация запрашивать весь стейт

Vladimir
09.03.2018
08:27:04
упала нода. на неё надо залить не только изменения, но и все другие данные тоже.
ну так в таком случаи ты обходишь всю мапы (1М элементов это мало кстати), и ставишь все данные в очередь на отправку. Проблема в чем?

и не очередь! прекрати ее так называть
я не прекращу называть очередь очередью )

m
09.03.2018
08:27:25
это вариант конечно.

Anatoly
09.03.2018
08:27:26
засранец!

xPushkin
09.03.2018
08:27:57
упала нода. на неё надо залить не только изменения, но и все другие данные тоже.
https://medium.com/@mycoralhealth/code-your-own-blockchain-in-less-than-200-lines-of-go-e296282bcffc

m
09.03.2018
08:33:14
я вот подумал, а можно ли for k,v:=range map{ обложить локом и анлоком?

Александр
09.03.2018
08:34:14
а нахрен?

Arch
09.03.2018
08:35:06
m
09.03.2018
08:35:12
т.е. что-то вроде users.RLock() for user, props:=range users.map { users.RUnlock() // тут что-то делаем time.Sleep(time.Minute) users.RLock() } users.RUnlock()

Arch
09.03.2018
08:35:57
юзай в юзере sync.RWmutex

m
09.03.2018
08:37:11
это позволит итерироваться с паузами не по снэпшоту (как в sync.Map), а по текущему map-у

Arch
09.03.2018
08:38:19
это позволит итерироваться с паузами не по снэпшоту (как в sync.Map), а по текущему map-у
а как вариант почему не снять снапшот и не итерироваться по нему? Если это надо

m
09.03.2018
08:38:54
потому что в снэпшоте старые данные.

Vladimir
09.03.2018
08:39:58
потому что в снэпшоте старые данные.
тебе же не важна консистентность

m
09.03.2018
08:40:50
я не вижу смысла отправлять старые данные, если можно придумать, как отправлять свежие.

Sergey
09.03.2018
08:41:07
давайте прикрутим к map MVCC и транзакции

и всё ещё будем говорить, что базы данных сложные

Страница 1276 из 1674