
andrew
17.02.2018
14:48:44
а можно по подробнее про тулинг?

Никита
17.02.2018
14:49:15
Может вопрос не по теме, но есть ли у кого то статья или видео обьясняющее разницу между разного рода Базами Данных? Типа чем реляцонные хуже/лучше графовых, в чем преимущества и недостатки, и т.п.

meehalkoff✪
17.02.2018
14:50:35

Pawel
17.02.2018
14:54:15

Google

Никита
17.02.2018
14:54:51
Конкретный пример можно?
В какой ситуации

Stanislav
17.02.2018
15:02:31

Andrew
17.02.2018
15:03:18

Pawel
17.02.2018
15:05:13
Конкретный пример можно?
Деревьев очень много в предметных областях, но работая с реляционными СУБД их стараются избегать, так как работа с ними вызывает много боли. Оптимизация обхода графа для SSD накопителей вообще нечеловеческими усилиями достигается (если это вообще возможно). Статей на эту тему написано - море. Графовые БД всё это более или менее решают
именно так и есть
а можно по подробнее про тулинг?
я использую универсальный JetBrains-плагин для всех БД в goland-е, но можно взять софтину, на подобие этой http://sqlitebrowser.org/


tsov
17.02.2018
16:00:20
разница в том, что нужно добиться в конкретной задаче - скорости, экономии ресурсов, сложных выборок, отказоустойчивости
любые субд проигрывают по скорости хранению структур inmemory, это очевидно. но дальше возникают вопросы с долговременным хранением и восстановлением оттуда
когда данных очень много, их накладно все держать inmemory (раньше так было)
хотя современные тенденции (sap hana) возвращают нас обратно к kv in memory, за счет наращивания оперативной памяти на серверах

Vladimir
17.02.2018
16:18:42

Slava
17.02.2018
16:22:44

Google

The
17.02.2018
17:03:04
И там и тут вижу одних и тех же людей. Уже по чуть-чуть начинаю путать эти чаты.

Pawel
17.02.2018
17:03:18
разница в том, что нужно добиться в конкретной задаче - скорости, экономии ресурсов, сложных выборок, отказоустойчивости
Не-а. Любую SQL БД можно без напрягов использовать в качестве kv storage, а вот обратное утверждение не верно.
А разница именно в ACID. Который в распределённых SQL БД достигается такими ужасными вещами, как шардинг и репликация. Которые в принципе невозможно сделать нормально, без усложнения системы на 1-2 порядка. В nosql ни о каком acid речи не идёт, все гарантии в пределах одного ключа или документа. Поэтому распределённые хранилища nosql не сложнее локальных. Вот для этого nosql и нужен - это ественный выбор для распред. БД без транзакций.
А вот это вот всё про производительность и in-memory в контексте SQL vs NoSQL - оно абсолютно ни о чём, потому что тут всё зависит от конкретной схемы данных, а не от СУБД.

Code
17.02.2018
17:11:03

The
17.02.2018
17:11:56
в данном случае - нету смысла. по крайней мере я не вижу его, может на низком уровне это как-то влияет
аргументы в горутины нужно в цикле передавать
и ещё, вместо time.Sleep, посмотрите про sync.WaitGroup.
им легко пользоваться. Сначала делается wg := &sync.WaitGroup{}, затем перед вызовом горутины
wg.Add(1)
go func() {
defer wg.Done()
// ваш код
и в конце wg.Wait()

Pawel
17.02.2018
17:14:36
очень странный пример и не менее странный вопрос. "передавать переменные внутрь горутины через аргументы функции" - это что вообще?

Никита
17.02.2018
17:14:51
Такой вопрос. Есть хэндлер запросов API, есть группы вызовов(users, records, ...). Каждый вызов возвращает ответ через функцию normalResponse (OK) или errorResponse (not OK). Количество строк растет, ориентироваться все сложнее и сложнее. Думал разбить хэндлер на части по группам а потом их импорировать в одном файле. Но тогда проблема с функциями возврата ответа - от них зависят все вызовы, что с ними делать? тоже выносить в отдельный файл и импортировать в каждый файл группы вызовов?

The
17.02.2018
17:16:37

Никита
17.02.2018
17:18:53
Конкретнее показать не могу сейчас

Pawel
17.02.2018
17:21:59


The
17.02.2018
17:24:51
Конкретнее показать не могу сейчас
Мне сходу не понятны ваши хендлеры, я сейчас пилю подобный веб-проект, и кажется тоже столкнулся с такой-же проблемой. у меня есть пакет status, где есть всякие status.NotFound(), status.InternalError() и прочее. Я просто его импортирую, и в зависимости от того, вернула ли мне модель sql.ErrNoRows, или что-то вроде этого, вызываю хендлер и делаю return. Но честно говоря, решение идиотическое и я думаю как от него уйти. Пока думаю сделать имплементацию ServeMux, но пока не придумал как это мне поможет, все нету времени набросать тестовый проект с несколькими моделями. Ещё можно глянуть в сторону context.Context, он хоть и подходит больше для контроля горутин, но и структурировать все это дело позволяет.


Никита
17.02.2018
17:25:39
Мне сходу не понятны ваши хендлеры, я сейчас пилю подобный веб-проект, и кажется тоже столкнулся с такой-же проблемой. у меня есть пакет status, где есть всякие status.NotFound(), status.InternalError() и прочее. Я просто его импортирую, и в зависимости от того, вернула ли мне модель sql.ErrNoRows, или что-то вроде этого, вызываю хендлер и делаю return. Но честно говоря, решение идиотическое и я думаю как от него уйти. Пока думаю сделать имплементацию ServeMux, но пока не придумал как это мне поможет, все нету времени набросать тестовый проект с несколькими моделями. Ещё можно глянуть в сторону context.Context, он хоть и подходит больше для контроля горутин, но и структурировать все это дело позволяет.
Вот у меня похожее


The
17.02.2018
17:28:58
Проблема в том, что везде тонны бойлерплейта вроде
if err != nil {
if err == sql.ErrNoRows {
status.NotFound(w)
return
} else {
//
Тут либо err превращать в какой-то HTTPError, со своим status, а в хендлерах делать if err != nil { handlerError(HttpError) return }
Либо Mux имплементировать, и через ServeHTTP и контексты разруливать. Но не уверен, что там по финалу выйдет лучше.
ну и дробить, дробить, дробить.. делать экшены, выносить из хендлеров логику, и т.д.

Google

Vladimir
17.02.2018
17:30:50

Pawel
17.02.2018
17:32:58

Vladimir
17.02.2018
17:33:37
Вообще что такое acid?

Pawel
17.02.2018
17:48:22
А чем сложно?
на настройку и тестирование нод требуется на много больше инженеро-часов, чем на связывание нод для монги. Ну и для обеспечения требований по latency может потребоваться принять много нетривиальных решений и компромисов. В nosql всё это проще
clickhouse не использовал, но по отзывам коллег она очень гут. ну и она колоночная, это не тоже самое что постгрес горизонтально масштабировать (я чисто теоретически говорю)
acid - атомарность, согласованность, изолированность, устойчивость

Code
17.02.2018
17:52:15

Pawel
17.02.2018
17:53:46
горутине естественно пофигу, вам - нет. глобальные переменные - это в любом случае зло в читом виде безотносительно к горутинам.

Code
17.02.2018
17:55:18

Vladimir
17.02.2018
17:59:48

Andrey
17.02.2018
18:00:06

Vladislav
17.02.2018
18:10:47


Pawel
17.02.2018
18:47:51
А в чем отличие того как масштабировать горизонтально?
Более простые схемы шардинга. По отзывам сисадминов прописать конфиг-сервера для разделения данных монги и постгреса - это две большие разницы (я не занимался).
Плюс для монги более простая конфигурация нод сама по себе, поскольку на сопоставимых объёмах данных нагрузка на сситему с монгой в целом меньше по понятным причинам

Vladimir
17.02.2018
18:49:46
@theiced я правильно понимаю, что если сделать более сложную конфигурацию нод в монге, то она станет как постгрес?

Denis
17.02.2018
18:54:46
Товарищи, а когда не правильно имплементировал интерфейс, есть тулзы проверить что не так?

Pawel
17.02.2018
18:57:00

Vladimir
17.02.2018
18:58:10

Pawel
17.02.2018
18:59:02

Denis
17.02.2018
19:00:31

Google

Pawel
17.02.2018
19:03:03

Michael
17.02.2018
19:23:10

Slava
17.02.2018
19:27:07
Нельзя в лоб сравнивать sql и nosql
Базы бывают совершенно разные и под разные задачи
Постгрес продвинутее и производительнее sqlite, но последний - самая популярная субд. Просто потому что задачи разные
Даже mysql с разными движками ведёт себя по рпзному

Pawel
17.02.2018
19:30:58
самая популярная - потому что не надо с настройкой сервера возиться, что умеют не только лишь все

Slava
17.02.2018
19:33:06
:) нет, дело не в этом

Admin
ERROR: S client not available

Slava
17.02.2018
19:33:26
Просто это самое стабильное встраиваемое субд

Michael
17.02.2018
19:33:29
на декстопе данные профилей пользователя хранили в sqlite, вот для этого sqlite хорошо подошла

Мерлин
17.02.2018
19:38:16
Тогда у тебя просто не соберётся ошибочный код если тип не удовлетворяет интерфейсу

Denis
17.02.2018
19:40:04

Greg
17.02.2018
19:42:29
@kirilldanshin будет времячко - загляни в слак русский, в рандом канале оставил мессадж
Не знаю, смотришь ты его или нет :)

Pawel
17.02.2018
20:02:35

Slava
17.02.2018
20:07:21
В ios так же
Жаль на го ещё не допортировали, хотя и есть проекты

Vladimir
17.02.2018
20:08:05

Google

Slava
17.02.2018
20:08:26
Ты можешь сам потестировать ;)

Vladimir
17.02.2018
20:08:48

Slava
17.02.2018
20:09:14
Посмотри в гугле

Vladimir
17.02.2018
20:10:15

Slava
17.02.2018
20:10:40
Быстрее != производительнее

Vladimir
17.02.2018
20:12:29
Быстрее != производительнее
Так, вот я теперь серьезно не понимаю в чём разница между этими двумя словами. В словарях которые я видел это синонимы

Pawel
17.02.2018
20:18:18
А где были тесты sqlite vs postgre?
не корректно требовать такие тесты, эти технологии решают принципиально разные задачи
sqlite относительно примитивный, постгрес обладает практически не ограниченными возможностями по оптимизации. поэтому чисто по логике аналогичный объём данных в постгресе будет быстрее процеситься чем в sqlite. скорее всего

Vladimir
17.02.2018
20:21:07

Pawel
17.02.2018
20:22:48
а что там написано?

Vladimir
17.02.2018
20:24:21

Let Eat
17.02.2018
20:53:48

Code
17.02.2018
20:55:59

Michael
17.02.2018
21:20:33
там самое интересное
плюс sqlite может начать загибаться на относительно простых запросах
(не) достатки postgres - это не embedded и не one file storage

Andrey
17.02.2018
21:34:15
есть уже rqlite)
https://github.com/rqlite/rqlite

Denis
17.02.2018
22:55:57
Хочу переопределить тип возвращаемого значения, лучше решения как я понимаю нет?
type DataAccess struct {
collection *mgo.Collection
}
func (d *DataAccess) Find(query interface{}) Querier {
return d.collection.Find(query)
}

Kirill
17.02.2018
23:25:05

The
17.02.2018
23:46:59
Есть у кого-то пример как форматировать длинные многострочные SQL запросы в Go?