Васильев Виктор
Ну сами клиенты об оффлайне тебе точно не расскажут
Васильев Виктор
особенно если у них оффлайн внезапно начался
Васильев Виктор
Просто можешь иметь допустим время последнего обращения к серверу и проверять если допустим да Н промежуток времени прошел то можно считать оффлайн
Васильев Виктор
А зачем вытаскивать все? Почему в БД запросом не выбирать только то что нужно?
Anonymous
Просто на эти операции много ресурсов
Anonymous
Запустить поток чтобы проверял у всех время последнего обращения и вешал оффлайны?
Васильев Виктор
А тебе нужна в реальном времени информация?
Anonymous
Типа будет собирать инфу при отрисовке html
Васильев Виктор
Ну тогда поток ведь и не нужен. СОотстветсвеннои нагрузка будет не существенная же
Васильев Виктор
Или сколько у тебя пользователей?
Anonymous
Или сколько у тебя пользователей?
Пока нисколько Но хочу сделать чтобы выдерживала большой объем
Васильев Виктор
1) Это тогда преждевременная оптимизация. Оптимизировать можно бесконечно 2) Ну давай подумаем что ты подразумеваешь под большим объемом? Допустим 100 000 пользователей и эту страницу с онлайном будут вызывать ну допустим 1000 раз в минуту. Это не сильно большой объем. Обычный SQL запрос котоырй сам посчитает все если правилньо оптимизировать его он не нагрузит очень сильно
Васильев Виктор
Да. Для начала создай готовый продукт. Ведь возможно это не будет узким местом твоей программы и по сути оно тебе и не нужно будет. А времнеи ты потратишь много
Anonymous
На счёт sql запроса Простой where status=online не катит?
Васильев Виктор
Тебе даже проще можно делать
Васильев Виктор
Можно так. А можно просто разницу во времени последнего запроса пользователя допустим смотреть. И если разница между текущим времени и последним больше N то он оффлайн и индекс не забывай
Васильев Виктор
Вполне себе нормальное решение. Если станет узким местом тогда и сомтри как это дело оптимизировать
Anonymous
Окей, спс
Petr
Ну если есть возможность, можно просто процедуру написать, которая будет булевое значение проставлять и все, на самом деле можно много чего придумать, лучше конечно уже по обстоятельствам ориентироваться
Petr
Я делал таски, которые обсчитывали действия пользователей и запускались периодически по шедулеру, собирал все в отдельную табличку, но там конечно своя специфика была, почему было так сделано
Daniel
вот именно статистику живые-отвалившиеся надо не по базе собирать, а репортить из приложения
Oleg
вот именно статистику живые-отвалившиеся надо не по базе собирать, а репортить из приложения
Хм... и как приложение зарепортит, если у него сеть отвалилиась?
Daniel
действительно - как же оно это сделает....
Anonymous
как у time.Time время поменять?
Anonymous
чтобы было time.Now() - 15 минут
Anonymous
add(duration) есть
Anonymous
а как отнять?
Oleh
а как отнять?
да просто с минусом используй add(-duration)
Васильев Виктор
https://golang.org/pkg/time/#Time.Sub
Aleksey
https://golang.org/pkg/time/#Time.Sub
Это не время возвращает и не длительность принимает а наоборот, время от времени отнимает и возвращает длительность.
Васильев Виктор
Действительно. ЧТо-то я немного не так понял вопроса :)
Oleh
зато там написанно как юзать Add() To compute t-d for a duration d, use t.Add(-d)
Anonymous
Чем отличаются эти массивы?
Anonymous
один с указателями другой без
Anonymous
оба выводят одно и тоже
Мерль
Anonymous
этим и отличаются
какой тип лучше юзать? у них есть разница в скорости?
Васильев Виктор
Опять оптимизируешь?)
Васильев Виктор
Разница в типах
Васильев Виктор
там ты хранишь указатель а там структуру
Васильев Виктор
логично?
Maksim (Ellrion)
какой тип лучше юзать? у них есть разница в скорости?
А ты попробуй заменить например при присвоении эмаунт с константы на рандом например и увидишь разницу
Мерль
какой тип лучше юзать? у них есть разница в скорости?
есть, но на практике мало существенная лучше стараться использовать слайсы (это не массивы), хранящие по значению, это поможет избежать проблем с нулевыми указателями и аллокаций меньше
Васильев Виктор
А ну и кстати да ^
🏁Александр
можно даже не рандом а i подставить из цикла
Васильев Виктор
Короче чтобы не мучать парня. ВОпрос: Ты знаешь разницу между указателем и объектом?
Мерль
Чем отличаются эти массивы?
первая функция с ошибкой указатели будут указывать на одну структуру
Anonymous
?
var blah Blah объявляется в цикле
Васильев Виктор
Васильев Виктор
указатель все на ту же переменную
Anonymous
А как тогда это фиксить?
Васильев Виктор
Т.е. ты запихал один и тот же объект кучу раз в массив
Anonymous
make чототам
Васильев Виктор
Чтобы это пофиксить тебе нужно пофиксить базовые свои знания
Daniel
какой тип лучше юзать? у них есть разница в скорости?
Го так интересно устроен, что надо мерять. Я взял за правило использовать значения везде, где можно
Васильев Виктор
почитайтур по гу с самого начала и до конца и узнай что такое указатель
Васильев Виктор
Просто даже если мы тебе сейчас это поясним и поффиксим дырка в твоих щзнаниях не восполнится. А эта дырка очень важная
Мерль
Anonymous
Хотел узнать есть ли резон переписывать на эти указатели массивы
Anonymous
Потому что хоть так хоть так работает
Васильев Виктор
https://play.golang.org/p/9diQJOvdJpU
У тебя локальная область видимости и в новой области видимости ты создаешь новую переменную локальную
Васильев Виктор
соответственно другая ситуация
Васильев Виктор
Хотел узнать есть ли резон переписывать на эти указатели массивы
Не экономь на спичках. Ты пытаешься искать оптимизации там где это не нужно. Тут скорость ДАЖЕ если и разная то разница будет слишком маленькая чтобы ее заметить.
Aleksey
Указатели сложнее убирать сборщику мусора
Васильев Виктор
используй то что логичнее. Используй тип который по там нужен там быть
Мерль
Хотел узнать есть ли резон переписывать на эти указатели массивы
1. Делаешь рандомизированные бенчмарки 2. Меряешь 3. Если выгода в контексте всего приложения больше чем 50% — переписываешь код
Мерль
иначе даже не стоит и чесаться
Васильев Виктор
Чаще всего по таким мелочам не стоит чесаться потому что выгода еще строится из времени написания самих бенчмарков)
Aleksey
Ссылку использовать, если нужно нил проверять
Anonymous
а кстати нет