Yura
Daniel
и все данные в память влезли, небойсь
Daniel
тогда да, будет быстро
Kirill 🎹 📷
Кто-нибудь собирается на 2018.codefest.ru ?
Kirill 🎹 📷
https://2018.codefest.ru/
Yura
и все данные в память влезли, небойсь
Даже если не влезли, btree пока-что самый быстрый способ искать данные на диске, и все lsm адепты это признают.
(Ок, может и есть более лучшие способы, но они гораздо менее популярны чем btree и lsm).
Правда, при определенных условиях итерация по lsm может быть быстрее, это правда.
Daniel
если не влезли - будет как у всех
Pawel
и дженерики
round же дали в 1.10 по просьбам трудящихся, глядишь и дж..в подкинут
Pawel
boltdb же
sqlite же если не хочешь в постгрес
Pawel
то ли я тупой, то ли гвозди, но с boltdb почему то всегда всё, кроме самого простого, получается на много хуже, чем с любым SQL - и тормозит, и говнокода много
Daniel
это не болт, это KV такие
Pawel
да, конечно
Anonymous
Кстати интересно, а что если бы автор той статьи попробовал azul с профилем оптимизации
Mister Tomato
у автора статьи цель другая была
🏳️ Phil
Kirill
🏳️ Phil
Хито?
Anonymous
А кто не тормоз?
/dev/null. Я сам офигел - скорость записи упирается в скорость чтения из любого источника!
Kirill 🎹 📷
🏳️ Phil
Я просто токен oauth2 сервер сделал. И он на boltdb. Но пока не пробовал в проде
Daniel
для твоих целей оно ок
Anonymous
Andrey
Всем привет. 2 Вопроса тем, кто использует vscode. Использую тэги в го "-tags".
1. Как сделать так чтобы отладчик запускался с определёнными тэгами? С компиляцией проблем нет. таски настроил. Что надо пропистаь в launch.json? Мне надо дебаггером по тесту пройтись.
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "test",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${workspaceRoot}",
"env": {},
"args": [],
"showLog": true
}
]
}
2. Как сделать чтобы линтер теги видел?
Kirill 🎹 📷
стартуем ноду без http апи и тд
Aleksandr
коллеги, есть несколько воркеров, получающих задания из продьюсера, который кидает задания в канал. Внутри воркера получаю задания вот таким манером:
for {
select {
case task := <-crawler.tasks: // chan *Task
log.Printf("Task: %v", task)
crawler.handleTask(task)
case <-crawler.workersStop:
return
}
}
сейчас наблюдаю как из канала приходит сначала нормальный Task, а в другом воркере nil, причем продьюсер отправил в канал только первый таск. Это какая-то гонка?
Andrei 🦉
Yura
badgerdb
Пока багнутый. Ну и, честно подразумевает, что у вас ssd.
В том смысле, что значения больше порога не хранятся в lsm, а значит, скорее всего, итерация обернётся рандом-ридом. Тот же boltdb кладёт значения in-place, и итерация будет быстрее.
Но вот мне потребовалось перелопатить 800GB данных, взял амазоновский инстанс с быстрым nvme, отключил fsync, и job done. Thank you, badgerdb.
Kirill 🎹 📷
Пока багнутый. Ну и, честно подразумевает, что у вас ssd.
В том смысле, что значения больше порога не хранятся в lsm, а значит, скорее всего, итерация обернётся рандом-ридом. Тот же boltdb кладёт значения in-place, и итерация будет быстрее.
Но вот мне потребовалось перелопатить 800GB данных, взял амазоновский инстанс с быстрым nvme, отключил fsync, и job done. Thank you, badgerdb.
Andrei 🦉
Zver
Aleksandr
Denis
потому что этот task crawler.handleTask(task) заблокирует цикл
а если там сотня сразу свалится запросов?
Andrei 🦉
Andrei 🦉
Andrei 🦉
Aleksandr
Andrei 🦉
Andrei 🦉
если ok == false, то канал уже был закрыт
Aleksandr
Pawel
а
Pawel
а канал с какой целью закрываете?
ainu
Клевый канал, лучший в телеграмме по Go, не надо закрывать
Kirill 🎹 📷
ор
Ruslan
Хех
Kirill 🎹 📷
Кто-нибудь поедет на codefest?
Aleksandr
а канал с какой целью закрываете?
Канал закрываю после закрытия воркеров при шатдауне приложения. Видимо почему то канал закрывается раньше чем тушится воркер. Переделаю этот момент
Aleksandr
Sergey
Всем привет, пишу api сервер для мобильного приложения, уперся в вопрос аутентификации пользователя, читал много всего, мнения розняться, так что лучше для этого использовать? Какую то свою реализацию(выдавать пользователю рефреш и acess токены и хранить их в redis) или использовать что то готовое, как я понима в oauth2 смысла никакого нет, так это не публичное api, напривьте кто шарит, что лучше или куда смотреть.
Alexander
2-legged oauth2 - это вот прямо то, что нужно
Alexander
> выдавать пользователю рефреш и acess токены и хранить их в redis
В общем-то это почти oauth2 и есть, в простом варианте
Daniel
https://jwt.io/introduction/
Sergey
Понял, почитаю и про то и про то, спасибо)
Oleh
Подскажите пож как реализовать подобное. Мне необходимо на один endpoint повесить несколько экшенов, ко мне приходит GET-request по адрессу
/requests/
/requests/123123
/requests/abcdefg
И для каждого из них мне необходимо вызывать различные хэндлеры как можно реализовать такое ? разница между вторым и третьем лишь в том, что во втором будет uint, а в третьем string
Aleksandr
проверять req.Path, в зависимости от пути подсовывать разные хэндлеры
Oleh
так путь каждый раз будет другим, у меня есть идея лишь в том, чтобы парсить в middlewares и из неё раскидывать по хэндлерам
Pawel
либо используйте маршрутизатор с регэкспами, например, chi:
r := chi.NewRouter()
r.Route("/requests", func(r chi.Router) {
r.Get("/", ...) // GET /requests
r.Get("/{[0-9]+}", ...) // GET /requests/123123
r.Get("/{[A-Za-z]+}", ...) // GET /requests/abcdefg
})
Oleh
Aleksandr
Aleksandr
пересказал второй раз, что первый раз написал
Kirill
хттп, тсп, юдп
хттп сервер наверно самый тяжелый из них, а тсп юдп относительно друг друга как?
в го
Заур
В смысле тяжёлый?
Kirill
по использования ресурсов, рам цп
Sergei
а часто вы в го _реализуете_ tcp?
Kirill
Sergei
Kirill
ничего кроме хттп не использовал
но сейчас возникла задача, что бы на одной локальной машине держалось n сервисов и общалось между собой, хотелось выбрать наименее затраный в плане ресурсов вариант
Sergei
ты-то понятно реализовывал